axis2建立web service(一)php
做者:張濤 java
axis2 是新一代的web service開發工具,它會讓你的web service開發變得輕鬆,快捷。下面讓咱們以一個實際的例子來體驗一下。web
首先,工欲善其事,必先利其器。就讓咱們先作好一些必備的準備工做吧。apache
1.下載axis2 的2進制的包和war,如今的最新版本是1.4.1 發佈時間是2008-8-25api
地址分別是:http://apache.mirror.phpchina.com/ws/axis2/1_4_1/axis2-1.4.1-bin.zip瀏覽器
http://apache.mirror.phpchina.com/ws/axis2/1_4_1/axis2-1.4.1-war.ziptomcat
2.把下載後的war放入tomcat的webapps目錄裏,而後啓動tomcat,這樣war包就會自動解壓爲目錄axis2app
在瀏覽器中輸入http://localhost:8080/axis2/ ,若是一切正常你會看到下面的畫面eclipse
3,就開始準備一下axis2的eclispe的插件了。axis2的eclispe插件分爲2個,一個是幫助咱們生成aar文件的,另外一個是幫咱們用wsdl文件生成stub代碼的。webapp
下載地址是
http://www.apache.org/dyn/mirrors/mirrors.cgi/ws/axis2/tools/1_4_1/axis2-eclipse-codegen-wizard.zip
下載完2個壓縮文件後,能夠直接把解壓後的文件拷貝到plugins目錄中,也能夠在links目錄中寫文件路徑的方式來安裝插件,安裝完插件後,打開eclipse,在package explorer 中點擊右鍵--->選擇new---->other
若是安裝正確你會看到(下面的紅色圈圈裏未必就必定能看到這兩項,我用eclipse,有時顯示的是1個,有時顯示3個,總之讓人很鬱悶,後來我用了MyEclipse6.5來完成這個Demo的。)
這樣準備工做就都作好了。接下來就是正式開發了。
工具都已經準備齊全了。咱們來動手作一個小例子來小試牛刀!
這一節咱們先利用axis2來發佈一個web service 的服務,而後在下一節咱們作一客戶端來調用這個服務。
咱們的服務很簡單的,就是輸入一個字符串,而後打印出一段字符串。
代碼很簡單,主要是測試用。
package com.deltaj.server;
public class SimpleServer {
/**
* 簡單的測試方法
*
*/
public String simpleMethod(String name) {
return name + "Say this is a Simple method ^-^";
}
}
主要的過程就是如何利用axis2的eclispe插件來發布這個服務啦。
1。在eclispe 的package Explorer 中點擊右鍵,在菜單中選擇新建--->other...----->Axis2 Service Archiver
2.而後點擊next進入了類選擇頁面,在這個頁面中的Class File Location選擇框中選擇類所在的文件夾。 (這裏填寫的主要是通過編譯後的java類,即java.class文件所存放位置的根目錄,好比myEclipse的目錄則是E:\YANGS\workspace\myservice\WebRoot\WEB-INF\classes,myservice是個人項目名,固然,我建立的是web project,若是是java project,請根據實際狀況填寫。寫這個路徑是爲了下面操做,來尋找java類)
3.點擊next以後進入了選擇 wsdl文件,這裏咱們選擇skip wsdl。
4. 點擊next以後,進入的是選擇jar文件的頁面,這裏咱們沒有外部的jar,因此點擊next直接跳過這個頁面。
4.點擊next以後,進入的是選擇xml頁面,這裏咱們選擇的是自動生成xml,也就是勾選
Generate the service xml automatically這一項
5.點擊next以後,進入的是生成xml文件的頁面,在service name 裏填寫這個服務所起的名字,這裏我起名爲simpleServer,而後在class name 中填寫要發佈的類,這裏必定要寫全路徑,寫好後就能夠點擊load 按鈕,
若是一切ok的話,你會看到以下畫面(這裏最多見的問題就是Class not found,通過測試,發現直接在src目錄下建立java類,是能夠Load到類方法的,可是隻要放在本身建立的包名下,就load不到,好比放在com.test包下面的類就load不到。)
6 點擊next 後,進入的是輸出artiver文件的頁面,先要在output File location 中選擇要輸出的路徑,
在output File Name中輸入artiver文件的名稱。我起的名字是simpleServer
7.點擊finish ,若是看到以下的畫面,恭喜你,服務發佈成功啦。
8.接下來,咱們就能夠把這個aar文件放入tomcat中發佈,首先把生成的aar文件拷貝到tomcat目錄中的axis2項目的service目錄中位置如圖。
9.接下來啓動tomcat,在地址欄中輸入http://localhost:8080/axis2 ,你會看到axis2的歡迎畫面
10.點擊Service鏈接,你會看到發佈的服務列表。這裏面就能看到咱們發佈的simpleService
11.點擊咱們的服務simpleServer的鏈接,咱們會看到。至此,服務發佈成功。
這節咱們就來寫一個客戶端來調用一下這個服務。主要關注一下如何用elispe的axis2的插件來生成stub代碼。
1.在eclispe 的package Explorer 中點擊右鍵,在菜單中選擇新建--->other...----->Axis2 Code Generator
2.點擊next,進入下一個頁面,選擇從wsdl文件來產生java文件。
3. 點擊next,而後選擇wsdl文件,注意此處要填寫上一節咱們
4.點擊next,進入設置頁面,這裏咱們就用默認的設置。
5. 點擊next,選擇輸出文件的路徑。(這裏點擊finish,MyEclipse6.5會報錯,An error ocurred while completing process
-java.lang.reflect.InvocationTargetException,解決辦法是:
1.關閉 Eclipse
2.copy %AXIS2_HOME%\lib\ 下的
backport-util-concurrent-3.1.jar 和 geronimo-stax-api_1.0_spec-1.0.1.jar
複製到 MyEclipse 6.5\eclipse\plugins\Axis2_Codegen_Wizard_1.3.0\lib 文件夾下。
3.註冊此 jar 包:
修改MyEclipse 6.5\eclipse\plugins\Axis2_Codegen_Wizard_1.3.0\plugin.xml 文件
在 <runtime> 內加入下面的字串
<library name="lib/geronimo-stax-api_1.0_spec-1.0.1.jar">
<export name="*"/>
</library>
<library name="lib/backport-util-concurrent-3.1.jar">
<export name="*"/>
</library>
到plugin.xml文件中,保存後從新啓動Eclipse便可。)
- 若問題仍存在, 嘗試改變Eclipse 使用的 JRE, 換成 JAVA 6
- 使用 JRE 1.6 啓動 Eclipse 後, 若仍有問題, 試着加入 -clean 參數啓動 Eclipse, 清除 osig cache:
eclipse.exe -vm "c:\java\jre1.6.0_05\bin\java.exe" -clean -console -consoleLog -debug -vmargs -Xmx384M
- 關閉 Eclipse 後, 再以通常方式啓動 Eclipse, 應可解決問題
6.點擊next,若是看到這個頁面,恭喜你已經生成代碼成功。
7.在package Explorer中刷新一下項目,而後你發現出現2個新的文件SimpleServerStub和SimpleServerCallbackHandler 。打開SimpleServerStub你會驚喜的發現。著名的小紅叉一個接一個的(報錯,是由於沒有引用jar包,最直接的方法是把axis2-1.4.1\lib目錄下全部的jar包都引用到項目中)
這是由於沒有axis2的類包。咱們能夠在下載的axis2-1.4.1-bin中找到lib包,把其中的jar都加入咱們的工程中。
而後從新編譯一下工程,這時咱們發現SimpleServerStub仍是有幾個小紅叉。這個是由於這個插件有個小bug。
生成的代碼沒有實現序列化方法。咱們能夠本身來加上,在小紅叉上點一下,彈出一個小菜單,選擇
Add unimplemented methods .
8.
/**
* 調用發佈的服務。
*
*/
public class SimpleClient {
public static void main(String[] args) throws Exception{
//初始化樁文件
SimpleServerStub stub = new SimpleServerStub();
//初始化SimpleMethod方法。
SimpleServerStub.SimpleMethod request = new SimpleServerStub.SimpleMethod();
//調用simpleMethod的setName方法。
request.setName("zt");
//
System.out.println(stub.simpleMethod(request).get_return());
}
}
若是一切正常,你就會看到結果
log4j:WARN No appenders could be found for logger (org.apache.axis2.description.AxisService).
log4j:WARN Please initialize the log4j system properly.
ztSay this is a Simple method ^-^。
調用服務成功。這是個簡單的例子,下節咱們再作一個複雜一點的例子,來更好的學習axis2
上節咱們作了一個簡單的例子,調用的服務裏的方法只是簡單返回一個字符串,此次咱們要作一個複雜點的例子,調用服務裏的方法返回一個java Bean對象。
1. 首先作一個簡單的java bean ,代碼以下
package com.deltaj.server;
public class Persion {
// 姓名
private String name;
// 年齡
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2.作一個服務,裏面只發佈一個方面,這個方法返回這個bean。
package com.deltaj.server;
public class BeanServer {
/**
* 簡單的測試方法
*
*/
public Persion testMethod(String name, int age) {
Persion persion = new Persion();
persion.setName(name);
persion.setAge(age);
return persion;
}
}
3.按照第二節的作法,把這個服務發佈出來。
4.一樣按照第三節的方法,用這個wsdl來生成stub代碼。
5.而後咱們開始作一個方法來調用一下這個服務。
package com.deltaj.client;
import com.deltaj.server.TestServerStub;
public class BeanClient {
public static void main(String[] args) throws Exception{
// 初始化樁文件
TestServerStub stub = new TestServerStub();
// 初始化TestMethod方法。
TestServerStub.TestMethod request = new TestServerStub.TestMethod();
// 設置bean的屬性值。
request.setName("delta ");
request.setAge(20);
//
System.out.println("The name is:"+stub.testMethod(request).get_return().getName());
System.out.println("The age is:"+stub.testMethod(request).get_return().getAge());
}
}
6.若是按照這裏說的作的話,你會看到
log4j:WARN No appenders could be found for logger (org.apache.axis2.description.AxisService).
log4j:WARN Please initialize the log4j system properly.
The name is:delta
The age is:20
祝你好運。:)