javax.xml.bind.UnmarshalException:意外的元素。我错过了什么?

时间:2012-08-22 18:16:24

标签: java jaxb unmarshalling

我这样做,

JAXBContext jaxbContext = JAXBContext.newInstance(new Class[] { 
      mine.beans.ObjectFactory.class }); 
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
orderhistory = (OrderHistory) unmarshaller.unmarshal(new StreamSource(
      new StringReader(responseXML)));`

我收到了javax.xml.bind.UnmarshalException: Unexpected element "OrderHistory". Expected elements are "{_http://orderhistory.shc.com/common/domain}OrderHistory".但是我检查了我的OrderHistory.java我有

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

我缺少什么?

即使是package-info.java文件也存在

这是我的回复xml,
<?xml version="1.0" encoding="UTF-8"?>
  <OrderHistory>
  <guid>5555</guid>
  <syNumber xsi:nil="true"></syNumber>
 <email xsi:nil="true"></email>
  <totalPages>0</totalPages>
</OrderHistory>

我仍然面临同样的问题???

我对package-info.java进行了更改后删除了命名空间属性,但我仍然看到同样的问题,

@javax.xml.bind.annotation.XmlSchema() package mine.beans;

3 个答案:

答案 0 :(得分:2)

好像您的输入文档不是命名空间限定的。

你有:

<OrderHistory>...</OrderHistory>

您的JAXB(JSR-222)实现期望:

<OrderHistory xmlns="_http://orderhistory.shc.com/common/domain">...</OrderHistory>

相关

如果要从DOM解组,请务必在setNamespaceAware(true)的实例上调用DocumentBuilderFactory

了解更多信息

答案 1 :(得分:0)

作为提示。尝试编组来自对象的文档,并查看标记是否按预期编写。

答案 2 :(得分:0)

您是否尝试修改XML?您的UNmarshaller希望OrderHistory-Element成为“http://orderhistory.shc.com/common/domain”命名空间的一部分,但它不是。你可以尝试一下:

<?xml version="1.0" encoding="UTF-8"?>
<OrderHistory xmlns="_http://orderhistory.shc.com/common/domain">
<guid>5555</guid>
<syNumber xsi:nil="true"></syNumber>
<email xsi:nil="true"></email>
<totalPages>0</totalPages>
</OrderHistory>