解组Web Service响应时出错

时间:2013-01-30 21:38:29

标签: java xml web-services jaxb jax-ws

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

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

2 个答案:

答案 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注释。