Hi -- I am wondering if anyone has experienced the following issue with XML 
deserialization to Scala case classes annotated with @JacksonXmlText:

Jackson version: 2.9.6

Given the following case classes:

@JacksonXmlRootElement(localName = "MyDocument")
case class MyDocument(@JacksonXmlProperty(localName = "MyElement")
                      somethingWithXmlText: Option[MyElement] = None)


case class MyElement(@JacksonXmlProperty(localName = "anAttribute", isAttribute 
= true)
                     anAttribute: Option[String] = None,

                     @JacksonXmlText
                     theValue: Option[String] = None)



Deserialization fails in the following test scenario:

class CaseClassJacksonXmlTextTest extends WordSpec with MustMatchers {

  private val module = new JacksonXmlModule()
  module.setDefaultUseWrapper(false)
  private val mapper = new XmlMapper(module)
  mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
  mapper.configure(SerializationFeature.INDENT_OUTPUT, true)
  mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY)
  mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)
  mapper.setSerializationInclusion(JsonInclude.Include.NON_ABSENT)
  mapper.registerModule(DefaultScalaModule)

  "my document" should {

    "serialization should be commutative" in {
      val doc = MyDocument(Some(MyElement(
        anAttribute = Some("foo"),
        theValue = Some("bar")
      )))
      val sw = new StringWriter()
      mapper.writeValue(sw, doc)
      val serialized = sw.toString
      val deserialized = mapper.readValue(serialized, classOf[MyDocument])
      deserialized must be(doc)
    }

  }

}


Stack trace:

Invalid definition for property `` (of type `MyElement`): Could not find 
creator property with name '' (known Creator properties: [anAttribute, 
theValue])
 at [Source: (StringReader); line: 1, column: 1]
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Invalid 
definition for property `` (of type `MyElement`): Could not find creator 
property with name '' (known Creator properties: [anAttribute, theValue])
 at [Source: (StringReader); line: 1, column: 1]
 at 
com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:62)
 at 
com.fasterxml.jackson.databind.DeserializationContext.reportBadPropertyDefinition(DeserializationContext.java:1446)
 at 
com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.addBeanProps(BeanDeserializerFactory.java:567)
 at 
com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:227)
 at 
com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:137)
 at 
com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:411)
 at 
com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:349)
 at 
com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
 at 
com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
 at 
com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
 at 
com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:444)
 at 
com.fasterxml.jackson.module.scala.deser.OptionDeserializer.createContextual(OptionDeserializerModule.scala:48)
 at 
com.fasterxml.jackson.databind.DeserializationContext.handlePrimaryContextualization(DeserializationContext.java:651)
 at 
com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:484)
 at 
com.fasterxml.jackson.databind.deser.std.DelegatingDeserializer.resolve(DelegatingDeserializer.java:58)
 at 
com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:293)
 at 
com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
 at 
com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
 at 
com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:477)
 at 
com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:4190)
 at 
com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4009)
 at 
com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3004)
 at 
CaseClassJacksonXmlTextTest$$anonfun$1$$anonfun$apply$mcV$sp$1.apply(CaseClassJacksonXmlTextTest.scala:34)


I've noticed an issue reported 
https://github.com/FasterXML/jackson-dataformat-xml/issues/198 which 
appears to describe the same problem but has been closed due to 
unreproducibility? My test case is attached.

Any advice on what I might be doing wrong or suggestions for 
fixes/workarounds would be much appreciated!

Cheers,

Chris

-- 
You received this message because you are subscribed to the Google Groups 
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Attachment: CaseClassJacksonXmlTextTest.scala
Description: Binary data

Reply via email to