如何解决预期 END_ELEMENT,获得类型 1 的事件通过引用链:...->java.util.ArrayList[0]
我正在使用 XMLMapper 反序列化 aimL 代码(大部分与 XML 相同),当我在同一标签下混合文本和标签时遇到了这个问题。示例:
<set name="setvar">
<srai>FUNCTION1</srai>
<srai>FUNCTION2<star index="1"/></srai>
</set>
我的java类定义是:
@JacksonXmlRootElement(localName = "set")
public class Set {
@JacksonXmlProperty(isAttribute = true,localName = "name")
public String name;
@JacksonXmlElementWrapper(useWrapping = false)
@JacksonXmlProperty(localName = "srai")
public List<Srai> srais;
public Set() {
}
public Set(String name,List<Srai> srais) {
this.name = name;
this.srais = srais;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Srai> getSrais() {
return srais;
}
public void setSrais(List<Srai> srais) {
this.srais = srais;
}
}
@JacksonXmlRootElement(localName = "srai")
public class Srai {
@JacksonXmlElementWrapper(useWrapping = false)
@JacksonXmlProperty(localName = "star")
public List<Star> stars;
@JacksonXmlText
public String text;
public Srai() {}
public Srai(String text,List<Star> stars) {
this.text = text;
this.stars = stars;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public List<Star> getStars() {
return stars;
}
public void setStars(List<Star> stars) {
this.stars = stars;
}
}
@JacksonXmlRootElement(localName = "star")
public class Star {
@JacksonXmlProperty(isAttribute = true)
public int index;
public Star() {
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
如果我尝试将只有文本或只有 stars 的代码反序列化到 srai 中,一切正常,当我混合文本和标签时会出现问题。
解决方法
我终于按照 tnci 的建议将 jackson-databind、jackson-core、jackson-annotation 和 jackson-dataformat-xml 升级到 2.12.1 版,解决了这个问题。
为此,只需将其版本更改为 pom.xml 到 2.12.1 或更高版本即可。
然后我在 star 类中创建了一个新属性:
@JacksonXmlText
public String text;
这样,当 xml 标签之前或之间有文本时,它将保存在 star 对象上的此属性中。如果文本后面都是xml标签,就会出现这个问题:
Unexpected end-of-input when trying read value of type `**root-agent-class**`
所以问题仍然存在,但现在好多了,因为我们可以读取一些文本+标签代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。