【问题标题】:javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"TestSubject"). Expected elements are <{}Test>javax.xml.bind.UnmarshalException:意外元素(uri:“”,本地:“TestSubject”)。预期元素是 <{}Test>
【发布时间】:2014-02-17 05:13:30
【问题描述】:

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

我尝试通过 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 和你展示的一样吗?

标签: java xml jaxb


【解决方案1】:

您似乎没有向我们展示您尝试解组的真正 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>

您将获得一个 &lt;testSubject&gt; 节点,而您期望在该节点上获得一个 &lt;Test&gt; 节点。因为&lt;Test&gt; 是根节点,所以它就出现在这里。

【讨论】:

  • 我使用了指定的正确 xml(根节点为“测试”)。仍然是相同的异常。无法确定原因
  • @user 我必须要求您重新验证所有内容,因为它对我有用。
  • 我还有一个 JAXB 问题。你愿意帮助我吗?这是链接:stackoverflow.com/questions/25751255/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 2021-08-01
  • 2014-01-02
  • 1970-01-01
相关资源
最近更新 更多