javax.xml.bind.UnmarshalException : unexpected element (uri :"", 本地 :"TestSubject")。预期元素是 <{}Test>

标签 java xml jaxb

关于这个问题有几个帮助主题 但我还没有找到解决我的问题的解决方案。 我感谢解决问题的指导。

我尝试通过 Marshal 生成 xml,下面的 xml 是从代码生成的。

我必须使用下面的 xml 结构:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Test>
    <testSubject>
        <firstName>test1</firstName>`enter code here`
        <lastNAme>lastname</lastNAme>
        <ssn>123456</ssn>
    </testSubject>
</Test>

代码

@XmlRootElement(name = "Test")
public class Test { 
      public Test()
      {
          testSubject = new ArrayList<TestSubject>();
      }

    List<TestSubject> testSubject;

    @XmlElement(name = "testSubject", type = TestSubject.class)         
    public List<TestSubject> getTestSubject() {
        return testSubject;
    }

    public void setTestSubject(List<TestSubject> testSubject) {
        this.testSubject = testSubject;
    }

TestSubject 类

public class TestSubject {

    String firstName;
    String lastNAme;
    int ssn;

//getters and setters

}

//在我的主类中解码代码

JAXBContext jc = JAXBContext.newInstance(Test.class);

Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("c://testSubjects.xml");
Test tests = (Test) unmarshaller.unmarshal(xml);

异常

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"TestSubject"). Expected elements are <{}Test>
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:662)

最佳答案

您似乎没有向我们展示您试图解码的真实 XML。如果您的 XML 格式为

,就会出现您看到的错误
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<testSubject>
    <firstName>test1</firstName>
    <lastNAme>lastname</lastNAme>
    <ssn>123456</ssn>
</testSubject>

代替

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Test>
    <testSubject>
        <firstName>test1</firstName>
        <lastNAme>lastname</lastNAme>
        <ssn>123456</ssn>
    </testSubject>
</Test>

只需更正即可。

正如堆栈跟踪所说

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"TestSubject"). Expected elements are <{}Test>

您正在获得一个 <testSubject> 节点,而您期望的是一个 <Test> 节点。因为 <Test> 是根节点,所以它出现的地方。

关于javax.xml.bind.UnmarshalException : unexpected element (uri :"", 本地 :"TestSubject")。预期元素是 <{}Test>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21821272/

相关文章:

java - 如何使用内容uri检查文件是否存在

java - 与普通的PreparedStatement相比,使用Spring jdbcTemplate对性能造成的影响

java - Mapreduce Mapper说明

C# 从 HTML Body 解析 XML 并保存到文件

xml - 400 对剩余应用程序/xml 的错误请求

jaxb - "Versioning"JAXB 对象?

java - Xstream:具有 XStreamImplicit 的 itemFieldName 但仍包裹在元素中的列表

java - Kafka Streams - 处理超时

android - 如何在android中创建一个支持所有设备的布局?

java - JaxB 自动从 XML 解析为 Java 类