Axis2 預設支援將無套件的 POJO 直接放入 WEB-INF/pojo 目錄發布(零配置)。但實際專案中類別通常歸屬於套件,此時需使用 services.xml 進行發布。
package service;
public class MyService {
public String getGreeting(String name) {
return "您好 " + name;
}
public void update(String data) {
System.out.println("<" + data + ">已經更新");
}
}
建立 META-INF/services.xml:
<service name="myService">
<description> Web Service例子 </description>
<parameter name="ServiceClass"> service.MyService </parameter>
<messageReceivers>
<messageReceiver mep="https://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
<messageReceiver mep="https://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</messageReceivers>
</service>
<service name>:服務名稱,對應 WSDL URL 中的 services/<name>。ServiceClass:完整類別名稱(含套件)。messageReceivers:根據方法是否有回傳值指定接收器(RPCMessageReceiver 處理 in-out,RPCInOnlyMessageReceiver 處理 in-only)。.class 檔置於對應套件目錄(如 D:\ws\service\MyService.class)。services.xml 置於 D:\ws\META-INF\services.xml。D:\ws 目錄執行 jar cvf ws.aar . 生成 AAR 檔(實為 ZIP 格式)。ws.aar 複製到 <Tomcat>\webapps\axis2\WEB-INF\services,重啟 Tomcat 即可生效。<service name="myService">
<description> Web Service例子 </description>
<parameter name="ServiceClass"> service.MyService </parameter>
<operation name="getGreeting">
<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
<operation name="update">
<messageReceiver class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</operation>
</service>
此方式生成的 WSDL 會將無回傳值方法的參數封裝於獨立類別中,但客戶端 Stub 相容性良好:服務端切換配置方式不影響現有客戶端調用。
<serviceGroup>
<service name="myService"> ... </service>
<service name="myService1">
<parameter name="ServiceClass"> service.MyService1 </parameter>
<messageReceivers> ... </messageReceivers>
</service>
</serviceGroup>
透過 <serviceGroup> 可在單一 AAR 中發布多個服務,共用類別路徑與資源。