Axis2 是 Apache 基金會重寫的 Web Service 引擎,支援 SOAP 1.1/1.2、REST、Spring、JSON 等技術。本文示範如何零配置發布 POJO 並以 Java、C# 調用。
axis2-1.4.1-war.zip,解壓取出 axis2.war 放入 Tomcat webapps 目錄。https://localhost:8080/axis2/ 確認安裝成功。public class SimpleService {
public String getGreeting(String name) {
return "你好 " + name;
}
public int getPrice() {
return new java.util.Random().nextInt(1000);
}
}
SimpleService.class 放入 WEB-INF/pojo 目錄(若無則自建)。https://localhost:8080/axis2/services/listServiceshttps://localhost:8080/axis2/services/SimpleService/getGreeting?name=bill修改 WEB-INF/conf/axis2.xml:
<parameter name="hotdeployment">true</parameter>:熱部署(預設開啟)。<parameter name="hotupdate">false</parameter> 改為 true 可開啟熱更新(開發期建議開啟)。在 axis2.xml <axisconfig> 下加入:
<deployer extension=".class" directory="my" class="org.apache.axis2.deployment.POJODeployer" />
即可將 WEB-INF/my 作為替代部署目錄。
RPCServiceClient client = new RPCServiceClient();
Options options = client.getOptions();
options.setTo(new EndpointReference("https://localhost:8080/axis2/services/SimpleService"));
// 呼叫 getGreeting
QName op = new QName("https://ws.apache.org/axis2", "getGreeting");
Object[] args = { "超人" };
Class[] ret = { String.class };
System.out.println(client.invokeBlocking(op, args, ret)[0]);
// 呼叫 getPrice
op = new QName("https://ws.apache.org/axis2", "getPrice");
ret = new Class[] { int.class };
System.out.println(client.invokeBlocking(op, new Object[]{}, ret)[0]);
%AXIS2_HOME%\bin\wsdl2java -uri https://localhost:8080/axis2/services/SimpleService?wsdl -p client -s -o stub
使用生成的 SimpleServiceStub:
SimpleServiceStub stub = new SimpleServiceStub();
SimpleServiceStub.GetGreeting gg = new SimpleServiceStub.GetGreeting();
gg.setName("比爾");
System.out.println(stub.getGreeting(gg).get_return());
System.out.println(stub.getPrice().get_return());
WebService.SimpleService svc = new WebService.SimpleService();
MessageBox.Show(svc.getGreeting("比爾"));
MessageBox.Show(svc.getPrice().ToString());
C# 直接將參數映射為原生類型,極為簡潔。