diff --git a/core/pom.xml b/core/pom.xml
index 97aacd1fb830f..b188fd6da460f 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -229,11 +229,6 @@
1.9
${hadoop.deps.scope}
-
- org.glassfish.jersey.media
- jersey-media-json-jackson
- 2.15
-
org.apache.mesos
mesos
diff --git a/core/src/main/scala/org/apache/spark/status/api/v1/CustomObjectMapper.scala b/core/src/main/scala/org/apache/spark/status/api/v1/JacksonMessageWriter.scala
similarity index 59%
rename from core/src/main/scala/org/apache/spark/status/api/v1/CustomObjectMapper.scala
rename to core/src/main/scala/org/apache/spark/status/api/v1/JacksonMessageWriter.scala
index 3e70700c9a889..cf509520d607f 100644
--- a/core/src/main/scala/org/apache/spark/status/api/v1/CustomObjectMapper.scala
+++ b/core/src/main/scala/org/apache/spark/status/api/v1/JacksonMessageWriter.scala
@@ -16,18 +16,22 @@
*/
package org.apache.spark.status.api.v1
+import java.io.OutputStream
+import java.lang.annotation.Annotation
+import java.lang.reflect.Type
import java.text.SimpleDateFormat
-import java.util.{Calendar, SimpleTimeZone}
+import java.util.{SimpleTimeZone, Calendar}
import javax.ws.rs.Produces
-import javax.ws.rs.core.MediaType
-import javax.ws.rs.ext.{ContextResolver, Provider}
+import javax.ws.rs.core.{MultivaluedMap, MediaType}
+import javax.ws.rs.ext.{Provider, MessageBodyWriter}
import com.fasterxml.jackson.annotation.JsonInclude
-import com.fasterxml.jackson.databind.{ObjectMapper, SerializationFeature}
+import com.fasterxml.jackson.databind.{SerializationFeature, ObjectMapper}
@Provider
@Produces(Array(MediaType.APPLICATION_JSON))
-private[v1] class CustomObjectMapper extends ContextResolver[ObjectMapper]{
+class JacksonMessageWriter extends MessageBodyWriter[Object]{
+
val mapper = new ObjectMapper() {
override def writeValueAsString(t: Any): String = {
super.writeValueAsString(t)
@@ -36,14 +40,38 @@ private[v1] class CustomObjectMapper extends ContextResolver[ObjectMapper]{
mapper.registerModule(com.fasterxml.jackson.module.scala.DefaultScalaModule)
mapper.enable(SerializationFeature.INDENT_OUTPUT)
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)
- mapper.setDateFormat(CustomObjectMapper.makeISODateFormat)
+ mapper.setDateFormat(JacksonMessageWriter.makeISODateFormat)
+
+ override def isWriteable(
+ aClass: Class[_],
+ `type`: Type,
+ annotations: Array[Annotation],
+ mediaType: MediaType): Boolean = {
+ true
+ }
+
+ override def writeTo(
+ t: Object,
+ aClass: Class[_],
+ `type`: Type,
+ annotations: Array[Annotation],
+ mediaType: MediaType,
+ multivaluedMap: MultivaluedMap[String, AnyRef],
+ outputStream: OutputStream): Unit = {
+ mapper.writeValue(outputStream, t)
+ }
- override def getContext(tpe: Class[_]): ObjectMapper = {
- mapper
+ override def getSize(
+ t: Object,
+ aClass: Class[_],
+ `type`: Type,
+ annotations: Array[Annotation],
+ mediaType: MediaType): Long = {
+ -1L
}
}
-private[spark] object CustomObjectMapper {
+private[spark] object JacksonMessageWriter {
def makeISODateFormat: SimpleDateFormat = {
val iso8601 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'GMT'")
val cal = Calendar.getInstance(new SimpleTimeZone(0, "GMT"))
diff --git a/core/src/test/scala/org/apache/spark/ui/UISeleniumSuite.scala b/core/src/test/scala/org/apache/spark/ui/UISeleniumSuite.scala
index 3395b5eb97844..7efa4cc289bd3 100644
--- a/core/src/test/scala/org/apache/spark/ui/UISeleniumSuite.scala
+++ b/core/src/test/scala/org/apache/spark/ui/UISeleniumSuite.scala
@@ -37,7 +37,7 @@ import org.apache.spark._
import org.apache.spark.api.java.StorageLevels
import org.apache.spark.deploy.history.HistoryServerSuite
import org.apache.spark.shuffle.FetchFailedException
-import org.apache.spark.status.api.v1.{StageStatus, CustomObjectMapper}
+import org.apache.spark.status.api.v1.{JacksonMessageWriter, StageStatus}
/**
* Selenium tests for the Spark Web UI.
@@ -580,7 +580,7 @@ class UISeleniumSuite extends FunSuite with WebBrowser with Matchers with Before
}
def parseDate(json: JValue): Long = {
- CustomObjectMapper.makeISODateFormat.parse(json.extract[String]).getTime
+ JacksonMessageWriter.makeISODateFormat.parse(json.extract[String]).getTime
}
def getJson(ui: SparkUI, path: String): JValue = {