Apache CXF wsdl2java 工具完整使用指南:對比 JDK wsimport、離線/在線生成、參數詳解
wsdl2java vs wsimport 核心差異
| 特性 | JDK wsimport | CXF wsdl2java |
| SOAP 版本支援 | 僅 SOAP 1.1,1.2 解析不全 | 完整支援 SOAP 1.1/1.2 |
| JDK 版本要求 | JDK 1.6.0_21+ | 基於 JDK 1.7 生成代碼,需微調 |
| 生成代碼風格 | 標準 JAX-WS | CXF 增強模型,含 Client/Server 模板 |
| 依賴管理 | 零依賴(JDK 內建) | 需 CXF 運行時庫 |
環境準備
- 下載 Apache CXF(如
apache-cxf-2.7.10.zip):官網下載
- 解壓至目錄(如
D:\apache-cxf-2.7.10)
- 配置環境變量:
CXF_HOME=D:\apache-cxf-2.7.10
Path 追加 %CXF_HOME%\bin
- 驗證:CMD 輸入
wsdl2java 顯示 usage 即成功
常用命令範例
# 生成客戶端代碼(指定包名、輸出目錄)
wsdl2java -d E:\workspace\CXF_client\src -p com.cxf.client https://localhost:9007/Webservice/hello?wsdl
# 生成服務端骨架代碼
wsdl2java -d E:\workspace\CXF_server\src -p com.cxf.server -server https://localhost:9007/Webservice/hello?wsdl
# 生成所有代碼(類型、服務、代理、實現、構建腳本)
wsdl2java -d E:\workspace\CXF_all\src -p com.cxf.all -all https://localhost:9007/Webservice/hello?wsdl
# 使用本地 WSDL 文件
wsdl2java -p com.local -d E:\src -all hello.wsdl
參數詳解
-d:輸出目錄
-p:包名(覆蓋 WSDL targetNamespace)
-client:生成客戶端測試代碼
-server:生成服務端啟動代碼
-impl:生成服務實現模板
-ant:生成 build.xml
-all:生成所有工件(等同 -client -server -impl -ant)
生成代碼後常見調整
- JDK 1.7 生成代碼可能含
@WebService(targetNamespace="") 空命名空間,需補全
- 若使用 Maven,建議改用
cxf-codegen-plugin 在構建階段自動生成
- 客戶端調用建議封裝
JaxWsProxyFactoryBean 而非直接用生成的 _Service 類
Maven 插件配置(推薦)
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>3.1.5</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<wsdlOptions>
<wsdlOption>
<wsdl>src/main/resources/wsdl/hello.wsdl</wsdl>
<extraargs><extraarg>-p</extraarg><extraarg>com.cxf.client</extraarg></extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals><goal>wsdl2java</goal></goals>
</execution>
</executions>
</plugin>