1616 */
1717package org .apache .spark .status .api .v1
1818
19+ import java .io .OutputStream
20+ import java .lang .annotation .Annotation
21+ import java .lang .reflect .Type
1922import java .text .SimpleDateFormat
20- import java .util .{Calendar , SimpleTimeZone }
23+ import java .util .{SimpleTimeZone , Calendar }
2124import javax .ws .rs .Produces
22- import javax .ws .rs .core .MediaType
23- import javax .ws .rs .ext .{ContextResolver , Provider }
25+ import javax .ws .rs .core .{ MultivaluedMap , MediaType }
26+ import javax .ws .rs .ext .{Provider , MessageBodyWriter }
2427
2528import com .fasterxml .jackson .annotation .JsonInclude
26- import com .fasterxml .jackson .databind .{ObjectMapper , SerializationFeature }
29+ import com .fasterxml .jackson .databind .{SerializationFeature , ObjectMapper }
2730
2831@ Provider
2932@ Produces (Array (MediaType .APPLICATION_JSON ))
30- private [v1] class CustomObjectMapper extends ContextResolver [ObjectMapper ]{
33+ class JacksonMessageWriter extends MessageBodyWriter [Object ]{
34+
3135 val mapper = new ObjectMapper () {
3236 override def writeValueAsString (t : Any ): String = {
3337 super .writeValueAsString(t)
@@ -36,14 +40,38 @@ private[v1] class CustomObjectMapper extends ContextResolver[ObjectMapper]{
3640 mapper.registerModule(com.fasterxml.jackson.module.scala.DefaultScalaModule )
3741 mapper.enable(SerializationFeature .INDENT_OUTPUT )
3842 mapper.setSerializationInclusion(JsonInclude .Include .NON_NULL )
39- mapper.setDateFormat(CustomObjectMapper .makeISODateFormat)
43+ mapper.setDateFormat(JacksonMessageWriter .makeISODateFormat)
44+
45+ override def isWriteable (
46+ aClass : Class [_],
47+ `type` : Type ,
48+ annotations : Array [Annotation ],
49+ mediaType : MediaType ): Boolean = {
50+ true
51+ }
52+
53+ override def writeTo (
54+ t : Object ,
55+ aClass : Class [_],
56+ `type` : Type ,
57+ annotations : Array [Annotation ],
58+ mediaType : MediaType ,
59+ multivaluedMap : MultivaluedMap [String , AnyRef ],
60+ outputStream : OutputStream ): Unit = {
61+ mapper.writeValue(outputStream, t)
62+ }
4063
41- override def getContext (tpe : Class [_]): ObjectMapper = {
42- mapper
64+ override def getSize (
65+ t : Object ,
66+ aClass : Class [_],
67+ `type` : Type ,
68+ annotations : Array [Annotation ],
69+ mediaType : MediaType ): Long = {
70+ - 1L
4371 }
4472}
4573
46- private [spark] object CustomObjectMapper {
74+ private [spark] object JacksonMessageWriter {
4775 def makeISODateFormat : SimpleDateFormat = {
4876 val iso8601 = new SimpleDateFormat (" yyyy-MM-dd'T'HH:mm:ss.SSS'GMT'" )
4977 val cal = Calendar .getInstance(new SimpleTimeZone (0 , " GMT" ))
0 commit comments