`
zzc1684
  • 浏览: 1199360 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

JAX-WS 学习四:部署到Web容器里

阅读更多

在之前的介绍里,web service的发布都是通过调用:

Java代码 复制代码 收藏代码
  1. Endpoint.publish()  

方法来启动一个java内嵌的web容器来实现的。

 

这里要介绍一下怎么把生成的web service部署到一个web容器中去。

 

还是以之前的计算器的例子为例。首先我们用wsgen工具去生成部署所需要的所有部件:

 

Java代码 复制代码 收藏代码
  1. wsgen -wsdl -keep -d ../output -cp . test.CalculatorImpl   

运行此命令时,我得到了一个错误信息:

Java代码 复制代码 收藏代码
  1. The @javax.jws.WebService.name element cannot be used in with @javax.jws.WebService.endpointInterface element  

意思是 name 属性和 endpointInterface 属性不能同时出现,只好把CalculatorImpl里的name属性先删除,回头查一下为什么会有这个错误。

 

运行完上面命令行后,我们就得到一些新文件:

  • CalculatorImplService.wsdl
  • CalculatorImplService_schema1.xsd
  • Add.java
  • AddResponse.java
  • Multi.java
  • MultiResponse.java

把他们拷到工程里去先,其中:

  1. 所有的java文件和到源码里去
  2. 新建一个wsdl目录,把wsdl文件和xsd文件放到此目录中去。

剩下的就是怎么提供一个web.xml了,使得对url的访问能被我们的web service实现类处理请求了。

 

下载:

 以前一直都是基于JDK自带的api来实现的,下面就需要用到一些jax-ws提供的lib包了。所以需要先去下一份jax-ws的实现,例如我当前使用的2.2.5的下载地址是:

http://jax-ws.java.net/2.2.5/

 

实现方式:

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,整个过程的流程图大约为:

 

sun-jaxws.xml文件的schema可以在下载的jax-ws RI的docs目录下找着(sun-jaxws.xsd)。

 

这里直接给出calculator的web.xml和sun-jaxws.xml的一个实现:

 

Sun-jaxws.xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"  
  3.     version="2.0">   
  4.     <endpoint name="calculator" implementation="test.CalculatorImpl"  
  5.         url-pattern="/calculator" />   
  6. </endpoints>   

 

Web.xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems,    
  3. Inc.//DTD Web Application 2.3//EN"   
  4. "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">   
  5.     
  6. <web-app>   
  7.     <listener>   
  8.         <listener-class>   
  9.                 com.sun.xml.ws.transport.http.servlet.WSServletContextListener   
  10.         </listener-class>   
  11.     </listener>   
  12.     <servlet>   
  13.         <servlet-name>calculator</servlet-name>   
  14.         <servlet-class>   
  15.             com.sun.xml.ws.transport.http.servlet.WSServlet   
  16.         </servlet-class>   
  17.         <load-on-startup>1</load-on-startup>   
  18.     </servlet>   
  19.     <servlet-mapping>   
  20.         <servlet-name>calculator</servlet-name>   
  21.         <url-pattern>/calculator</url-pattern>   
  22.     </servlet-mapping>   
  23.     <session-config>   
  24.         <session-timeout>120</session-timeout>   
  25.     </session-config>   
  26. </web-app>   

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

 

在初始化期间,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

打包

打包就不具体介绍了,总之包的结构如下:

 

 

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

分享到:
评论

相关推荐

    ws-jax-rs-rest:带有 JAX-RS 的基本 RESTful Web 服务

    带有 JAX-RS 的 RESTful Web 服务 带有 JAX-RS 的基本 RESTful Web 服务 如何运行应用程序 传统上(需要 maven 和 wildfly) 下载野蝇 开始野蝇 $ WILDFLY_HOME/bin/standalone.sh & 使用 maven 部署 $ mvn ...

    JAVA.WEB服务.构建与运行

     · 学习如何在各种环境下部署JAX-WS服务  不管是学生还是有经验的程序员,当你需要立即运用这些技术展开工作时,《Java Web服务:构建与运行》都是你需要的一本理想的简明指南。 内容截图 目录: 前言. ...

    jaxrs-rest-example-server:使用Java的一个相当愚蠢的REST WS示例

    您也可以将Java Web容器嵌入到您的项目中,例如 ,并完成此操作。 不过,对于初学者来说,使用应用程序服务器可能更容易。 如何建立这个专案? 您可以使用其构建功能(在Eclipse中,右键单击该项目并选择Run As- &gt;...

    用cxf开发webservice

    Apache CXF是一个开源的Service框架,它实现了JCP与Web Service中一些重要标准。CXF简化了构造,集成,面向服务架构(SOA)业务组件...CXF设计成可灵活部署到各种容器中包括Spring-based,JBI,SCA, Servlet和J2EE容器。

    Jetty中文手册

    如何部署web应用 webApp提供者 如何部署第三方产品 部署展开形式的web应用 使用Jetty进行开发 如何使用Jetty进行开发 如何编写Jetty中的Handlers 使用构建工具 如何在Maven中使用Jetty 如何在Ant中使用Jetty Maven和...

    Java_EE_6规范中文版

    6.13 JAX-WS 2.2 标准 6.14 JAX-RS 1.1标准 6.15 JAXB 2.2 标准 6.16 JAXR 1.0 标准 6.17 API 1.1标准 6.18 API 1.2 标准 6.19 JACC 1.4 标准 6.20 JASPIC 1.0 标准 6.21 JSR-45 标准 6.22 SJSTL 1.2 标准 6.23 ...

    Spring中文帮助文档

    2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到...

    Spring API

    2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    第二部分详细讲解了jsf ri、jta、jndi、rmi、jms、javamail、ejb 3的session bean、message driven bean、jpa、jax-ws 2、jaas等java ee知识,这部分知识以jsf+ejb 3+jpa整合开发为重点,通过使用netbeans ide工具...

    Spring攻略(第二版 中文高清版).part2

    5.2 登录到Web应用 175 5.2.1 问题 175 5.2.2 解决方案 175 5.2.3 工作原理 175 5.3 验证用户 179 5.3.1 问题 179 5.3.2 解决方案 180 5.3.3 工作原理 180 5.4 做出访问控制决策 190 5.4.1 问题...

    Spring攻略(第二版 中文高清版).part1

    5.2 登录到Web应用 175 5.2.1 问题 175 5.2.2 解决方案 175 5.2.3 工作原理 175 5.3 验证用户 179 5.3.1 问题 179 5.3.2 解决方案 180 5.3.3 工作原理 180 5.4 做出访问控制决策 190 5.4.1 问题...

    Java™ Servlet 规范.

    1.2 什么是 Servlet 容器?...............................................................................................................................13 1.3 例子 .......................................

    Servlet3.1规范(最终版) PDF

    13 什么是Servlet容器?...............................................................................................................................13 例子...............................................

Global site tag (gtag.js) - Google Analytics