我正在使用JAX-WS调用Web服务。我想将内容转换为Java对象。
以下是Web服务响应的内容部分。
<header xmlns="">
<store>
<store_id>1</store_id>
<store_name>ACME</store_name>
</store>
</header>
然后我按如下方式创建了一个类:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"store_id",
"store_name" })
@XmlRootElement(name = "store")
static public class store {
@XmlElement(name = "store_id", required = true)
protected String store_id;
@XmlElement(name = "store_name", required = true)
protected String store_name;
}
我的JAXB代码:
List result = service.getService1Soap12().getDivisions().getContent();
ElementNSImpl e =(ElementNSImpl)result.get(0);
JAXBContext context = JAXBContext.newInstance(store.class);
Unmarshaller um = context.createUnmarshaller();
JAXBElement element = (JAXBElement) um.unmarshal(e);
store customer = (store) element.getValue();
我收到以下错误:
Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"store"). Expected elements are <{http://tempuri.org/}header>
我已经尝试了无数的东西来解决这个问题。任何帮助都会很棒!
答案 0 :(得分:1)
尝试将DOM元素包装在DOMSource
的实例中并执行以下操作:
DOMSource domSource = new DOMSource(e);
JAXBElement<store> element =
unmarshaller.unmarshal(domSource, store.class);
通过提供您希望解组的类,JAXB impl不需要根据根元素确定unmarshal类。
答案 1 :(得分:0)
您的根元素是<header ...>
而不是<store>
,正如您的StackTrace所说的那样。
尝试创建具有@XmlRootElement(name="header")
注释和Store
类(而不是“存储”,带有小“s”)的新类标题,因为它具有@XmlElement(name="store")
注释的属性(&lt; - 不确定)如果在Store类中定义了@XmlRootElement
,则确实需要XmlElement注释。