From 4a234d32deb87d8c854c5f7b7bc9fda246b07038 Mon Sep 17 00:00:00 2001 From: Imran Rashid Date: Mon, 27 Apr 2015 13:19:13 -0500 Subject: [PATCH] avoid jersey-media-json-jackson b/c of potential version conflicts --- core/pom.xml | 5 -- ...apper.scala => JacksonMessageWriter.scala} | 46 +++++++++++++++---- .../org/apache/spark/ui/UISeleniumSuite.scala | 4 +- 3 files changed, 39 insertions(+), 16 deletions(-) rename core/src/main/scala/org/apache/spark/status/api/v1/{CustomObjectMapper.scala => JacksonMessageWriter.scala} (59%) 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 = {