【问题标题】:Expected END_ELEMENT, got event of type 1 (through reference chain: ...->java.util.ArrayList[0])预期 END_ELEMENT,得到类型 1 的事件(通过引用链:...->java.util.ArrayList[0])
【发布时间】:2021-09-23 03:46:44
【问题描述】:

我正在使用 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 中,一切正常,当我混合文本和标签时会出现问题。

【问题讨论】:

    标签: java xml jackson aiml xmlmapper


    【解决方案1】:

    我终于设法解决了它,将我的 jackson-databind、jackson-core、jackson-annotation 和 jackson-dataformat-xml 升级到 2.12.1 版本,正如 tnci 建议的 here

    为此,只需将他们的 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**`
    

    所以问题仍然存在,但现在好多了,因为我们可以阅读一些文本+标签代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 2020-07-11
      相关资源
      最近更新 更多