我正在使用JAXb2 maven插件来创建domain [bean]类。
当我尝试通过WebServiceTemplate类访问该服务时,出现以下错误。
Exception:org.springframework.oxm.UnmarshallingFailureException: JAXB unmarshalling exception; nested exception is javax.xml.bind.UnmarshalException: unexpected element (uri:"http://services.abc.cde.efg.com", local:"xxxLookupResponse"). Expected elements are <{services.abc.cde.efg.com"}xxxLookupRequest>,<{services.abc.cde.efg.com"}xxxLookupResponse>,<{services.abc.cde.efg.com"}zzzUploadOrder>
和我的绑定文件如下所示。
我想知道它如何期待三个元素,即最后一个也与该Web服务完全无关,也没有在jaxb绑定文件中定义。我已经检查了创建的bean类,并且它们没有相互关联。
<jaxb:bindings schemaLocation="abcsServices.xsd" node="/xs:schema">
<jaxb:bindings node="xs:complexType[@name='xxxxxLookupRequest']">
<annox:annotate>
<annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement"
name="xxxxxxLookupRequest" />
</annox:annotate>
</jaxb:bindings>
</jaxb:bindings>
<jaxb:bindings schemaLocation="abcsServices.xsd" node="/xs:schema">
<jaxb:bindings node="xs:complexType[@name='xxxxxLookupResponse']">
<annox:annotate>
<annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement"
name="xxxxxLookupResponse" />
</annox:annotate>
</jaxb:bindings>
</jaxb:bindings>
请对此加以说明。我被困在这里。
客户代码:
ObjectFactory objFactory = new ObjectFactory(); xxxxLookupRequest req = objFactory.createxxxxLookupRequest(); req.setxxxx("12344"); req.setxxxxx("34234"); xxxxxLookupResponse response = (xxxxxLookupResponse) xxxxClient .doDeliveryLookUp(req);
========
春季客户代码:
response = (xxxxxLookupResponse) getWebServiceTemplate() .marshalSendAndReceive(xxxxLookupRequest, new SoapActionCallback("urn:xxxxxLookup"));
最佳答案
如何创建JAXBContext?请显示Spring配置。
错误消息也很奇怪:...unexpected element (uri:"http://services.abc.cde.efg.com", local:"xxxLookupResponse"). Expected elements are ... <{services.abc.cde.efg.com"}xxxxxLookupResponse>...
您在这里有匹配的名称(xxxLookupResponse
与xxxxxLookupResponse
)吗?
我的理论是,您在两个位置生成或定义了一个程序包(services.abc.cde.efg.com
),而JAXB选择了错误的程序包。
JAXB不会直接考虑您引用的绑定文件,它们仅在代码生成期间使用。然后,JAXB将与生成的类一起使用。