1

我正在使用 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>

我已经尝试了无数的方法来解决这个问题。任何帮助都会很棒!

4

2 回答 2

1

尝试将 DOM 元素包装在一个实例中DOMSource并执行以下操作:

DOMSource domSource = new DOMSource(e);
JAXBElement<store> element =
    unmarshaller.unmarshal(domSource, store.class);

通过提供您希望解组的类,JAXB impl 不需要根据根元素确定解组类。

于 2013-01-30T21:54:34.850 回答
0

您的根元素<header ...><store>StackTrace 所说的不同。

尝试创建带有@XmlRootElement(name="header")注释和Store类的新类 Header(不是带有小“s”的“存储”),因为它是带有注释的属性(<- 如果您在 Store 类@XmlElement(name="store")中定义,则不确定是否真的需要 XmlElement 注释)。@XmlRootElement

于 2013-03-29T20:22:52.203 回答