五、JAX-WS的详细介绍

1、常用的封装样式
      1.1、基于Wrapper和Document

Image(47)

      1.2、基于Bare

Image(48)

      1.3、基于RPC

Image(49)

Image(50)

    2、JAX-ws常用操作
      2.1、异常处理

创建异常处理类

异常对象最好是Exception的对象而不是RuntimeException

Image(51)

  在wsdl中添加消息和element

Image(52)

  为PortType和Binding设置异常

PortType中说明那些方法会抛出异常

Image(53)

Binding说明抛出异常的编码方式

Image(54)

Image(55)

      2.2、简单权限控制

1、创建header元素

Image(56)

  2、创建message并且绑定消息

Image(57)

Image(58)

  3、处理消息头

有如下几种方式:

1、通过SAAJ(直接创建SOAPBody和SOAPHeader对象,通过Dispatcher传递消息):客户端:可以处理,服务器端目前还没有方法获取SOAPMessage

2、使用SOAPHandler处理(SOAPMessageContext)

3、基于JAXWS-RI的方法

   Headers.create(element):可以把一个dom的element转换为Header元素

客户端

Image(59)

服务器端的编写

Image(60)

Image(61)

  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文件夹中

Image(62)

    3、在Tomcat中发布服务
      3.1、将wsdl文件夹拷贝到WEB-INF中

Image(63)

      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>

Image(64)

      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>

Image(65)

    4、二进制的处理
      4.1、基于MTOM的第一种处理方式

Image(66)

Image(67)

Image(68)

Image(69)

特别注意:只能在服务器中使用MTOM,在默认的Jetty服务器里面无法进行MTOM的传递

posted @ 2015-12-07 21:53  拉风的风吹哥  阅读(993)  评论(0编辑  收藏  举报