SOAP1.1和1.2 深入解析WSDL
普通http post的contentType為 application/x-www-form-urlencoded
WebService的contentType為-即在Http的基礎上發SOAP協議
text/xml 這是基於soap1.1協議。
application/soap+xml 這是基於soap1.2協議。
WebService從資料傳輸格式上作了限定。WebService所使用的資料均是基於XML格式的。目前標準的WebService在資料格式上主要採用SOAP協議。
SOAP協議實際上就是一種基於XML編碼規範的文字協議。
SOAP – Simple Object Access protocol 簡單對像訪問協議。是執行在HTTP協議基礎之上的協議。其實就是在HTTP協議是傳輸XML檔案,就變成了SOAP協議。
SOAP1.1和SOAP1.2的 namespace不一樣。可以通過檢視類
javax.xml.ws.soap.SOAPBinding來檢視裡面的常量
預設情況下,Jdk1.6只支援soap1.1
即:@BindingType(value=javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING)
SOAP提升:
1.目前WebService的協議主要有SOAP1.1和1.2。
2.SOAP1.1版本與SOAP1.2版本在頭資訊上存在差異。
SOAP1.1存在SOAPAction的請求頭。
SOAP1.2沒有SOAPAction的請求頭。
3.基於SOAP1.1生成的WSDL和基於SOAP1.2生成的WSDL也不一樣。
主要看名稱空間。
4.在CXF中兩種協議請求的方式也不一樣。
1.1為content-Type:text/xm;charset=UTF-8
1.2為content-Type:application/soap+xml;charset=UTF-8
5.兩者的名稱空間不同。
名稱空間:
Soap1.1的名稱空間:
xmlns:soap=“http://schemas.xmlsoap.org/soap/envelope/ “
Soap1.2 名稱空間:
xmlns:soap="http://www.w3.org/2003/05/soap-envelope“
SOAP1.1的HTTP請求頭:
POST /xe_cxf2.4_soap12_spring_web/ws/helloworldsoap12?wsdl HTTP/1.1
Content-Type: text/xml; charset=UTF-8
Accept: **
User-Agent: Apache CXF 2.4.0
Cache-Control: no-cache
Pragma: no-cache
Host: localhost:6767
Connection: keep-alive
Content-Length: 214
SOAP1.2的請求頭:
POST /xe_cxf2.4_soap12_spring_web/ws/helloworldsoap12?wsdl HTTP/1.1
Content-Type: application/soap+xml; charset=UTF-8
Accept: */*
User-Agent: Apache CXF 2.4.0
Cache-Control: no-cache
Pragma: no-cache
Host: localhost:6767
Connection: keep-alive
Content-Length: 214
SOAP1.1和1.2的WSDL檔案的差別:
l在定義Service部分差別如下:
lSoap1.1是以:soap:address定義。
lSoap1.2是以: soap12:address定義。-jdk1.6不支援12形式的訪問。
通過BindingType將專案轉到1.2
在類上面新增以下註解可以使用soap1.2的協議:
@BindingType(value=SOAPBinding.SOAP12HTTP_BINDING)
或在applicationContext.xml中使用binding
<jaxws:binding>
<soap:soapBinding version="1.2"/>
<jaxws:binding>