Jackson XML Deserialization - Save an Unrecognized Field

jackson, java, json, xml

Solution

You can't save the unrecognized field simply because Jackson doesnt know where to map it to.

2 things:

1.) Check/Modify your object model and make sure it matches the XML.

2.) Annotate your class with `@JsonIgnoreProperties(ignoreUnknown=true)` to prevent this error from occuring. The value for the unrecognized field will be lost, though.

Problem

I am using Jackson to deserialize an XML file returned by a server. I'm getting an UnrecognizedPropertyException with the error message "Unrecognized field "" ". The XML in question: ``` <Identifiers> <Identifier type="Organisational Study">Q2736g</Identifier> <Identifier type="NCT">NCT00109200</Identifier> </Identifiers> ``` Stack Trace: ``` com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "" (class sloan.scraper.Trial$Identifier), not marked as ignorable (3 known properties: , "data2", "type", "data"]) at [Source: java.io.StringReader@28c2f254; line: 1, column: 547] (through reference chain: sloan.mit.cortellisScraper.Trial["Identifiers"]->sloan.mit.cortellisScraper.Identifier[""]) at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:79) at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:579) at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:672) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:906) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:328) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121) at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:147) at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:18) at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:375) at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:107) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:308) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2796) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1942) at sloan.mit.cortellisScraper.Main.fetchJson(Main.java:173) at sloan.mit.cortellisScraper.Main.main(Main.java:64) ``` How can I use Jackson to save the unrecognized field?

Original source