无法解析具有属性的空 xml 属性
Can't parse empty xml property with attribute
我有以下 xml:
<prog>
<prop1 attr="attr"> </prop1>
<prop2>some</prop2>
</prog>
我有以下class代表它:
@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]
下面的xml可以很好的解析(使用上面的class):
无属性
<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
,但我也尝试将其表示为 Object:
@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);
它与版本 2.7.4
的 com.fasterxml.jackson
完美配合。但如果某些库有另一个版本(例如,早期版本的 jackson-dataformat-xml
),它会失败并出现各种错误。所以你要检查一下com.fasterxml.jackson.core
、jackson-annotations
和jackson-dataformat-xml
使用的是哪个版本,并且让它们一样。
我有以下 xml:
<prog>
<prop1 attr="attr"> </prop1>
<prop2>some</prop2>
</prog>
我有以下class代表它:
@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]
下面的xml可以很好的解析(使用上面的class):
无属性
<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
,但我也尝试将其表示为 Object:
@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);
它与版本 2.7.4
的 com.fasterxml.jackson
完美配合。但如果某些库有另一个版本(例如,早期版本的 jackson-dataformat-xml
),它会失败并出现各种错误。所以你要检查一下com.fasterxml.jackson.core
、jackson-annotations
和jackson-dataformat-xml
使用的是哪个版本,并且让它们一样。