1

我使用 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 ...”它应该是名称“Output”,就像我在所有注释中定义的那样(即使在maMethodePrincipaleResponse名称等......)所以当我尝试用java客户端调用我的服务器时我收到一条错误消息,例如

javax.xml.bind.UnmarshalException: Unexpected Element (URI : "http://mon.namespace.1", local : "return"). Expected elements are <{http://mon.namespace.1}Output>

我已经尝试了一系列可能的更正,例如将肥皂绑定设置为“裸”并将每个部件名或名称设置为“输出”,但没有任何效果。

我应该怎么做才能将此返回参数命名为“输出”?

4

2 回答 2

3

您可以尝试使用拦截器。

在此链接中,您可以看到如何修改 cxf 响应。

祝你好运

于 2012-11-30T09:25:52.403 回答
0

您正在使用 Request/ResponseWrapper 的。因此,元素的名称将在这些类的字段的注释中定义。

于 2012-11-30T15:28:07.257 回答