web-dev-qa-db-ja.com

WSDLは、WebサービスのSOAPバージョン(1.1または1.2)を示すことができますか?

WSDLの情報に基づいて、WebサービスがSOAP 1.1または1.2を使用しているかどうかを確認できますか?

68
mjn

SOAP 1.1は名前空間を使用します http://schemas.xmlsoap.org/wsdl/soap/

SOAP 1.2は名前空間を使用します http://schemas.xmlsoap.org/wsdl/soap12/

Wsdlは、同じwsdlで同時にsoap 1.1とsoap 1.2の下で操作を定義できます。 SOAP 1.2(例:MTOM)を必要とする新しい機能をサポートするためにwsdlを進化させる必要がある場合に便利です。この場合、新しいサービスを作成する必要はなく、元のサービスを進化させるだけです。

59
jmhostalet

WSDLでBindingセクションを見ると、サービスがsoap 1.2を使用している場合、soapバインディングが明示的に言及されていることが明確にわかります。以下のサンプルを参照してください。

<binding name="EmployeeServiceImplPortBinding" type="tns:EmployeeServiceImpl">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="findEmployeeById">
    <soap12:operation soapAction=""/>
    <input><soap12:body use="literal"/></input>
    <output><soap12:body use="literal"/></output>
</operation><operation name="create">
    <soap12:operation soapAction=""/>
    <input><soap12:body use="literal"/></input>
    <output><soap12:body use="literal"/></output>
</operation>
</binding>

webサービスがsoap 1.1を使用する場合、バインディングセクションの下のWSDLファイルでsoapバージョンを明示的に定義しません。以下のサンプルを参照してください。

<binding name="EmployeeServiceImplPortBinding" type="tns:EmployeeServiceImpl">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
<operation name="findEmployeeById">
    <soap:operation soapAction=""/>
    <input><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></input>
    <output><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></output>
</operation><operation name="create">
    <soap:operation soapAction=""/>
    <input><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></input>
    <output><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></output>
</operation>
</binding>

SOAPバージョンのSOAPメッセージ?

ただし、これはWebサービスが使用するSOAPバージョンを決定するためのあまりお勧めの方法ではないことに注意してください。 soapメッセージのバージョンは、次のいずれかの方法で決定できます。

1。SOAPメッセージの名前空間を確認する

SOAP 1.1  namespace : http://schemas.xmlsoap.org/soap/envelope

SOAP 1.2 namespace  : http://www.w3.org/2003/05/soap-envelope

2。soapメッセージのトランスポートバインディング情報(httpヘッダー情報)を確認する

SOAP 1.1:Context-Typeのユーザーテキスト/ xml

   POST /MyService HTTP/1.1
   Content-Type: text/xml; charset="utf-8"
   Content-Length: xxx
   SOAPAction: "urn:uuid:myaction"

SOAP 1.2:Context-Typeのユーザーapplication/soap + xml

   POST /MyService HTTP/1.1
   Content-Type: application/soap+xml; charset="utf-8"
   Content-Length: xxx
   SOAPAction: "urn:uuid:myaction"

。using SOAP fault information

2つのバージョン間でSOAP障害メッセージの構造は異なります。

31

このページを見つけました

http://schemas.xmlsoap.org/wsdl/soap12/soap12WSDL.htm

soap 1.2は新しい名前空間を使用すると言います http://schemas.xmlsoap.org/wsdl/soap12/

これは、「SOAP 1.1」のWSDL 1.1バインディング拡張機能にあります。

13
mjn

はい、通常、WSDLに基づいてサポートされるバージョンSOAPバージョンを確認できます。

デモWebサービスWSDL をご覧ください。それは、SOAP 1.2。をサポートしていることを示すsoap12名前空間への参照を持っています。もしそれがなければ、おそらくサービスはSOAP 1.1 。

4
sipwiz

これがSOAP 1.1 HTTPバインディングのWSDL 1.1バインディングであることを示すbinding-elementにtransport-attributeが見つかりました。

例.

<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
2
LilleElefant