我这样做,
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;
答案 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>