根据WSDL中的信息,是否可以查看Web服务是使用SOAP 1.1还是1.2?
Answers:
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下的操作。如果您需要发展wsdl以支持需要soap 1.2的新功能(例如MTOM),那么这很有用,在这种情况下,您无需创建新服务,而只需发展原始服务即可。
在WSDL中,如果查看“绑定”部分,您将清楚地看到,如果服务使用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服务使用的肥皂版本。可以使用以下方式之一确定肥皂消息的版本。
1.检查肥皂消息的名称空间
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:上下文类型的用户text / xml
POST /MyService HTTP/1.1
Content-Type: text/xml; charset="utf-8"
Content-Length: xxx
SOAPAction: "urn:uuid:myaction"
SOAP 1.2:用于上下文类型的用户application / soap + xml
POST /MyService HTTP/1.1
Content-Type: application/soap+xml; charset="utf-8"
Content-Length: xxx
SOAPAction: "urn:uuid:myaction"
3.使用SOAP故障信息
两个版本之间的SOAP错误消息的结构不同。
soap
引用1.1的前缀是http://schemas.xmlsoap.org/wsdl/soap/
。soap12
指向1.2的前缀是http://schemas.xmlsoap.org/wsdl/soap12/
。无论前缀名称是什么(可以是偶数foo
或bar
),只要看看它解析的名称空间即可。
我已经找到此页面
http://schemas.xmlsoap.org/wsdl/soap12/soap12WSDL.htm
表示Soap 1.2使用新的名称空间http://schemas.xmlsoap.org/wsdl/soap12/
它在“用于SOAP 1.1的WSDL 1.1绑定扩展”中。
是的,您通常可以看到基于WSDL支持的SOAP版本。
看一下演示Web服务WSDL。它具有对soap12命名空间的引用,表明它支持SOAP 1.2。如果不存在,那么假设该服务仅支持SOAP 1.1,您可能会很安全。