axis2 是新一代的web service開發工具,它會讓你的web service開發變得輕鬆,快捷。下面讓我們以一個實際的例子來體驗一下。
首先,工欲善其事,必先利其器。就讓我們先做好一些必備的準備工作吧。
1.下載axis2 的2進制的包和war,現在的最新版本是1.4.1 發佈時間是2008-8-25
地址分別是: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.zip
2.把下載後的war放入tomcat的webapps目錄裏,然後啓動tomcat,這樣war包就會自動解壓爲目錄axis2
在瀏覽器中輸入http://localhost:8080/axis2/ ,如果一切正常你會看到下面的畫面
3,就開始準備一下axis2的eclispe的插件了。axis2的eclispe插件分爲2個,一個是幫助我們生成aar文件的,另一個是幫我們用wsdl文件生成stub代碼的。
下載地址是
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
如果安裝正確你會看到
這樣準備工作就都做好了。接下來就是正式開發了。
工具都已經準備齊全了。我們來動手做一個小例子來小試牛刀!
這一節我們先利用axis2來發佈一個web service 的服務,然後在下一節我們做一客戶端來調用這個服務。
我們的服務很簡單的,就是輸入一個字符串,然後打印出一段字符串。
代碼很簡單,主要是測試用。
- package com.deltaj.server;
- public class SimpleServer {
- /**
- * 簡單的測試方法
- *
- */
- public String simpleMethod(String name) {
- return name + "Say this is a Simple method ^-^";
- }
- }
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選擇框中選擇類所在的文件夾。
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的話,你會看到如下畫面
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,選擇輸出文件的路徑。
6.點擊next,如果看到這個頁面,恭喜你已經生成代碼成功。
7.在package Explorer中刷新一下項目,然後你發現出現2個新的文件SimpleServerStub和SimpleServerCallbackHandler 。打開SimpleServerStub你會驚喜的發現。著名的小紅叉一個接一個的
這是因爲沒有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());
- }
- }
/**
* 調用發佈的服務。
*
*/
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;
- }
- }
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;
- }
- }
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());
- }
- }
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