javax.xml.bind.UnmarshalException:意外元素(uri:"",local:" TestSubject")。预期元素是< {} Test>

时间:2014-02-17 05:13:31

标签: 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)

1 个答案:

答案 0 :(得分:4)

好像你没有向我们展示你想要解组的真正的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>意味着是根节点,因此就是它发生的地方。