2016-07-21 12 views
0

cxfwsdlウェブサービスを作成しました。SOAP wsdlの名前空間ラッパータグを防ぐには?

問題:リクエストとレスポンスの両方に、ネームスペースを持つ追加のラッパー要素が含まれています。

質問:このラッパー要素を防ぐことはできますか?なぜなら、私にとっては価値がなく、他の人が私のWebサービスを使用するときの追加要素に過ぎないからです。

たとえば、次の例の<com:MyNameOperation><MyNameReq>階層を、ネストされた2つの要素ではなく1つの要素に減らしたいとします。

@WebService(name = "myname", serviceName = "myname", targetNamespace = "com.test") 
publi class MySoapServlet { 
    @WebMethod(operationName = "MyNameOperation") 
    @WebResult(name = "MyNameResult") 
    public MyResponse getRsp(@WebParam(name = "MyNameReq") MyNameReq req) { 
     //return... 
    } 
} 

@XmlRootElement(name = "MyNameResponse") 
@XmlAccessorType(XmlAccessType.FIELD) 
@JsonInclude(JsonInclude.Include.NON_EMPTY) 
public class MyNameResponse { 
    private String name; 
} 

結果のWSDL構造:

要求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:de="com.test"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <!-- how can I omit this namespace element completely? --> 
     <com:MyNameOperation> 
     <MyNameReq> 
      ... 
     </MyNameReq> 
     </com:MyNameOperation> 
    </soapenv:Body> 
</soapenv:Envelope> 

応答:

あなたがBARE @SOAPBinding(parameterStyle=ParameterStyle.BARE) parameterstyleユーザが
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
     <!-- how can I omit this namespace element completely? --> 
     <ns2:MyNameResponse xmlns:ns2="com.test"> 
     <MyNameResult> 
      <name>somevalue</name> 
     </MyNameResult> 
     </ns2:MyNameResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 

答えて

2

。ただし操作を識別するために操作名が必要なため、2つのレベルを完全に削除することはできません。更新されたクラスは次のようになります。

@WebService(name = "myname", serviceName = "myname", targetNamespace = "com.test") 
@SOAPBinding(parameterStyle=ParameterStyle.BARE) 
publi class MySoapServlet { 
    @WebMethod(operationName = "MyNameOperation") 
    @WebResult(name = "MyNameResult") 
    public MyResponse getRsp(@WebParam(name = "MyNameReq") MyNameReq req) { 
     //return... 
    } 
} 

更新されたリクエストXMLは次のようになります。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:de="com.test"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <com:MyNameReq> 
      <name >data</name> 
     </com:MyNameReq> 
    </soapenv:Body> 
</soapenv:Envelope> 

と応答完璧に働いた

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
     <!-- how can I omit this namespace element completely? --> 
     <ns2:MyNameResult xmlns:ns2="com.test"> 
      <name>somevalue</name> 
     </ns2:MyNameResult> 
    </soapenv:Body> 
</soapenv:Envelope> 
+0

だろう! – membersound