首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

使用 SoapUI 替代 wsdl2java 生成 CXF HTTPS 客戶端代碼:繞過證書驗證實戰

     編輯:Java 綜合教學

問題背景

使用 CXF 自帶 wsdl2java 工具基於 HTTPS WSDL 生成客戶端代碼時,因信任庫缺少服務端證書,報錯:

PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target

不想/無法導入證書時,可用 SoapUI 圖形化工具離線生成代碼,繞過 SSL 驗證。

操作步驟(SoapUI 5.x)

1. 配置 CXF 路徑

菜單 File → Preferences → SSL Settings:

  • 勾選 Disable SSL Certificate Validation(關鍵:跳過證書校驗)。
  • 或指定自定義 TrustStore(若有)。

菜單 File → Preferences → CXF Settings:

  • 設置 CXF Home 指向本地 CXF 發布目錄(含 bin/wsdl2java、lib 等)。

2. 創建項目並導入 WSDL

  1. File → New SOAP Project。
  2. Project Name 自填;Initial WSDL 填 HTTPS URL(如 https://example.com/service?wsdl)。
  3. 勾選 Create Requests、Create MockService 可選。
  4. 點 OK,SoapUI 會下載 WSDL 及引用的 XSD,左側導航樹顯示服務結構。

3. 生成客戶端代碼

  1. 右鍵項目根節點 → Generate Code。
  2. 框架選 CXF。
  3. Output Directory:指定生成代碼輸出目錄。
  4. Package Name:指定目標包路徑(如 com.example.client)。
  5. 其他選項按需勾選:Async、JAXB Binding 等。
  6. 點 Generate,控制台輸出進度,完成後目標目錄生成完整客戶端代碼。

生成代碼結構說明

com.example.client
├── ServiceName.java          // Service 接口
├── ServiceName_Service.java  // Service 工廠類(含 getPort())
├── PortName.java             // SEI 接口(業務方法)
├── ObjectFactory.java        // JAXB 元素工廠
├── package-info.java         // JAXB 命名空間
└── model/                    // 複雜類型對象

調用示例

ServiceName_Service factory = new ServiceName_Service();
ServiceName port = factory.getServiceNamePort();

// 若運行時仍需跳過 SSL(生產請配置正規證書)
BindingProvider bp = (BindingProvider) port;
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "https://real-endpoint.com/service");
bp.getRequestContext().put("com.sun.xml.ws.transport.https.client.SSLSocketFactory", createTrustAllSSLSocketFactory());

注意事項與最佳實踐

場景建議
生產環境務必配置正規證書(導入 TrustStore 或使用 CA 簽發證書),禁用驅動僅限開發/測試。
WSDL 變更重新生成代碼,或手動修改 JAXB 註解適配。
Maven 集成推薦用 cxf-codegen-plugin 在構建階段自動生成,配置 wsdlOptions 指定 HTTPS URL 並設置 trustAll。
代碼維護生成代碼納入版本控制,避免重複生成衝突。

Maven 插件替代方案(推薦 CI/CD)

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>3.4.x</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>https://example.com/service?wsdl</wsdl>
                        <extraargs>
                            <extraarg>-client</extraarg>
                            <extraarg>-trustAll</extraarg> <!-- 關鍵:信任所有證書 -->
                        </extraargs>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals><goal>wsdl2java</goal></goals>
        </execution>
    </executions>
</plugin>

掌握 SoapUI 圖形化生成與 Maven 插件自動化生成兩種方式,可靈活應對開發調試與持續集成場景,快速解決 HTTPS WSDL 代碼生成阻塞問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved