1、編寫一個簡單的WebService的服務器端代碼,代碼如下:
代碼
import
java.util.Random;
/** * <b>function:</b> WebService HelloWorld服務示例 * @author hoojo * @createDate 2011-1-5 下午03:35:06 * @file HelloWorldService.java * @package com.hoo.service * @project Axis2WebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */
public
class
HelloWorldService {
public
String sayHello(String name) {
return
name + "
say: hello [axis2]
";
}
public
int
getAge(
int
i) {
return
i +
new
Random().nextInt(100);
}
}
注意,上面的HelloWorldService是沒有package的。Copy這個類的class文件,放到tomcat目錄下的webapps的axis2的WEB-INF目錄的pojo文件夾下。如果沒有pojo這個目錄就手動創建一個一個文件夾。然后在瀏覽器輸入:
http://localhost:8080/axis2/
點擊Services的鏈接就可以看到我們手動發布的HelloWorldService了,或者是瀏覽器地址欄輸入:
http://localhost:8080/axis2/services/listServices
你就可以看到你剛才粘貼過去的這個WebService了。
點擊鏈接就可以看到wsdl文件的內容了。內容很多,如果你看過axis1.x的介紹就知道wsdl文件的大致結構了。
下面講解下為什么要將class放在pojo文件夾下。首先我們看看[tomcat_home]/webapps/axis2/WEB-INF/conf/axis2.xml
該文件中有這樣一行代碼:
<deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
.class的后綴文件放在目錄pojo目錄下。
2、測試這個WebService的方法
復制上面的HelloWorldService的鏈接地址,然后帶上方法名稱和參數值即可測試調用是否成功。如下:
http://localhost:8080/axis2/services/HelloWorldService/sayHello?name=jack
http://localhost:8080/axis2/services/HelloWorldService
這個是WebService的地址
/sayHello是方法名稱,?name=jack是參數名稱和值
在瀏覽器中輸入上面的地址后,可以看到如下效果:
可以看到返回值,和方法名稱。ns:sayHelloResponse是方法名稱,所有的方法名稱后都會帶上Response,后面的ns當然是當前方法所在的類的包名了,這里沒有package就是默認的axis2的域名。
同樣,getAge方法,也是一樣的調用方法。
http://localhost:8080/axis2/services/HelloWorldService/getAge?i=22
結果如下:
3、下面我們看下客戶端調用代碼的編寫,代碼如下:
代碼
package
com.hoo.service;
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;
/** * <b>function:</b>HelloWorldService 客戶端調用代碼 * @author hoojo * @createDate 2011-1-7 下午03:55:05 * @file HelloWorldClient.java * @package com.hoo.service * @project Axis2WebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */
public
class
HelloWorldClient {
public
static
void
main(String[] args)
throws
AxisFault {
//RPCServiceClient是RPC方式調用
RPCServiceClient client =
new
RPCServiceClient();
Options options = client.getOptions();
//設置調用WebService的URL
String address = "
http://localhost:8080/axis2/services/HelloWorldService
";
EndpointReference epf =
new
EndpointReference(address);
options.setTo(epf);
/** * 設置將調用的方法,http://ws.apache.org/axis2是方法 * 默認(沒有package)命名空間,如果有包名 * 就是http://service.hoo.com 包名倒過來即可 * sayHello就是方法名稱了 */
QName qname =
new
QName("
http://ws.apache.org/axis2
", "
sayHello
");
//指定調用的方法和傳遞參數數據,及設置返回值的類型
Object[] result = client.invokeBlocking(qname,
new
Object[] { "
jack
" },
new
Class[] { String.
class
});
System.out.println(result[0]);
qname =
new
QName("
http://ws.apache.org/axis2
", "
getAge
");
result = client.invokeBlocking(qname,
new
Object[] {
new
Integer(22) },
new
Class[] {
int
.
class
});
System.out.println(result[0]);
}
}
如果你了解或是
看過axis1.x的WebService
,這里的客戶端調用代碼比較簡單,有部分關鍵注釋,這里就不多加贅述。值得注意的是axis2的WebService客戶端調用的返回對象是一個Object的數組,這點和axis1.x有很大不同。我們一般拿數組的第一個值,轉換強轉即可。
二、Axis2的簡單WebService示例