无法使用属性解析空xml属性

时间:2016-05-20 21:11:20

标签: java jackson xml-deserialization

我有以下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: java.io.PushbackInputStream@1bbaaffd; line: 18, column: 36]

可以很好地解析以下xmls(使用上面的类):

没有属性

<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);

1 个答案:

答案 0 :(得分:2)

它与版本com.fasterxml.jackson的{​​{1}}完美配合。但是,如果某些库具有其他版本(例如,早期版本的2.7.4),则会因各种错误而失败。因此,您必须检查使用的jackson-dataformat-xmlcom.fasterxml.jackson.corejackson-annotations版本,并使它们相同。