JAX-WS 内容协议的选择
JAX-WS支持SOAP1.1,SOAP1.2和HTTP。在之前所写的所有文章中,从没有涉及到跟协议相关的内容。但是JAX-WS默认使用的是SOAP1.1协议。所以之前的所有例子,均是在使用SOAP1.1. 我们也可以使用SOAP1.2,SOAP1.2跟SOAP1.1相比
如果使用HTTP内容协议,JAXWS就变成了restful service。 声明内容协议绑定的方式有2种,且优先级由低到高为:
下面,使用官方提供的例子,演示一遍开启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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |