0
我正在使用jackson庫(2.5.2)並試圖反序列化一些實際上具有CDATA部分的XML。用JacksonXML反序列化CDATA - 無法識別的屬性異常
看來Jackson 2.5增加了對CDATA的支持。
這裏是我的類,它有CDATA:
public class Certificate {
@JacksonXmlProperty(localName = "name", isAttribute = true)
private String name;
@JacksonXmlCData
private String data;
@JacksonXmlProperty(localName = "date-added", isAttribute = true)
@JsonFormat(pattern = "EEE MMM d HH:mm:ss z yyyy")
private Date dateAdded;
@JsonFormat(pattern = "EEE MMM d HH:mm:ss z yyyy")
@JacksonXmlProperty(localName = "date-expires", isAttribute = true)
private Date expirationDate;
public void setData(String data) {
this.data = data;
}
public String getData() {
return data;
}
public String getName() {
return name;
}
public Date getDateAdded() {
return dateAdded;
}
public void setDateAdded(Date dateAdded) {
this.dateAdded = dateAdded;
}
}
,我得到下面的異常。根本就沒有辦法用jackson反序列化CDATA?
看來,使用JacksonXmlText工作正常,但當我需要序列化回來我需要的值在CDATA而不是文本。
這是我第一次使用傑克遜這個,所以我可能會錯過一些明顯的東西。
謝謝
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "" (class com.company.model.Certificate),
not marked as ignorable (4 known properties: "date-added", "data", "name", "date-expires"])
at [Source: [email protected]; line: 23, column: 36] (through reference chain:
com.company.model.Configuration["partner"]->java.util.HashSet[0]->com.company.model.PartnerConfiguration["config"]
->java.util.HashSet[0]->com.company.model.HostConfiguration["cert"]->java.util.HashSet[0]->com.company.model.Certificate[""])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:51)
at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:817)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:958)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1324)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1302)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:249)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:136)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:25)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:523)
at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:101)
at com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap.findDeserializeAndSet(BeanPropertyMap.java:285)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:248)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:136)
at com.fasterxml.jackson.dataformat.xml.deser.WrapperHandlingDeserializer.deserialize(WrapperHandlingDeserializer.java:120)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:25)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:523)
at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:101)
at com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap.findDeserializeAndSet(BeanPropertyMap.java:285)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:248)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:136)
at com.fasterxml.jackson.dataformat.xml.deser.WrapperHandlingDeserializer.deserialize(WrapperHandlingDeserializer.java:120)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:25)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:523)
at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:101)
at com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap.findDeserializeAndSet(BeanPropertyMap.java:285)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:248)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:136)
at com.fasterxml.jackson.dataformat.xml.deser.WrapperHandlingDeserializer.deserialize(WrapperHandlingDeserializer.java:120)
at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:3534)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1936)
at com.fasterxml.jackson.dataformat.xml.XmlMapper.readValue(XmlMapper.java:196)
at com.fasterxml.jackson.dataformat.xml.XmlMapper.readValue(XmlMapper.java:171)
FWIW,第二個是讀取(反序列化)所需的全部內容。第一個可能被用來確保它被序列化爲CDATA,這也是有用的。 – StaxMan
值得注意的是'JacksonXmlCData'是無條件的,所以所有的值都包含在CDATA標籤中,而不僅僅是包含非分析字符的值。 – snakeoil