当前位置: 首页 > 知识库问答 >
问题:

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

萧宏远
2023-03-14

我试图散集XML。

这就是我的XML的样子

<DeviceInventory2Response xmlns="http://tempuri.org/">
<DeviceInventory2Result xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Obj123 xmlns="">
     <Id>1</Id>
     <Name>abc</Name>
  </Obj123>
  <Obj456 xmlns="">
  .
  .
  .

我正在尝试获取Obj123下的Id和姓名。然而,当我运行我的解组命令时,我得到了以下错误。

An Error:  javax.xml.bind.UnmarshalException: unexpected element (uri:"http://tempuri.org/", local:"DeviceInventory2Response"). Expected elements are (none)

我的代码在主类中如下所示:

Obj123 myObj123 = (Obj123) unmarshaller.unmarshal(inputSource);

我的Obj123类如下所示:

package com.myProj.pkg;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;


@XmlRootElement(name="Obj123")
public class Obj123 {

  private String Id;
  private String Name;

  public String getId() {
    return Id;
  }

  public String getName() {
    return Name;
  }
}

我认为通过设置我的XMLRootElement,我应该能够跳过XML的前2行,但这似乎并没有发生。有什么想法吗?

编辑:

我的 JAXB 上下文就是这样制作的:

JAXBContext jaxbContext = JAXBContext.newInstance();
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Obj123 obj123 = (Obj123) unmarshaller.unmarshal(xmlStreamReader);

共有3个答案

公西繁
2023-03-14

使用 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();
}

尝试此操作将解决上述问题。我的问题已经解决了。

东明德
2023-03-14

JAXB实现将尝试匹配文档的根元素(而不是子元素)。如果想在XML文档的中间解组,那么可以用StAX解析文档,将< code>XMLStreamReader推进到所需的元素,然后解组。

了解更多信息

  • http://blog.bdoughan.com/2012/08/handle-middle-of-xml-document-with-jaxb.html

现在我收到以下错误。错误:javax.xml.bind.UnmarshalException - 链接异常:[javax.xml.bind.UnmarshalException:unexpected element (uri:“”, local:“Obj123”).预期元素为(无)]。

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

JAXBContext jaxbContext = JAXBContext.newInstance();

您需要做:

JAXBContext jaxbContext = JAXBContext.newInstance(Obj123.class);
沃威
2023-03-14

我通过添加解决了这个问题

@XmlRootElement(name=“abc_xxx”) 到 Root 类
。(其中 abc_XXX 是 XML 的根标记)

eclipse生成的JAXB类没有将此注释添加到我的根类中。

 类似资料:
  • 我试图解封XML文件。我创建了Jaxb类,但是当我试图解封时,它会给出: 这是我的ObjectFactory.java类: 你能请帮助,因为我被卡住了,不能提供我的客户开发这个功能的延迟原因。 谢谢,Jayesh Jain

  • 问题内容: 我遵循此经常引用的博客文章中有关使用xsi:type的说明: http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using- xsitype.html 基本上我有这个: 而这个测试: 我得到这个结果: 我已经尝试了JAXB的默认实现jaxb- impl-2.1.2,并基于此bug尝试了jaxb- impl-2.2.6-b38.j

  • 我有这个xml文件: 我有以下java代码: 在控制台输出中,我看到 我做错了什么? java版本“1.7.0_45”

  • 背景: 我使用JAXB将XML解组为Java对象。最初,我只是使用JAXB来执行解组。然后对代码进行静态分析,并提出了XML外部实体注入的高关键性问题。经过一点研究,我发现了一个建议(https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#JAXB_Unmarshaller)使用配置为防止解析

  • 我有这种结构的xml文件: 有没有可能将这种XML解组到一个对象中。问题是每个元素都有一些独特的标签。我想把这些值放到列表中,但是我不知道怎么做。

  • 你好,我正在使用JAXB将XML解锁到JAVA,我的xml文档中有一个元素“值”,可以是int类型,也可以是双精度型,并且我的java类中此元素的相应属性是数字类型的“值”。 JAXB不支持“数字”类型的umarshaling,我想,有人知道如何处理这个问题吗?一个例子将会得到真正的赞赏。提前谢谢。