SOAP提升:

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

见下页对比

SOAP1.1版本与SOAP1.2版本在头信息上存在差异。
SOAP1.1存在SOAPAction的请求头。
SOAP1.2没有SOAPAction的请求头。
基于SOAP1.1生成的WSDL和基于SOAP1.2生成的WSDL也不一样。

主要看命名空间

在CXF中两种协议请求的方式也不一样。
1.1为content-Type:text/xm;charset=UTF-8
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?wsdl HTTP/1.1
Content-Type: text/xml; charset=UTF-
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?wsdl HTTP/1.1
Content-Type: application/soap+xml; charset=UTF-
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文件的差别:

在定义Service部分差别如下:
Soap1.1是以:soap:address定义。
Soap1.2是以: soap12:address定义。-jdk1.6不支持12形式的访问。

通过BindingType将项目转到1.2:

在类上面添加以下注解可以使用soap1.2的协议:

@BindingType(value=SOAPBinding.SOAP12HTTP_BINDING)
或在applicationContext.xml中使用binding
<jaxws:binding>
<soap:soapBinding version="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(new URL(“wsdlUrl”),
new QName(“namespace”,”ServiceName”));
SomeClass sc = service.getPort(new QName(“namespace”,”PortName”),
SomeClass.class);
sc.someMethod(someParam);

通过Ajax形式访问:

、指定contentType:’application/soap+xml;charset=“UTF-”‘
、组织使用XML数据,使用SOAP12的命名空间.
(由于代码太多,请见下面的备注)

SOAP1.1 VS SOAP1.2的更多相关文章

  1. axis2设置soap1.1或soap1.2协议

    现在Axis.Axis2都是同时支持SOAP1.1和SOAP1.2的.即在服务器端发布一个WebService服务之后,客户端既可以通过SOAP1.1版本来访问服务器的服务,也可以通过SOAP1.2版 ...

  2. soap1.1与soap1.2

    1.soap1.2 如果加上jar包后,项目启动报错,有可能是jar包没起作用, 解决方法:把jar包移除,重新加入jar包 TCP/IP Monitor监测到的内容: soap1.2请求与soap1 ...

  3. 用java实现简单快速的webservice客户端/数据采集器(支持soap1.1和soap1.2标准,支持utf-8编码)

    前言: 用了cxf,axis等各种wbeservice实现库,简单试用了一下动态调用的方式,很不满意,完全无法满足业务的需要,所以自己实现了一个webservice采集客户端,方便动态调用外部webs ...

  4. SOAP1.1 and SOAP1.2

    在用cxf 做webservice客户端的时候碰到的: javax.xml.ws.soap.SOAPFaultException: A SOAP 1.2 message is not valid wh ...

  5. soap1.1与soap1.2区别

  6. WebService:设置服务器提供SOAP1.2的服务

    1,访问通过cxf发布的服务 (1)与之前一样,同样可以通过在本地通过wsdl文件和命令行生成Java文件来访问服务. 但是我们既然使用了cxf发布,就要通过cxf的工具生成访问.可以通过cxf目录的 ...

  7. CXF支持 SOAP1.1 SOAP1.2协议

    SOAP协议分为两个版本 1.1 1.2 默认支持1.1   实现方式:   1.编写接口   import javax.jws.WebService; @WebService public inte ...

  8. webservice初识,SOAP1.1版本

    客户端与服务端模式,非web端发布 1.1      [Jax-ws第一个例子] 1.1.1     第一步:服务端开发 编写SEI(Service Endpoint Interface),SEI在w ...

  9. cxf ServerFactoryBean 生成基于soap1.2的WebServices

    //获得服务工厂bean ServerFactoryBean bean = new ServerFactoryBean(); HTTPTransportFactory httpTransportFac ...

随机推荐

  1. 【Hibernate 懒加载】debug模式懒加载获取空数据

    <many-to-one name="department" class="k.domain.Department" column="depar ...

  2. mybatis-01-简单概述基础点

    1.mybatis的优点 mybatis:半自动化持久化框架 sql(专注数据)和java编码(专注业务)分离 可使用简单的xml或者注解用于配置和原始映射 将接口和java中的pojo映射成数据库中 ...

  3. [Python] Tkinter的食用方法_01_简单界面

    #开始 放假之后感觉整个人已经放飞自我了,完全不知道自己一天天在干什么,明明有很多的事情需要做,但是实际上每天啥都没做,,,虚度光阴... 晚上突然心烦意乱,开始思考今天一天都做了什么,感觉很有负罪感 ...

  4. LoadLibrary与LoadLibraryEx

    参考了这个博客:https://blog.csdn.net/cuglifangzheng/article/details/50580279 以及这个博客:https://blog.csdn.net/z ...

  5. Servlet线程安全问题(转载)

    转载地址:https://www.cnblogs.com/LipeiNet/p/5699944.html 前言:前面说了很多关于Servlet的一些基础知识,这一篇主要说一下关于Servlet的线程安 ...

  6. Android学习09

    SharedPreferences SharedPreferences,是一种轻量级的数据存储方式,采用Key/value的方式 进行映射,Sp通常用于记录一些参数配置.行为标记等! 1.获得mSha ...

  7. redis(一)动态字符串

    redis 动态字符串 概述 Sda(Simple Dynamic String) 简单动态字符串是 redis中用来表示字符串的结构,而不是传统 C 字符串. 主要的特点就是Sda要做到高效和 二进 ...

  8. Django 字段中 null 和 blank的区别

    blank 设置为 True 时,字段可以为空 设置为 False 时,字段是必须填写的 默认为 False null 设置为 True 时,数据库的字段允许为NULL,而且表单中的空值将会被存储为N ...

  9. centos610无桌面安装JDK

     Centos610系列配置 1.使用yum查找jdk: yum search java|grep jdk    2.选择安装截图中选中的版本 yum install java-1.8.0-openj ...

  10. Fedora以root用户自动登陆

    目录 Fedora以root用户自动登陆 参考 配置自动登陆 Fedora以root用户自动登陆 Fedora Workstation Version: 31