zoukankan      html  css  js  c++  java
  • JAX-WS(三)构建简单webservice部署到tomcat上

    前言:

    虽然构建本地的jax-ws的webservice很简单,但要部署到tomcat上要绕过点弯。

    tomcat本身和jdk都没有jaw-ws的API,所以部署的时候需要额外做点事情,有两种选择

    1、下载必要的jar库,JAX-WS RI,地址:https://jax-ws.java.net/

    2、使用其他服务器,比如TomEE(tomcat的加强版)等。(未测试),可以参考:

    Step by Step JAX-WS Web Services with Eclipse, TomEE, and Apache CXF

    因为平时用tomcat比较多,就用第一种方式。

     

    一、准备工作

    下载jax-ws RI。

    配置:根据文档,

    To install on Tomcat

    • Set CATALINA_HOME to your Tomcat installation.

    • Run

      ant install

      This essentially copies lib/*.jar from the root of JAX-WS RI extracted bundle to $CATALINA_HOME/shared/lib

    为了安全,还是把tomcat目录下的share/lib中的jar包复制到tomcat_home/lib下。

     

    二、创建一个动态web project

    2.1 创建工程

    如下:

    wsdl目录是自己建的。

    2.2 写一个Hello的web service

    package org.ccnt.jax.web.server;
    
    import javax.jws.WebMethod;
    import javax.jws.WebService;
    
    @WebService
    public class Hello {
    
        @WebMethod
        public String say(String name) {
            return "hello, " + name;
        }
    }

    注意:

    @WebService

    注释在了Class之上,这告诉了JAXWS,此类为Webservice。

    @WebMethod

    注释在了public方法上,这告诉了JAXWS,此方法为soap方法,该方法有两个参数,一个input的String,一个output的String。

    业务逻辑很简单,客户端调用传入一个Name,服务端返回给客户端一个”Hello: “+name的字串。

    现在我们通过Java文件来生成Webservice相关布署文件以及调用接口。

    2.3 用wsgen生成相应的类和wsdl文件

    命令:

    wsgen -cp ./build/classes -s ./src -r ./wsdl -d ./build/classes -wsdl org.ccnt.jax.web.server.Hello

    生成一下目录:

    JAX-WS 2.0 有两种开发过程:自顶向下和自底向上。自顶向下方式指通过一个 WSDL 文件来创建Web Service,自底向上是从 Java 类出发创建 Web Service。两种开发过程最终形成的文件包括:

    1.SEI。一个SEI对应WSDL中WebService的一个port,在Java中是一个Java接口。

    2.SEI实现类。

    3.WSDL和XSD文件。

    结合公司内项目的特点,我们更多的是碰到以下两种情况:

    1.  Onsite要我们做一个Webservice或者是客户要求我们提供Webservice接口;

    2.  Onsite已经有一个Webservice了,现在要我们做客户端集成。

     

    2.4 配置文件,编写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='Hello' implementation='org.ccnt.jax.web.server.Hello'
            url-pattern='/HelloService' />
    </endpoints>

    把Hello声明为webservice

    2.5 配置文件,修改web.xml文件

    添加上:

      <listener>
          <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
      </listener>
      
      <servlet>
          <servlet-name>Hello</servlet-name>
          <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
          <load-on-startup>2</load-on-startup>
      </servlet>
      <servlet-mapping>
          <servlet-name>Hello</servlet-name>
          <url-pattern>/HelloService</url-pattern>
      </servlet-mapping>

     

    三、部署

    在Eclipse里面直接运行tomcat服务器,就把Hello webservice部署上了。

    http://localhost:8080/JaxwsWebServer/HelloService

    表面已经部署上了

     

    四、客户端调用

    新建一个工程,到工程目录下,命令:

    wsimport -s ./src -d ./bin -p org.ccnt.jax.web.client http://localhost:8080/JaxwsWebServer/HelloService?wsdl

    在org.ccnt.jax.web.client目录下能看到几个生成的文件,创建ClientMain来调用服务

    package org.ccnt.jax.web.client;
    
    public class ClientMain {
    
        public static void main(String[] args) {
            HelloService service = new HelloService();
            String response = service.getHelloPort().say("loull");
            System.out.println(response);
        }
    }

     

    五、总结下过程

    1. Create a web service (of course).
    2. Create a sun-jaxws.xml, defines web service implementation class.
    3. Create a standard web.xml, defines WSServletContextListener, WSServlet and structure of a web project.
    4. Build tool to generate WAR file.
    5. Copy JAX-WS dependencies to “${Tomcat}/lib” folder.
    6. Copy WAR to “${Tomcat}/webapp” folder.
    7. Start It.

    我在开发web项目的webservice的时候,步骤是:

      1、create a web service

      2、用wsgen工具生成wsdl、java、class文件,class文件可以交给Eclipse自动生成

    wsgen -cp ./build/classes -r ./wsdl -s ./src -d ./build/classes -wsdl org.ccnt.jax.server.SampleService

      3、编写或修改sun-jaxws.xml文件,加上:

    <endpoint name='MTOMSimple' implementation='org.ccnt.jax.web.server.HelloSimple'
            url-pattern='/HelloSimpleService' />

      4、修改web.xml文件,加上:

      <servlet>
          <servlet-name>HelloSimple</servlet-name>
          <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>HelloSimple</servlet-name>
          <url-pattern>/HelloSimpleService</url-pattern>
      </servlet-mapping>

      5、部署,启动

  • 相关阅读:
    第二次冲刺每日站立会议10(完结)
    第二次冲刺每日站立会议09
    第二次冲刺每日站立会议08
    找bug
    测试计划
    博客园的意见与建议
    第二次每日站立会议07
    个人总结
    学习进度条(第十六周)
    梦断代码阅读笔记03
  • 原文地址:https://www.cnblogs.com/549294286/p/3477075.html
Copyright © 2011-2022 走看看