1、常用的封装样式
1.1、基于Wrapper和Document
1.2、基于Bare
1.3、基于RPC
2、JAX-ws常用操作
2.1、异常处理
创建异常处理类
异常对象最好是Exception的对象而不是RuntimeException
在wsdl中添加消息和element
为PortType和Binding设置异常
PortType中说明那些方法会抛出异常
Binding说明抛出异常的编码方式
2.2、简单权限控制
1、创建header元素
2、创建message并且绑定消息
3、处理消息头
有如下几种方式:
1、通过SAAJ(直接创建SOAPBody和SOAPHeader对象,通过Dispatcher传递消息):客户端:可以处理,服务器端目前还没有方法获取SOAPMessage
2、使用SOAPHandler处理(SOAPMessageContext)
3、基于JAXWS-RI的方法
Headers.create(element):可以把一个dom的element转换为Header元素
客户端
服务器端的编写
4、服务器端处理Header
服务器端的编写
3_1、解决包冲突问题
当时有JAX RI时会抛出
javax.xml.ws.soap.SOAPFaultException: javax.xml.ws.WebFault.messageName()Ljava/lang/String;
这是因为在JAXRi中使用了WebFault对象,但是JDK也提供这个方法,在调用时会去调用JDK的WebFault此时就找不到messageName方法
解决方案:将jax-ri.jar这个 包拷贝到jdk的jre中的lib中的endored文件夹中
3、在Tomcat中发布服务
3.1、将wsdl文件夹拷贝到WEB-INF中
3.1、导入Jax-RI包
JAXWs-RI reference Implements
3.2、在WEB-INF下创建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 ="MyService"
implementation= "org.konghao.service.MyServiceImpl" url-pattern= "/tc"/>
</endpo
ints>
3.3、配置web.xml
<listener >
< listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener </listener-class>
</ listener>
< servlet>
< servlet-name>MyService </servlet-name>
< servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet </servlet-class>
</ servlet>
< servlet-mapping>
< servlet-name>MyService </servlet-name>
< url-pattern>/tc</url-pattern>
</ servlet-mapping>
4、二进制的处理
4.1、基于MTOM的第一种处理方式
特别注意:只能在服务器中使用MTOM,在默认的Jetty服务器里面无法进行MTOM的传递