Skip to content

Commit

Permalink
New UntypedObjectDeserializer
Browse files Browse the repository at this point in the history
  • Loading branch information
christophercurrie committed Mar 7, 2012
1 parent 57640fc commit a369660
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.fasterxml.jackson.module.scala

import com.fasterxml.jackson.module.scala.deser.UntypedObjectDeserializerModule

/**
* Complete module with support for all features.
*
Expand All @@ -22,6 +24,7 @@ sealed class DefaultScalaModule
with MapModule
with CaseClassModule
with SetModule
with UntypedObjectDeserializerModule
{
override def getModuleName = "DefaultScalaModule"
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.fasterxml.jackson.module.scala.deser

import com.fasterxml.jackson.module.scala.JacksonModule
import org.codehaus.jackson.map.deser.std.{UntypedObjectDeserializer => JacksonUntypedObjectDeserializer}
import org.codehaus.jackson.JsonParser
import scala.collection.JavaConverters._
import java.util.{LinkedHashMap, ArrayList}
import org.codehaus.jackson.`type`.JavaType
import org.codehaus.jackson.map.{BeanProperty, DeserializerProvider, BeanDescription, DeserializationConfig, DeserializationContext, Deserializers}

private class UntypedObjectDeserializer extends JacksonUntypedObjectDeserializer {

override def mapArray(jp: JsonParser, ctxt: DeserializationContext): AnyRef = {
if (ctxt.isEnabled(DeserializationConfig.Feature.USE_JAVA_ARRAY_FOR_JSON_ARRAY)) {
mapArrayToArray(jp, ctxt)
}
else {
super.mapArray(jp, ctxt).asInstanceOf[ArrayList[AnyRef]].asScala
}
}

override def mapObject(jp: JsonParser, ctxt: DeserializationContext): AnyRef =
super.mapObject(jp, ctxt).asInstanceOf[LinkedHashMap[String, AnyRef]].asScala

}


private object UntypedObjectDeserializerResolver extends Deserializers.Base {

lazy val OBJECT = classOf[AnyRef]

override def findBeanDeserializer(javaType: JavaType,
config: DeserializationConfig,
provider: DeserializerProvider,
beanDesc: BeanDescription,
property: BeanProperty) =
if (!OBJECT.equals(javaType.getRawClass)) null
else new UntypedObjectDeserializer
}

trait UntypedObjectDeserializerModule extends JacksonModule {
this += (_ addDeserializers UntypedObjectDeserializerResolver)
}

0 comments on commit a369660

Please sign in to comment.