WEB-INF/lib 目錄activation.jar, mail.jar, xmlsec-1.4.Beta1.jar) 同樣放入 WEB-INF/lib,客戶端生成時需要| 模式 | 特點 | 推薦度 |
|---|---|---|
| Dynamic Invocation Interface (DII) | 無需生成 Stub,運行時動態構建 SOAP 請求 | 低:效能差、除錯難 |
| Dynamic Proxy | JDK 動態代理,介面導向 | 中:較靈活但類型安全較弱 |
| Stubs (靜態代理) | 預生成具體 Stub 類別,強類型、效能最佳、IDE 友善 | 高:生產環境首選 |
本文採用 Stubs 方式,業界主流推薦做法。
package server;
public class SayHello {
public String getName(String name) {
return "hello " + name;
}
}
編譯:javac server/SayHello.java
<deployment xmlns="https://xml.apache.org/axis/wsdd/" xmlns:java="https://xml.apache.org/axis/wsdd/providers/java">
<service name="SayHello" provider="java:RPC">
<parameter name="className" value="server.SayHello"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
儲存為 deploy.wsdd。
建立 deploy.bat:
set Axis_Lib=D:\workspace\test\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Axis_Servlet=https://localhost:8080/test/servlet/AxisServlet
%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd
執行後訪問 https://localhost:8080/test/services 驗證服務列表。
瀏覽器訪問服務端點 (如 https://localhost:8080/test/services/SayHello?wsdl) 下載 WSDL,儲存為 SayHello.wsdl。
建立 WSDL2Java.bat:
set Axis_Lib=D:\workspace\test\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:\workspace\test\src
set Package=server
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% SayHello.wsdl
生成 4 個核心檔案:
SayHello.java - 服務介面 (PortType)SayHelloService.java - 服務工廠介面SayHelloServiceLocator.java - 服務定位器實作SayHelloSoapBindingStub.java - SOAP 綁定 Stub 實作import junit.framework.TestCase;
public class TestWSClient extends TestCase {
public void testSayHello() throws Exception {
SayHelloService service = new SayHelloServiceLocator();
SayHello_PortType client = service.getSayHello();
String retValue = client.getName("clientName");
System.out.println(retValue); // 輸出: hello clientName
assertEquals("hello clientName", retValue);
}
}
自訂 Java Bean 需符合 JavaBean 規範 (無參建構子、getter/setter),Axis 會自動映射為 XML Schema 複雜類型。
RemoteException 或自訂異常 (需在 WSDD 宣告)AxisFault 或 RemoteException 解析 SOAP Fault 詳情ServiceLocator 和 Stub 實例 (執行緒不安全,需池化或 ThreadLocal)WSS4J 整合Axis Stubs 方式提供了強類型、高效能、易維護的 Web Service 開發體驗。核心流程:寫服務類 → 寫 WSDD → 部署 → 下載 WSDL → 生成 Stub → 寫客戶端。掌握此流程,即可快速構建跨語言、跨平台的企業級服務整合方案。