Web-Service-SOAP1.1 vs SOAP1.2

SOAP提升:

1.目前WebService的協議主要有SOAP1.1和1.2。
2.兩者的命名空間不同。
1.見下頁對比。
3.SOAP1.1版本與SOAP1.2版本在頭信息上存在差異。
1.SOAP1.1存在SOAPAction的請求頭。
2.SOAP1.2沒有SOAPAction的請求頭。
4.基於SOAP1.1生成的WSDL和基於SOAP1.2生成的WSDL也不一樣。
1.主要看命名空間。
5.在CXF中兩種協議請求的方式也不一樣。
1.1.1爲content-Type:text/xm;charset=UTF-8
2.1.2爲content-Type:application/soap+xml;charset=UTF-8

命名空間:

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?wsdlHTTP/1.1
Content-Type:text/xml; charset=UTF-8
Accept: */*
SOAPAction:""
User-Agent:Apache CXF 2.4.0
Cache-Control: no-cache
Pragma: no-cache
Host: localhost:6767
Connection: keep-alive
Content-Length: 216

注意上面包含SOAPAction且請求方式爲text/xml




SOAP1.2的請求頭:

  POST /xe_cxf2.4_soap12_spring_web/ws/helloworldsoap12?wsdlHTTP/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

注意上面沒有SOAPAction且類型爲soap+xml.


SOAP1.1和1.2的WSDL文件的差別:

l在定義Service部分差別如下:
lSoap1.1是以:soap:address定義。
lSoap1.2是以: soap12:address定義。-jdk1.6不支持12形式的訪問。


通過BindingType將項目轉到1.2:

l在類上面添加以下註解可以使用soap1.2的協議:
@BindingType(value=SOAPBinding.SOAP12HTTP_BINDING)
l或在applicationContext.xml中使用binding
<jaxws:binding>
  <soap:soapBindingversion="1.2" />
  </jaxws:binding>

SOAP1.2的調用:

當使用了SOAP12以後,wsimport和Eclipse的WSExplorer都不可以正常使用了。
必須,使用cxf提供的wsdl2java工具生成本地代碼。
生成本地代碼後,通過cxf內置的攔截器,攔截到以下頭信息說明是soap12.


SOAP11與SOAP12的調用關係:



CXF中兩種協議請求的方式也不一樣

Soap1.1以普通方式訪問:

  使用JaxWsProxyFactoryBean

Soap1.2以指定wsdl地址和命名空間的形式訪問:

  Service service = Service.create(newURL(“wsdlUrl”),

                                                          new QName(“namespace”,”ServiceName”));

      SomeClass sc = service.getPort(new QName(“namespace”,”PortName”),

                                                         SomeClass.class);

      sc.someMethod(someParam);


通過Ajax形式訪問:

1、指定contentType:’application/soap+xml;charset=“UTF-8”‘

2、組織使用XML數據,使用SOAP12的命名空間.

		var str = '<soap12:Envelope xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">'+
			  '<soap12:Body><ns2:sayHi xmlns:ns2="http://service.itcast.com/">'+
			  '<arg0>'+nm+'</arg0></ns2:sayHi></soap12:Body></soap12:Envelope>';
			$.ajax({
				url:'<c:url value="/ws/greeting"/>',
				contentType:'application/soap+xml;charset="UTF-8"',
				dataType:'xml',
				type:'post',
				data:str,
				success:function(data){
					var vv = $(data).find("return").eq(0).text();
					$("<div>").text(vv).css({border:'1px solid red',width:'500px',marginTop:'5px'})
								.appendTo($("body"));
				}
			},"xml");



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章