2011-06-24 102 views
2

多年前,我基於給出的WSDL構建了SOAP 1.1服務。這很基本:我執行了Axis的WSDL2Java並使用生成的類作爲基礎。如何將用於SOAP 1.1的WSDL文件轉換爲支持SOAP 1.2

現在我被告知要遷移此服務,以便人們可以使用SOAP 1.2訪問它。

我應該在我的WSDL文件中更改什麼,以便我的新生成的服務(仍然使用Axis的WSDL2Java)支持SOAP 1.2?

重要的是要明白我是服務提供商:我不希望僅適用於客戶的解決方案。

非常感謝!

回答

4

從結構上講,您需要在WSDL文檔中添加對SOAP 1.2的支持。 您的'抽象'WSDL部分定義了類型,消息和portTypes。 (我在這裏假設你想更新你的WSDL1.1文檔,爲你現有的服務添加SOAP1.2支持)

爲了支持SOAP1.2,你需要添加SOAP1.2兼容的綁定和服務定義。 作爲一個例子,我們有這個端口定義:

<wsdl:portType name="ServerSoap"> 
    <wsdl:operation name="SomeOperation"> ... 

您將需要添加一個SOAP1.2結合部爲您的操作:

<wsdl:binding name="ServerSoap12" type="tns:ServerSoap"> 
    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
    <wsdl:operation name="SomeOperation"> 
     <soap12:operation soapAction="..." style="document" /> ... 

與服務:

<wsdl:service name="Server"> 
     <!-- SOAP1.1 Service --> 
     <wsdl:port name="ServerSoap" binding="tns:ServerSoap"> 
     <soap:address location="http://localhost:8080/Server" /> 
    </wsdl:port> 

     <!-- SOAP1.2 Service --> 
    <wsdl:port name="ServerSoap12" binding="tns:ServerSoap12"> 
     <soap12:address location="http://localhost:8080/Server" /> 
    </wsdl:port> 
</wsdl:service> 

請注意,這兩個定義可以共存,並且您的服務可以向後兼容SOAP1.1。客戶必須選擇使用SOAP1.1或SOAP1.2。

實際上,您可以嘗試從您擁有的代碼生成WSDL,指示Axis爲SOAP1.2生成綁定。我不是AXIS用戶,所以RTM java2wsdl提供了一種解決方法。

+0

非常感謝!今天我沒有太多的時間來測試它,所以我會在星期一嘗試。 –

+0

恩,那就行!謝謝! –

+0

什麼是'soap12'?它在哪裏描述?我有'xmlns:soap =「http://schemas.xmlsoap.org/wsdl/soap12/」'但生成的web服務僅支持soap 1.1出於某種原因 – 4ntoine