axis2數據綁定有好多種方式,其中xmlbeans是一種方式。由於手寫工作量太大,所以利用eclipse插件axis2 Wizards 生成客戶端。
插件下載地址:
下載eclipse axis2插件
http://mirror.bjtu.edu.cn/apache/axis/axis2/java/core/1.6.2/
安裝就不做說明了。
環境:eclipse
第一步、貼上代碼
新建一個web工程server
創建類AyncService,代碼如下
package com.bing.service;
public class AyncService {
public String sayHello(String name) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return name+",你好";
}
}
利用自帶的axis2 Wizards> Axis2 Service Archiver生成jar包或者aar包
可參考axis2-1.6.2-docs 文檔中關於axis2 Wizards嚮導的使用(28 Tools/Plug-ins)
注意:1)注意class存放路徑,我的是:C:\workspace\lu\server\build\classes
2) AyncService 要全路徑
3)生成jar包或者aar包都可以
第二步、把生成的asyn.jar複製到你已經啓動的%CATALINA_HOME%/webapps/axis2/WEB-INF/services/目錄下。
能夠正常訪問wsdl。
第三步、生成客戶端
新建web項目client
利用axis2 Wizards >Axis2 Code Generator。具體使用參考docs文檔吧!
注意:1)需要第二步發佈出去的wsdl地址:比如我的地址是 http://localhost:8080/axis2/services/asynService?wsdl
2)選擇Codegen Option 爲custom。不是默認的default。然後再選擇Databinding Name 爲xmlbeans
3)選擇生成路徑爲client項目
4)導入axis2必要的jar包。(axis2-1.6.2-bin中lib下的jar包)
生成後的client截圖爲
package com.bing.service.impl;
import com.bing.service.AsynServiceCallbackHandler;
import com.bing.service.SayHelloResponseDocument;
public class MyCallBack extends AsynServiceCallbackHandler {
@Override
public Object getClientData() {
System.out.println("---獲得數據---");
return super.getClientData();
}
@Override
public void receiveResultsayHello(SayHelloResponseDocument result) {
System.out.println("---接受數據成功---");
System.out.println(result.getSayHelloResponse().getReturn());
}
@Override
public void receiveErrorsayHello(Exception e) {
System.out.println("---獲得數據失敗---");
}
}
特別注意,需要把一開始生成的resources中schemaorg_apache_xmlbeans文件夾複製到build/classes目錄下。即加載類包
第四步、編寫MyCallBack 實現AsynServiceCallbackHandler
package com.bing.service.impl;
import com.bing.service.AsynServiceCallbackHandler;
import com.bing.service.SayHelloResponseDocument;
public class MyCallBack extends AsynServiceCallbackHandler {
@Override
public Object getClientData() {
System.out.println("---獲得數據---");
return super.getClientData();
}
@Override
public void receiveResultsayHello(SayHelloResponseDocument result) {
System.out.println("---接受數據成功---");
System.out.println(result.getSayHelloResponse().getReturn());
}
@Override
public void receiveErrorsayHello(Exception e) {
System.out.println("---獲得數據失敗---");
}
}
第五步、客戶端測試代碼
TestClient.java
import java.rmi.RemoteException;
import org.apache.axis2.AxisFault;
import com.bing.service.AsynServiceStub;
import com.bing.service.SayHelloDocument;
import com.bing.service.SayHelloResponseDocument;
import com.bing.service.impl.MyCallBack;
public class TestClient {
/**
* @param args
*/
public static void main(String[] args) {
try {
AsynServiceStub stub=new AsynServiceStub(null,"http://localhost:8080/axis2/services/asynService?wsdl");
SayHelloDocument reqDoc=SayHelloDocument.Factory.newInstance();
reqDoc.addNewSayHello();
reqDoc.getSayHello().setName("大兵哥");
SayHelloResponseDocument resDoc=stub.sayHello(reqDoc);
MyCallBack callback=new MyCallBack();
stub.startsayHello(reqDoc,callback);
synchronized(callback){
while(!callback.isFinished){
callback.wait(100l);
}
System.out.println("End");
}
} catch (AxisFault e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}catch (InterruptedException e) {
e.printStackTrace();
}
}
}
控制檯:
---接受數據成功---
大兵哥,你好
End