本文介紹了如何使用tomcat和Axis2開發、部署和使用Web Service,并且開發了一個簡單的例子,通過例子開發流程來向大家展示如何建立Axis2的服務端和用戶端。該例子與其他例子最大的不同是不是用用戶端stub存根方式調用web服務,提供了一種統一的用戶端調用方式。希望讀者讀完本文後能夠快速上手Axis2的應用開發。
一、開發環境和軟體下載下傳
開發環境是:Eclipse3.4 + JDK1.6 + Tomcat6.0 + Axis2 1.3。這些軟體都是各個軟體最新版本,下載下傳方式由于軟體網站的更新,位址也會更新,這裡就不再貼出來了,就請讀者到相應網站下載下傳。
軟體下載下傳和安裝:
(1) JDK1.6環境變量配置:
JAVA_HOME: C:\Program Files\Java\jdk1.6.0_07,其中C:\Program Files\Java是我的JDK安裝目錄。
Path: %JAVA_HOME%\bin
Classpath: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
(2) tomcat6.0環境變量配置:
CATALINA_HOME:C:\Program Files\Apache Software Foundation\Tomcat 6.0, 其中C:\Program Files\Apache Software Foundation是我的Tomcat 6.0安裝目錄。
其實這裡tomcat6.0不需要配置環境變量,因為最新版本不需要配置。
(3) Axis2 1.3下載下傳:從[url]http://apache.justdn.org/ws/axis2/1_4_1/[/url]網站上下載下傳axis2-1.3-war.zip 。将其解壓,把其中的axis2.war檔案複制到tomcat的webapps目錄下即可完成Axis2的安裝。
安裝完成後,啟動tomcate,在位址欄内輸入[url]http://localhost:8080/axis2/[/url],打開如下圖界面,表明安裝正确:
(4) Eclipse3.4下載下傳:到[url]www.eclipse.org[/url]官方網站下載下傳,直接解壓後配置Windows/Preference中的JDK即可。
(5) 下載下傳Eclipse Axis2插件:axis2-eclipse-codegen-wizard-1.4.zip和axis2-eclipse-codegen-wizard-1.4.zip。下載下傳位址是:[url]http://apache.justdn.org/ws/axis2/tools/1_4_1/ [/url] 這兩個插件解壓到Eclipse安裝目錄下plugins中即可。打開Eclipse,選擇File/New/Other菜單項,看到如下界面表明安裝成功:
安裝這兩個插件的目的是:友善生成Axis2服務和生成Axis2用戶端,這裡我使用了無Stub方式的用戶端調用服務,是以就不示範生成Axis2用戶端的功能了。
二、建構服務
在開發環境及 Axis2 環境搭建好後,我們便可着手 Web Services 服務的開發:
1.建立要釋出的Web Service
(1)在 Eclispse 中添加一個使用者庫命名為 axis2 ,将 axis2\lib 下的包均添加進來。這一步操作的目的是為了以後工程添加 axis2 所需的 jar 檔案友善。
(2) 建立一個 JavaProject 命名為 ws ,将 axis2 使用者庫加入到 build path 中。
(3) 現在開始編寫要釋出的 WebSevice ,在 src 中建包 briup ,建立 Hello 類如下:
package briup;
public class Hello {
public String sayHello(String user) {
return "Hello, " + user;
}
}
2.釋出Web Service
打包要釋出的 Service , Eclipse 中 New --> File --> Other --> Axis2 wizards --> Axis2 Services Archiver ,按照向導選擇剛建立的類編譯後的 class 檔案。
(1)選擇 class 檔案目錄,注意,不是 java 源檔案,而是 classes 目錄,這裡需要注意由于你的類是帶包briup的,是以不要選到包這個目錄。
(2)連按兩次 “Next>” ,選中 “Generate the service xml automatically”
(3)按下一步,輸入 service 名稱和類名,我這裡輸入的服務名是:ws;類名是我們剛剛寫的類名:briup.Hello,這裡需要注意加入完整的包名。
(4) 按下一步,輸入 service 檔案的儲存路徑和檔案名,完成。
選擇生成目錄為:C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\axis2\WEB-INF\services,也可以選擇其他目錄,然後copy到這一目錄下。
3.測試Web Service
打開[url]http://localhost:8080/axis2/services/listServices[/url]頁面,可以看到ws服務,點選進到ws的wsdl頁面:[url]http://localhost:8080/axis2/services/ws?wsdl[/url],表明服務部署正确。
三、編寫用戶端代碼調用服務
我的這個例子與其他例子最大的不同就在這裡,其他例子一般需要根據剛才的服務wsdl生成用戶端stub,然後通過stub來調用服務,這種方式顯得比較單一,用戶端必須需要stub存根才能夠通路服務,很不方面。
本例子的用戶端不采用stub方式,而是一種實作通用的調用方式,不需要任何用戶端存根即可通路服務。隻需要指定對于的web servce位址、操作名、參數和函數傳回類型即可。代碼如下:
import javax.xml.namespace.QName;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
public class WsClient {
private RPCServiceClient serviceClient;
private Options options;
private EndpointReference targetEPR;
public WsClient(String endpoint) throws AxisFault {
serviceClient = new RPCServiceClient();
options = serviceClient.getOptions();
targetEPR = new EndpointReference(endpoint);
options.setTo(targetEPR);
public Object[] invokeOp(String targetNamespace, String opName,
Object[] opArgs, Class<?>[] opReturnType) throws AxisFault,
ClassNotFoundException {
// 設定操作的名稱
QName opQName = new QName(targetNamespace, opName);
// 設定傳回值
//Class<?>[] opReturn = new Class[] { opReturnType };
// 操作需要傳入的參數已經在參數中給定,這裡直接傳入方法中調用
return serviceClient.invokeBlocking(opQName, opArgs, opReturnType);
/**
* @param args
* @throws AxisFault
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws AxisFault, ClassNotFoundException {
// TODO Auto-generated method stub
final String endPointReference = "http://localhost:8080/axis2/services/ws";
final String targetNamespace = "http://briup";
WsClient client = new WsClient(endPointReference);
String opName = "sayHello";
Object[] opArgs = new Object[]{"Repace中心"};
Class<?>[] opReturnType = new Class[]{String[].class};
Object[] response = client.invokeOp(targetNamespace, opName, opArgs, opReturnType);
System.out.println(((String[])response[0])[0]);
運作該程式,點選Run As->Java application,可以看到控制台端口的輸出是:Hello, Repace中心 表明用戶端調用成功。
該例子最大的不同和優勢表現在用戶端的調用方式,或者說是發起服務調用的方式,雖然比起用戶端stub存根的方式,代碼稍多,但是這種方式統一,不需要生産stub存根代碼,解決了用戶端有很多類的問題。如果讀者對這些代碼進一步封裝,我想調用方式很簡單,隻需要傳遞相關參數,這更好地說明了服務調用的優勢。而且這種方式更加簡單明了,一看便知具體含義。而不需要弄得stub類的一些機制。
<a href="http://down.51cto.com/data/2351397" target="_blank">附件:http://down.51cto.com/data/2351397</a>
本文轉自panpan3210 51CTO部落格,原文連結:http://blog.51cto.com/panpan/119204,如需轉載請自行聯系原作者