WebService:SOAP及协议的监控

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获知,请使用反编译工具。

WebService的特点

•    WebService通过HTTP POST方式接受客户的请求

•    WebService与客户端之间一般使用SOAP协议传输XML数据.

•    它本身就是为了跨平台或跨语言而设计的。


 

SOAP1.1和1.2之区别

  1. 目前WebService的协议主要有SOAP1.1和1.2。
  2. 两者的命名空间不同。

Soap1.1的命名空间:

                        xmlns:soap=“http://schemas.xmlsoap.org/soap/envelope/“

Soap1.2 命名空间:

                       xmlns:soap="http://www.w3.org/2003/05/soap-envelope

 

  1. SOAP1.1版本与SOAP1.2版本在头信息上存在差异。
    1. SOAP1.1存在SOAPAction的请求头。
    2. SOAP1.2没有SOAPAction的请求头。

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

  1. 基于SOAP1.1生成的WSDL和基于SOAP1.2生成的WSDL也不一样。
    1. 主要看命名空间。
    2. 在定义Service部分差别如下:

Soap1.1是以:soap:address定义。

Soap1.2是以:  soap12:address定义。-jdk1.6不支持12形式的访问。

 

  1. 在CXF中两种协议请求的方式也不一样。
    1. 1.1为content-Type:text/xm;charset=UTF-8

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的插件运行。


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值