加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

JAX-WS 内容协议的选择

发布时间:2020-12-16 23:38:10 所属栏目:安全 来源:网络整理
导读:JAX-WS支持SOAP1.1,SOAP1.2和HTTP。在之前所写的所有文章中,从没有涉及到跟协议相关的内容。但是JAX-WS默认使用的是SOAP1.1协议。所以之前的所有例子,均是在使用SOAP1.1. 我们也可以使用SOAP1.2,SOAP1.2跟SOAP1.1相比 SOAP1.2建立在XML infoset上,SOAP1.

JAX-WS支持SOAP1.1,SOAP1.2和HTTP。在之前所写的所有文章中,从没有涉及到跟协议相关的内容。但是JAX-WS默认使用的是SOAP1.1协议。所以之前的所有例子,均是在使用SOAP1.1.

我们也可以使用SOAP1.2,SOAP1.2跟SOAP1.1相比

  • SOAP1.2建立在XML infoset上,SOAP1.1建立在XML1.0.

  • SOAP1.2不再需要SOAPAction http heander

  • SOAP1.2的http contentType为application/soap+xml, 而SOAP1.1使用text/xml.

  • 官网上列出了9点,比较抽象,暂时还用不到。http://www.w3.org/2003/06/soap11-soap12.html?

如果使用HTTP内容协议,JAXWS就变成了restful service。

声明内容协议绑定的方式有2种,且优先级由低到高为:

  1. 在SEI实现类上使用@BindingType

  2. 在sun-jaxws.xml中声明binding

下面,使用官方提供的例子,演示一遍开启soap1.2协议的webservice。

服务器端

SEI实现类

package?com.mycompany;

import?javax.jws.WebMethod;
import?javax.jws.WebService;

@WebService
public?class?AddNumbers?{
????
????@WebMethod(operationName="add")
????public?int?addNumbers(int?number1,?int?number2)?{
????????return?number1?+?number2;
????}
}

sun-jaxws.xml

<?xml?version="1.0"?encoding="UTF-8"?>
<endpoints?xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime'?version='2.0'>
????<endpoint
????????name='soap'
????????implementation='com.mycompany.AddNumbers'
????????port='{http://mycompany.com/}soap'
????????binding="http://www.w3.org/2003/05/soap/bindings/HTTP/"
????????url-pattern='/soap'/>
</endpoints>

不需要运行wsgen命令,直接打包成math.war,部署到tomcat。

客户端

首先运行wsimport,产生客户端。由于wsgen默认是产生soap1.1的service,忽略soap1.2,需要添加命令参数 -extension 才可以产生soap1.2的service。

然后使用App中的main函数调用生成的客户端。

public?class?App?{
????public?static?void?main(?String[]?args?)?throws?IOException??{
????????AddNumbers?math?=?new?AddNumbersService().getSoap();
????????math.add(1,?2);
????}
}

监听网络查看消息

发出请求

<S:Envelope?xmlns:S="http://www.w3.org/2003/05/soap-envelope">
??<S:Body>
????<ns2:add?xmlns:ns2="http://mycompany.com/">
??????<arg0>1</arg0>
??????<arg1>2</arg1>
????</ns2:add>
??</S:Body>
</S:Envelope>

返回应答

<S:Envelope?xmlns:S="http://www.w3.org/2003/05/soap-envelope">
??<S:Header/>
??<S:Body>
????<ns2:addResponse?xmlns:ns2="http://mycompany.com/">
??????<return>3</return>
????</ns2:addResponse>
??</S:Body>
</S:Envelope>

从上面可以看出,SOAP消息实体包在namespace?

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

之中,这表明使用的是soap1.2.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读