雖然構(gòu)建本地的jax-ws的webservice很簡單,但要部署到tomcat上要繞過點(diǎn)彎。
tomcat本身和jdk都沒有jaw-ws的API,所以部署的時(shí)候需要額外做點(diǎn)事情,有兩種選擇
1、下載必要的jar庫,JAX-WS RI,地址:https://jax-ws.java.net/
2、使用其他服務(wù)器,比如TomEE(tomcat的加強(qiáng)版)等。(未測試),可以參考:
Step by Step JAX-WS Web Services with Eclipse, TomEE, and Apache CXF
因?yàn)槠綍r(shí)用tomcat比較多,就用第一種方式。
下載jax-ws RI。
配置:根據(jù)文檔,
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包復(fù)制到tomcat_home/lib下。
如下:
wsdl目錄是自己建的。
package org.ccnt.jax.web.server;import javax.jws.WebMethod;import javax.jws.WebService;@WebServicepublic class Hello { @WebMethod public String say(String name) { return "hello, " + name; }}
注意:
@WebService
注釋在了Class之上,這告訴了JAXWS,此類為Webservice。
@WebMethod
注釋在了public方法上,這告訴了JAXWS,此方法為soap方法,該方法有兩個(gè)參數(shù),一個(gè)input的String,一個(gè)output的String。
業(yè)務(wù)邏輯很簡單,客戶端調(diào)用傳入一個(gè)Name,服務(wù)端返回給客戶端一個(gè)”Hello: “+name的字串。
現(xiàn)在我們通過Java文件來生成Webservice相關(guān)布署文件以及調(diào)用接口。
命令:
wsgen -cp ./build/classes -s ./src -r ./wsdl -d ./build/classes -wsdl org.ccnt.jax.web.server.Hello
生成一下目錄:
JAX-WS 2.0 有兩種開發(fā)過程:自頂向下和自底向上。自頂向下方式指通過一個(gè) WSDL 文件來創(chuàng)建Web Service,自底向上是從 Java 類出發(fā)創(chuàng)建 Web Service。兩種開發(fā)過程最終形成的文件包括:
1.SEI。一個(gè)SEI對(duì)應(yīng)WSDL中WebService的一個(gè)port,在Java中是一個(gè)Java接口。
2.SEI實(shí)現(xiàn)類。
3.WSDL和XSD文件。
結(jié)合公司內(nèi)項(xiàng)目的特點(diǎn),我們更多的是碰到以下兩種情況:
1. Onsite要我們做一個(gè)Webservice或者是客戶要求我們提供Webservice接口;
2. Onsite已經(jīng)有一個(gè)Webservice了,現(xiàn)在要我們做客戶端集成。
<?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
添加上:
<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里面直接運(yùn)行tomcat服務(wù)器,就把Hello webservice部署上了。
http://localhost:8080/JaxwsWebServer/HelloService
表面已經(jīng)部署上了
新建一個(gè)工程,到工程目錄下,命令:
wsimport -s ./src -d ./bin -p org.ccnt.jax.web.client http://localhost:8080/JaxwsWebServer/HelloService?wsdl
在org.ccnt.jax.web.client目錄下能看到幾個(gè)生成的文件,創(chuàng)建ClientMain來調(diào)用服務(wù)
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); }}
WSServletContextListener
, WSServlet
and structure of a web project.我在開發(fā)web項(xiàng)目的webservice的時(shí)候,步驟是:
1、create a web service
2、用wsgen工具生成wsdl、java、class文件,class文件可以交給Eclipse自動(dòng)生成
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、部署,啟動(dòng)
聯(lián)系客服