JAX-WS 学习二:基于WEB容器,发布WebService

WebService 的发布通过调用

Endpoint.publish()  

  方法来启动一个java内嵌的WEB容器来实现的,如果要将WebService部署到一个WEB容器中去,需要使用jax-ws提供的jar包,演示项目中使用的是最新的jax-ws的jar

      https://jax-ws.java.net/2.2.10/   可以在此进行下载。

实现方式:

sun的jax-ws实现提供了两个类用来配置web容器的web.xml,实现从url到web service实现类的映射:

  • 监听类:com.sun.xml.ws.transport.http.servlet.WSServletContextListener
  • Servlet: com.sun.xml.ws.transport.http.servlet.WSServlet

其中WSServletContextListener又会去查找和web.xml在同一级目录下的另一个文件sun-jaxws.xml

过程流程图为:

JAX-WS 学习二:基于WEB容器,发布WebService_第1张图片

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">
     <!--name:service 名称   implementation:服务的实现类-->
<endpoint name="calculator" implementation="com.st.services.CalculatorService" url-pattern="/service/calculator" /> <endpoint name="fileService" implementation="com.st.services.FileService" url-pattern="/service/fileService" /> </endpoints>

web.xml 文件

    <listener>
        <listener-class>
                com.sun.xml.ws.transport.http.servlet.WSServletContextListener
        </listener-class>    
    </listener>
    <servlet>
        <servlet-name>webService</servlet-name>
        <servlet-class>
            com.sun.xml.ws.transport.http.servlet.WSServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>webService</servlet-name>
        <url-pattern>/service/*</url-pattern>
    </servlet-mapping>
 

按照上面的流程图就可以很清楚的理解了:

 在初始化期间,WSServletContextListener会读取WEB-INF目录下的 sun-jaxws.xml和web.xml,将web service的实现类与某个url进行绑定,这个绑定是通过一个WSServlet类间接进行的。每次来一个请求后,WSServletContextListener就会进行拦截,根据请求的url,找到对应的web service的实现,调用其他方法。

依赖包

很显然,诸如 WSServletContextListener 和 WSServlet 类并不是java缺省自带的。这些类在下载的jax-ws RI的lib目录下的jar里,所以要想真正成功的运行这些web service,我们也需要把必需的依赖包加上,它们包括:

  • gmbal-api-only.jar
  • ha-api.jar
  • jaxb-impl.jar
  • jaxws-api.jar
  • jaxws-rt.jar
  • management-api.jar
  • policy.jar
  • stax-ex.jar
  • streambuffer.jar
  • mimepull.jar  (处理文件的时候需要使用到)

启动服务器,便可通过浏览器去访问  http://localhost:8080/jaxws/service/calculator   (我使用的是Tomcat服务器,端口8080,系统名称为jaxws)

 

参考http://www.mkyong.com/webservices/jax-ws/deploy-jax-ws-web-services-on-tomcat/

你可能感兴趣的:(webservice)