本文介紹瞭如何使用tomcat和Axis2開發、部署和使用Web Service,而且開發了一個簡單的例子,經過例子開發流程來向你們展現如何建立Axis2的服務端和客戶端。該例子與其餘例子最大的不一樣是否是用客戶端stub存根方式調用web服務,提供了一種統一的客戶端調用方式。但願讀者讀完本文後可以快速上手Axis2的應用開發。
1、開發環境和軟件下載
開發環境是: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客戶端的功能了。
2、構建服務
在開發環境及
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],代表服務部署正確。
3、編寫客戶端代碼調用服務
個人這個例子與其餘例子最大的不一樣就在這裏,其餘例子通常須要根據剛纔的服務wsdl生成客戶端stub,而後經過stub來調用服務,這種方式顯得比較單一,客戶端必須須要stub存根纔可以訪問服務,很不方面。
本例子的客戶端不採用stub方式,而是一種實現通用的調用方式,不須要任何客戶端存根便可訪問服務。只須要指定對於的web servce地址、操做名、參數和函數返回類型便可。代碼以下:
package briup;
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類的一些機制。