webservice的技術有很多,現在流行的有JAX-WS、XFile、CXF、Axis1、Axis2等。不過JAX-WS是webservice技術最輕量級的,不需要引入額外jar包。
在伺服器端,使用者隻需要通過Java語言定義遠端調用所需要實作的接口SEI(service endpoint interface),并提供相關的實作,通過調用JAX-WS的服務釋出接口就可以将其釋出為WebService接口。
在用戶端,使用者可以通過JAX-WS的API建立一個代理(用本地對象來替代遠端的服務)來實作對于遠端伺服器端的調用。當然 JAX-WS 也提供了一組針對底層消息進行操作的API調用,你可以通過Dispatch 直接使用SOAP消息或XML消息發送請求或者使用Provider處理SOAP或XML消息。
我們使用JAX-WS開發WebService隻需要很簡單的幾個步驟:寫接口和實作=>釋出=>生成用戶端。
開發webservice服務端我們可以先編寫接口,接口中隻需要把類注明為@WebService,把要暴露給用戶端的方法注明為@WebMethod即可。
1:編寫webservice服務端接口
package service;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
/**
* 測試webservice接口
* @author
*
*/
@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface TestService {
/**
* 測試接口
*/
@WebMethod
void SayHiDefault();
@WebMethod
void SayHi(@WebParam(name = "name") String name);
@WebMethod
String sayHello(String userName);
}
2:編寫接口的實作類
package service.imp;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import service.TestService;
@WebService(endpointInterface = "service.TestService")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class TestServiceImp implements TestService {
@Override
public void SayHiDefault() {
System.out.println("Hi,wangql!");
}
@Override
public void SayHi(String name) {
System.out.println("Hi,"+name+"!");
}
@WebMethod
public String sayHello(@WebParam(name = "userName") String userName) {
return "hi," + userName + " welcome to wangql";
}
}
3:釋出
方法一:(此方式隻能作為調試,有以下BUG:jdk1.6u17?以下編譯器不支援以Endpoint.publish方式釋出document方式的soap,必須在service接口和實作類添加“@SOAPBinding(style = SOAPBinding.Style.RPC)”注解)
package main;
import javax.xml.ws.Endpoint;
import service.TestService;
import service.imp.TestServiceImp;
public class ServerStart {
public static void main(String[] args) {
System.out.println("start publish jax-ws ...");
TestService service = new TestServiceImp();
Endpoint.publish("http://localhost:8080/jaxwsTest/TestService", service);
System.out.println("publish webservice successful");
}
}
方法二:(基于web伺服器Servlet方式,使用tomcat釋出)
以Tomcat為例,首先編寫sun-jaxws.xml檔案并放到WEB-INF下:
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
<endpoint name="TestService"
implementation="service.imp.TestServiceImp"
url-pattern="/service/test" />
</endpoints>
然後編輯web.xml,添加listener和servlet(url-pattern要保持一緻):
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>TestService</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestService</servlet-name>
<url-pattern>/service/test</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
完成之後啟動tomcat,通路http://localhost:8080/jaxwsTest/service/test?wsdl
成功通路wsdl檔案,服務端可以正常運作。
注:@SOAPBinding(style = SOAPBinding.Style.RPC)一定要加上
http://www.micmiu.com/soa/webservice/jdk6-webservice-doc-rpc/ 可以看一下這篇文章,我再研究一下這個東西。
3:生成webservice用戶端
方法一:使用jdk自帶工具wsimport生成用戶端
一般情況下直接輸入wsimport指令行直接生成用戶端,因為我是用java開發的,是以我是先在MyEclipse上建立一個webservice項目,然後在通過wsimport指令生成用戶端,這樣可以盡量避免因為編寫造成的不必要麻煩。
(1)在Eclipse或者MyEclipse上建立一個webservice項目
(2)我們先通路到項目的src目錄下,然後執行"wsimport -keep http://localhost:8080/jaxwsTest/TestService?wsdl"生成用戶端代碼。
注:我們通路的http://localhost:8080/jaxwsTest/TestService?wsdl是wsdl檔案的路徑
我們檢視我們的項目,如圖
這樣就自動生成webservice用戶端了。
我們在用戶端編寫測試代碼
package main;
import service.imp.TestServiceImpService;
public class WSClient {
public static void main(String[] args) {
TestServiceImpService test = new TestServiceImpService();
String name = test.getTestServiceImpPort().sayHello("123213");
System.out.println(name);
}
}
如圖調用成功
方法二:使用MyEclipse建立webservice Client
在webservice服務端工程中 右擊 new----> other ---->web service client建立用戶端
在WSDL URL添加位址就可以了
如果出錯檢查自己的位址和tomcat服務是否已開啟
方法三:自己建立webservice用戶端,因為webservice可以跨平台,我們可以用任何語言編寫用戶端,是以自己編寫用戶端是最好的選擇。