l WebService只采用HTTP POST方式传输数据,不使用GET方式(要发送SOAP请求体); -- 握手,WSDL-get,
• 普通http post的contentType为
• application/x-www-form-urlencoded
• WebService的contentType为-即在Http的基础上发SOAP协议
• text/xml 这是基于soap1.1协议。
• application/soap+xml这是基于soap1.2协议。
l WebService从数据传输格式上作了限定。WebService所使用的数据均是基于XML格式的。目前标准的WebService在数据格式上主要采用SOAP协议。SOAP协议实际上就是一种基于XML编码规范的文本协议。
l SOAP – Simple Object Access protocol 简单对像访问协议。是运行在HTTP协议基础之上的协议。其实就是在HTTP协议是传输XML文件,就变成了SOAP协议。
l SOAP1.1和SOAP1.2的namespace不一样。可以通过查看类
• javax.xml.ws.soap.SOAPBinding来查看里面的常量
• 默认情况下,Jdk1.6只支持soap1.1
• 即:@BindingType(value=javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING)
l WebService和Web服务器有什么区别呢?我们可以把WebService看作是Web服务器上应用;反过来说,Web服务器是WebService运行时所必需的容器。这就是它们的区别和联系。
l 使用JDK1.6发布的简单Web服务,其内部其实是使用Socket实现。可以查看:SUN公司未对外公布的API类com.sun.xml.internal.ws.transport.http.server.ServerMgr获知,请使用反编译工具。
l WebService的特点
• WebService通过HTTP POST方式接受客户的请求
• WebService与客户端之间一般使用SOAP协议传输XML数据.
• 它本身就是为了跨平台或跨语言而设计的。
SOAP1.1和1.2之区别
Soap1.1的命名空间:
xmlns:soap=“http://schemas.xmlsoap.org/soap/envelope/“
Soap1.2 命名空间:
xmlns:soap="http://www.w3.org/2003/05/soap-envelope“
1.1
POST/xe_cxf2.4_soap12_spring_web/ws/helloworldsoap12?wsdl HTTP/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
1.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是以:soap:address定义。
Soap1.2是以: soap12:address定义。-jdk1.6不支持12形式的访问。
1.2为content-Type:application/soap+xml;charset=UTF-8
l 在类上面添加以下注解可以使用soap1.2的协议:
• @BindingType(value=SOAPBinding.SOAP12HTTP_BINDING)
l 或在applicationContext.xml中使用binding
• <jaxws:binding>
• <soap:soapBindingversion="1.2" />
• </jaxws:binding>
l 当使用了SOAP12以后,wsimport和Eclipse的WSExplorer都不可以正常使用了。
l 必须,使用cxf提供的wsdl2java工具生成本地代码。
l 生成本地代码后,通过cxf内置的拦截器,拦截到以下头信息说明是soap12.
这就说明客户端最好使用1.1,服务端最好使用1.2
CXF对两种不同的协议调用方式
Soap1.1以普通方式访问:
使用JaxWsProxyFactoryBean
Soap1.2以指定wsdl地址和命名空间的形式访问:
Serviceservice = Service.create(new URL(“wsdlUrl”),
new QName(“namespace”,”ServiceName”));
SomeClass sc = service.getPort(new QName(“namespace”,”PortName”),
SomeClass.class);
sc.someMethod(someParam);
监控协议的几种方式
对于测试SOAP协议
MyEclipseWebservice Explorer
对于ajax请求方式:
HttpWatchProfessional【针对IE】
FireFox fireBug【针对FireFox】
对于java程序
TCP/IPMonitor【客户端程序修改端口号,这个程序转发请求,拦截网络消息】,他可以独立运行,也可以以Eclipse的插件运行。