2011-06-24 63 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