JAXB 解组不起作用。预期的元素是(无)

问题描述 投票:0回答:4
java jaxb unmarshalling
4个回答
20
投票

我通过添加解决了问题

@XmlRootElement(name="abc_xxx") 
到 Root 类。
(其中 abc_XXX 是 XML 的根标签)

eclipse生成的JAXB类没有在我的根类中添加这个注解。


13
投票

JAXB 实现将尝试匹配文档的根元素(而不是子元素)。 如果您想解组到 XML 文档的中间,那么您可以使用 StAX 解析文档,将

XMLStreamReader
推进到所需的元素,然后对其进行解组。

了解更多信息

更新

现在我收到以下错误。一个错误: javax.xml.bind.UnmarshalException - 带有链接异常: [javax.xml.bind.UnmarshalException:意外元素(uri:“”, 本地:“Obj123”)。预期元素为(无)]。

A

JAXBContext
只知道你告诉它的类。而不是:

JAXBContext jaxbContext = JAXBContext.newInstance();

你需要做:

JAXBContext jaxbContext = JAXBContext.newInstance(Obj123.class);

10
投票

使用 ObjectFactory 类代替,如

JAXBContext jaxbContext = null;
try {
    jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
} catch (JAXBException e) {
    e.printStackTrace();
}

JAXBElement<ObjectFactory> applicationElement = null;
try {
    applicationElement = (JAXBElement<ObjectFactory>)
    unmarshaller.unmarshal(Thread.currentThread().getClass()
        .getResourceAsStream(fileName));
} catch (JAXBException e) {
    e.printStackTrace();
}

试试这个就能解决上述问题。我的问题已经解决了


0
投票

当我将导入语句从 javax.xml.bind.annotation.XmlRootElement 更新为 @jakarta.xml.bind.annotation.XmlRootElement 时,问题已解决

© www.soinside.com 2019 - 2024. All rights reserved.