我使用CXF WSDL2java为现有WSDL生成服务器。
这给了我一个像这样的SEI:
@WebService(targetNamespace = "http://mon.namespace.1", name = "MonWs")
@XmlSeeAlso({ObjectFactory.class})
public interface MonWs {
@WebResult(name = "Output", targetNamespace = "http://mon.namespace.1")
@RequestWrapper(localName = "maMethodePrincipale", targetNamespace = "http://mon.namespace.1", className = "MaMethodePrincipaleRequest")
@WebMethod(operationName = "maMethodePrincipale", action = "http://mon.namespace.1/MonWs/maMethodePrincipale")
@ResponseWrapper(localName = "maMethodePrincipaleResponse", targetNamespace = "http://mon.namespace.1", className = "MaMethodePrincipaleResponse")
public MaMethodePrincipaleResponse.Output maMethodePrincipale(
@WebParam(name = "Input", targetNamespace = "http://mon.namespace.1")
MaMethodePrincipaleRequest.Input Input
);
}
我创建了一个基本的实现,但是当我在我的服务器上调用它(托管在tomcat上,使用de CXfNonSpringServlet)和soapUI(以及其他客户端)时,我得到了这样的回报:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:MaMethodePrincipaleResponse xmlns:ns1="http://mon.namespace.1">
<ns2:return xmlns="http://mon.namespace.2" xmlns:ns2="http://mon.namespace.1"/>
...
my return object field list correctly named
...
</ns2:return>
</ns1:MaMethodePrincipaleResponse>
</soap:Body>
</soap:Envelope>
我的问题是标签“ns2:return ...”它应该是名称“输出”,就像我在所有注释中定义的那样(即使在maMethodePrincipaleResponse名称等...) 因此,当我尝试使用Java客户端调用我的服务器时,我收到了类似
的错误消息javax.xml.bind.UnmarshalException: Unexpected Element (URI : "http://mon.namespace.1", local : "return"). Expected elements are <{http://mon.namespace.1}Output>
我已经尝试了一些可能的修正,例如将soap绑定设置为“bare”并将每个partname或name设置为“Output”但是没有任何效果。
如何将此返回参数命名为“Output”?
答案 0 :(得分:3)
您可以尝试使用Interceptor。
在此link中,您可以看到如何修改cxf响应。
祝你好运答案 1 :(得分:0)
您正在使用Request / ResponseWrapper。因此,元素的名称将在这些类中的字段的注释中定义。