2016-05-20 44 views
0

我有以下XML:無法解析空XML屬性與屬性

<prog> 
    <prop1 attr="attr"> </prop1> 
    <prop2>some</prop2> 
</prog> 

我有以下類代表它:

@JsonIgnoreProperties(ignoreUnknown = true) 
@JacksonXmlRootElement(localName = "prog") 
public class Prog { 

    @JacksonXmlProperty(localName = "prop1") 
    private String prop1; 

    @JacksonXmlProperty(localName = "prop2") 
    private String prop2; 

    //getters, setters 
} 

但它失敗,出現以下錯誤:Could not read document: Can not instantiate value of type [simple type, class com.xxx.xxx.entities.ro.Prog] from String value ('some'); no single-String constructor/factory method\n at [Source: [email protected]; line: 18, column: 36]

下面的xml可以很好的解析(使用上面的類):

無屬性

<prog> 
    <prop1> </prop1> 
    <prop2>some</prop2> 
</prog> 

空PROP1(而不是空格)

<prog> 
    <prop1 attr="attr"></prop1> 
    <prop2>some</prop2> 
</prog> 

不是空PROP1

<prog> 
    <prop1 attr="attr"> g</prop1> 
    <prop2>some</prop2> 
</prog> 

是否原始的XML有效嗎?我怎麼解析它?
其實我需要跳過attr,但我也想,作爲對象:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class XmlElement { 

    @JacksonXmlText 
    private String value; 

    //getters, setters 
} 

更新: 我祈求,而使用用SpringMVC控制器的分析,但它也與再現:

String xml = "<prog>" + 
     "<prop1 attr=\"att1\"> </prop1>" + 
     "<prop2>some</prop2>" + 
     "</prog>"; 
ObjectMapper xmlmapper = new XmlMapper(); 
Prog prog = xmlmapper.readValue(xml, Prog.class); 
+0

還顯示代碼如何調用分析器。 – Andremoniy

+0

@Andremoniy我已更新我的問題 –

回答

2

它與版本2.7.4com.fasterxml.jackson完美配合。但是,如果某些庫有另一個版本(例如,早期版本的jackson-dataformat-xml),則會出現各種錯誤。所以你必須檢查使用哪個版本的com.fasterxml.jackson.core,jackson-annotationsjackson-dataformat-xml,並使它們相同。

+0

我將版本更改爲2.7.4,並開始工作(以前我在各處使用2.7.3)。所以這只是以前版本中的一個錯誤? –

+0

哦,是的, 這裏是我的錯誤: https://github.com/FasterXML/jackson-dataformat-xml/issues/191 –