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种,且优先级由低到高为:
在SEI实现类上使用@BindingType
在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。
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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。