3

私はSOAPベースのWebサービスを実装していて、WS-Addressingを機能させています。ただし、WSDLを取得して、クライアントがwsa:To要素の値として使用する必要があるものを公開する方法がわかりません。

以下のスニペットをWSDLで使用し、SOAP-UIを使用してリクエストを生成しました。SOAP-UIは、このヘッダーを自動的に追加しませんが、wsa:actionを「http://myco.com/myOperation 」に設定する必要があることを認識しているようです。[WS-Aヘッダーの追加]メニューオプションを選択する必要があります。

私の問題は、wsa:Toヘッダーが追加されないことです。誰かがWSDLを修正して、wsa:Toが必要であり、その値を「 http://myco.com/cap/services/v1 」にする必要があることをクライアントに伝える方法を教えてもらえますか?

ありがとう

<wsdl:portType name="MyPortType">
    <wsdl:operation name="MyOperation">
        <wsdl:input message="tns:MyRequestMessage" name="Request"
                    wsaw:Action="http://myco.com/myOperation"/>
        <wsdl:output message="tns:MyResponseMessage" name="Response"/>
    </wsdl:operation>
</wsdl:portType>

<wsdl:binding name="MyBinding" type="tns:MyPortType">

    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsaw:UsingAddressing wsdl:required="true"/>
    <wsdl:operation name="MyOperation">
        <soap:operation soapAction="" style="document"/>
        <wsdl:input>
            <soap:body use="literal"/>
        </wsdl:input>
        <wsdl:output>
            <soap:body use="literal"/>
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>


<wsdl:service name="MyService">
    <wsdl:port binding="tns:MyBinding" name="MyPort">
        <soap:address location="http://myco.com/services"/>
        <wsa:Address>http://myco.com/cap/services/v1</wsa:Address>
    </wsdl:port>
</wsdl:service>
4

1 に答える 1

2

これを達成するために、2005 バージョンに対応する ws の名前空間を定義しました

<xs:schema ... xmlns:wsa5="http://www.w3.org/2005/08/addressing">
 ....
</xs:schema>

メッセージタイプ

<wsdl:message name="wsaHeader">
        <wsdl:part name="MessageID" element="wsa5:MessageID" />
        <wsdl:part name="RelatesTo" element="wsa5:RelatesTo" />
        <wsdl:part name="From" element="wsa5:From" />
        <wsdl:part name="ReplyTo" element="wsa5:ReplyTo" />
        <wsdl:part name="FaultTo" element="wsa5:FaultTo" />
        <wsdl:part name="To" element="wsa5:To" />
        <wsdl:part name="Action" element="wsa5:Action" />
</wsdl:message>

次に、入力と出力に次のタグを配置しました。

<wsdl:input>
    <soap:header use="literal" message="tns:wsaHeader" part="Action"/>
    <soap:header use="literal" message="tns:wsaHeader" part="To"/>
    <soap:header use="literal" message="tns:wsaHeader" part="FaultTo"/>
    <soap:header use="literal" message="tns:wsaHeader" part="ReplyTo"/>
    <soap:header use="literal" message="tns:wsaHeader" part="From"/>
    <soap:header use="literal" message="tns:wsaHeader" part="RelatesTo"/>
    <soap:header use="literal" message="tns:wsaHeader" part="MessageID"/>
    <soap:body use="literal" />
  </wsdl:input>
  <wsdl:output>
    <soap:header use="literal" message="tns:wsaHeader" part="Action"/>
    <soap:header use="literal" message="tns:wsaHeader" part="To"/>
    <soap:header use="literal" message="tns:wsaHeader" part="FaultTo"/>
    <soap:header use="literal" message="tns:wsaHeader" part="ReplyTo"/>
    <soap:header use="literal" message="tns:wsaHeader" part="From"/>
    <soap:header use="literal" message="tns:wsaHeader" part="RelatesTo"/>
    <soap:header use="literal" message="tns:wsaHeader" part="MessageID"/>
    <soap:body use="literal" />
  </wsdl:output> 

To目的に合わせてタグを追加するだけでよい場合があります。

于 2014-12-15T23:54:25.080 に答える