wsimport是根据JDK1.6.0_21及以上的生成本地代码的,它只能解析服务器端的SOAP协议为1.1,不能解析SOAP1.2的协议。如果解析SOAP1.2 将会解析不完全。 它可以支持SOAP1.1 和SOAP1.2的协议。前提是你已经下载了Apache CXF 并且将wsdl2java.exe配置为了path环境变量。
我查了一些资料,Content-Type:text/xml是soap1.1,而Content-Type:application/soap+xml是soap1.2。 3.SOAP1.1版本与SOAP1.2版本在头信息上存在差异。 3.1.SOAP1.1存在SOAPAction的请求头。 3.2.SOAP1.2没有SOAPAction的请求头。 4.基于SOAP1.1生成的WSDL和基于SOAP1.2生成的WSDL也不一样。 5.在CXF中两种协议请求的方式也不一样。 =UTF-8 命名空间: Soap1.1的命名空间: xmlns:soap=“http://schemas.xmlsoap.org/soap/envelope/“ Soap1.2 命名空间: Soap1.2是以:soap12:address定义。 注意:jdk1.6不支持12形式的访问。
DocumentException e) { e.printStackTrace(); } return result; } } Soap1.2 : 下载 jaxws-ri-2.2.8 Jaxws实现soap1.2需要加入jaxws扩展包,从sun下载jaxws-ri-2.2.8,解压jaxws-ri-2.2.8并将lib下的jar包加载到java server.jaxws.ws.itcast.cn/"> <return>天气晴朗</return> </ns2:queryWeatherResponse> </S:Body> </S:Envelope> Soap1.1与soap1.2 异同 相同之处: soap1.1和soap1.2都是使用post方法 都包括Envelope和body 内容类型context-type不同: soap1.1使用text/xml soap1.2使用application /soap+xml 命名空间Envelope xmlns不同: soap1.1使用http://schemas.xmlsoap.org/soap/envelope/ soap1.2使用http://www.w3
(3)发布基于soap1.2协议的服务 在SEI实现类上添加如下注解 @BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING) 发布基于 soap1.2协议的服务,需要jax-ws包要求2.2.8以上版本。 (4)soap1.2请求的协议体 ? (5)soap1.2响应的协议体 ?
第一步:下载jaxws-ri-2.2.8的扩展包 第二步:创建web工程 第三步:将扩展包中的jar拷贝至web工程下 第四步:编写服务端代码,编写方法与之前我们学习的jax-ws方法一致 如果需要生成soap1.2 wsgen 格式为: wsgn [–wsdl] –cp <服务接口或类> [-r] -cp classpath(注意都是相对与当前目录) -r wsdl路径(注意都是相对与当前目录) 注意:如果要发布soap1.2 wsdl:soap1.1 -cp WebRoot\WEB-INF\classes cn.itcast.weather.server.ServerJws -r WebRoot\WEB-INF\wsdl soap1.2 **wsdl2java可以生成soap1.1和soap1.2 wsdl2java生成客户代码 先让我们了解一下cxf的wsdl2java工具,它的功能就如同wsimport一样,可以生成一堆客户端调用的代码 jaxWsProxyFactoryBean.create(); //调用webservice weatherServerInterface.queryWather("郑州"); SOAP1.2
如何发布SOAP1.2服务端 jaxws不支持SOAP1.2服务端发布,直接发布会报如下异常: ? 如果想发布SOAP1.2服务端,需要在服务端引入第三方jar包:jaxws-ri-2.2.8 并在实现类上加入注解:@BindingType(SOAPBinding.SOAP12HTTP_BINDING 请求发送方式相同:都是使用POST 协议内容相同:都有Envelope和Body标签 不同点: 数据格式不同:content-type不同 SOAP1.1:text/xml; charset=utf-8 SOAP1.2 :application/soap+xml; charset=utf-8 命名空间不同: SOAP1.1:http://schemas.xmlsoap.org/soap/envelope/ SOAP1.2 body标签 不同点: Content-type数据类选不同: SOAP1.1:text/xml; charset=utf-8; SOAP1.2
而且提供了soap1.1/soap1.2/get/post 四种方式来调用获取: ? ? ? 但是实际上可能没有写的这么详细,就是给我们一个WSDL,里面的内容是这样的: ? 我们可以看到里面有soap1.1,soap1.2, http-get,http-post四种,我们以soap1.2为例,我们可以看到她后面binding = "tns:MobileCodeWSSoap12 补充2 : 刚提到了Soap1.1 和 Soap1.2: ? ? ? 结语: emmmm.......轻喷即可。有错请留言,我可以进行修改。其中文章配图部分引自下面参考文章。
httpPost.setConfig(config); CloseableHttpResponse response = null; try { // 采用SOAP1.1调用服务端,这种方式能调用服务端为soap1.1和soap1.2 的服务 httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8"); // 采用SOAP1.2调用服务端,这种方式只能调用服务端为 soap1.2的服务 // httpPost.setHeader("Content-Type", "application/soap+xml;charset=UTF-8"); StringEntity
比如下面这个是国内手机号码归属地查询WEB服务: 而且提供了soap1.1/soap1.2/get/post 四种方式来调用获取: 但是实际上可能没有写的这么详细,就是给我们一个WSDL,里面的内容是这样的 : 这里有些人可能不知道怎么来读懂这个文件,其实很简单,我们一步步来看: 我们先找到相应的service: 我们可以看到里面有soap1.1,soap1.2, http-get,http-post 四种,我们以soap1.2为例,我们可以看到她后面binding = "tns:MobileCodeWSSoap12",所以我们查找相应的binding的值 我们搜索到了MobileCodeWSSoap12 补充2 : 刚提到了Soap1.1 和 Soap1.2: 结语: emmmm.......轻喷即可。有错请留言,我可以进行修改。其中文章配图部分引自下面参考文章。
CloseableHttpResponse response = null; try { //采用SOAP1.1调用服务端,这种方式能调用服务端为soap1.1和soap1.2 的服务 httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8"); //采用SOAP1.2 调用服务端,这种方式只能调用服务端为soap1.2的服务 // httpPost.setHeader("Content-Type", "application/soap+xml;
SOAP1.1和SOAP1.2的细节略有不同。以下小节显示了这些文档格式之间的差异。文字格式<?xml version="1.0" encoding="UTF-8"? 注意:对于SOAP1.2,编码版本略有不同。 要轻松区分版本,请检查SOAP编码命名空间的声明:对于SOAP1.1,SOAP编码命名空间为"http://schemas.xmlsoap.org/soap/encoding/" 对于SOAP1.2,SOAP
不需要使用@webservice) 生成的文档不规范,不建议使用 JaxWsServerFactoryBean(建议使用此类,需要使用@webservice) 生成的文档不规范,可以发布SOAP1.1,SOAP1.2 如果使用SOAP1.2需要用@bindType注解指定 当使用SOAP1.2时wsimport命令失效,需要使用cxf的wsdl2java 建议:发布服务的时候使用SOAP1.2,客户端调用的时候使用SOAP1.1 既可以生成SOAP1.1也可以生成SOAP1.2 此工具位于cxf_home/bin目录下。参数与wsimport有所不同。 它包含以下参数: -d参数,指定代码生成的目录。 SOAP1.2消息 POST /WebServices/MobileCodeWS.asmx HTTP/1.1 Host: webservice.webxml.com.cn Content-Type: application
后改名Apache SOAP,也就是支持SOAP1.1的那个版本,到现在的AXIS已经是第三代了,AXIS对Apache SOAP的改进有很多,比如用SAX代替以前的DOM,增加对WSDL的支持,支持SOAP1.2
mobilewebservice网站上soap1.2请求如下 ? 而我们这里要改成这样 <?xml version="1.0" encoding="UTF-8"?
</wsdl:definitions> 1)从第08行可以看出,该WebSerivce所基于的SOAP协议版本是SOAP1.2; 2)从第10行可以看出,该WebSerivce的命名空间(NameSpace
结果 soap1.2 xml中为soap12 POST /WebServices/WeatherWS.asmx HTTP/1.1 Host: ws.webxml.com.cn Content-Type:
Apache Axis2不仅支持SOAP1.1和SOAP1.2协议,同时还支持REST风格的协议。比起Apache Axis1,Apache Axis2更加高效,支持XML格式数据传输等。
.org/2003/05/soap-envelope“ xmlns:soap=“http://schemas.xmlsoap.org/soap/envelope/ “ Soap1.1的命名空间: Soap1.2 命名空间: SOAP1.1版本与SOAP1.2版本在头信息上存在差异。 SOAP1.2没有SOAPAction的请求头。 基于SOAP1.1生成的WSDL和基于SOAP1.2生成的WSDL也不一样。 主要看命名空间。 在CXF中两种协议请求的方式也不一样。
WrapperName和WrapperNameSpace属性 SOAP标头属性 SOAP标准定义了下列可存在于标头上的属性: Actor/Role(在SOAP1.1中为Actor,在SOAP1.2
ClientProxyFactoryBean JaxWsServerFactoryBean—————-JaxWsProxyFactoryBean JaxWsServerFactoryBean 可以发布soap1.2 因为jdk1.6基本的发布不支持Http,soap1.2。 1、发送和接收XML数据。 JS一直存在跨域访问的问题 目前的jQuery不支持跨域访问。