JAX-WS 構建簡單webservice部署到tomcat上

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);
    }
}

五、總結下過程
Create a web service (of course).
Create a sun-jaxws.xml, defines web service implementation class.
Create a standard web.xml, defines WSServletContextListener, WSServlet and structure of a web project.
Build tool to generate WAR file.
Copy JAX-WS dependencies to “Tomcat/libfolder.CopyWARto{Tomcat}/lib” folder. Copy WAR to “{Tomcat}/webapp” folder.
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、部署,啓動

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章