微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

预期 END_ELEMENT,获得类型 1 的事件通过引用链:...->java.util.ArrayList[0]

如何解决预期 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 举报,一经查实,本站将立刻删除。