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获知,请使用反编译工具。 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 ?????????????????? 1.2 POST/xe_cxf2.4_soap12_spring_web/ws/helloworldsoap12?wsdl HTTP/1.1
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的插件运行。 ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |