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
    );
}

基本的な実装を作成しましたが、自分のサーバー (CXfNonSpringServlet を使用して tomcat でホストされている) で 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>

ソープバインディングを「裸」に設定し、すべてのパーツ名または名前を「出力」に設定するなど、可能な修正をすでに試していますが、何も機能しません。

この戻りパラメータに「出力」という名前を付けるにはどうすればよいですか?

4

2 に答える 2

3

インターセプターの使用を試すことができます。

このリンクでは、cxf 応答を変更する方法を確認できます。

幸運を

于 2012-11-30T09:25:52.403 に答える
0

Request/ResponseWrapperを使用しています。したがって、要素の名前は、それらのクラスのフィールドの注釈で定義されます。

于 2012-11-30T15:28:07.257 に答える