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、部署,啟動

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM