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

CXF 客戶端動態調用:無需接口類,僅用 URL 和參數調用遠程服務

     編輯:程式設計綜合問答

需求

CXF 客戶端不依賴服務端接口 Jar,僅憑服務 URL 和參數(如 String)動態調用方法。

核心方案:JaxWsDynamicClientFactory

org.apache.cxf.jaxws.JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("https://host:port/service?wsdl");
// 調用:方法名,參數...
Object[] result = client.invoke("methodName", "paramString");
System.out.println(result[0]);

完整示例

public Object callWebService(String wsdlUrl, String methodName, Object... params) {
    try {
        JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
        Client client = factory.createClient(wsdlUrl);
        // 可設置超時
        HTTPConduit conduit = (HTTPConduit) client.getConduit();
        HTTPClientPolicy policy = new HTTPClientPolicy();
        policy.setConnectionTimeout(5000);
        policy.setReceiveTimeout(10000);
        conduit.setClient(policy);
        return client.invoke(methodName, params)[0];
    } catch (Exception e) {
        throw new RuntimeException("動態調用失敗: " + e.getMessage(), e);
    }
}

// 調用
String result = (String) callWebService("https://localhost:8080/ws/user?wsdl", "getUserName", "user123");

參考資源

CXF 動態客戶端詳細教程

注意事項

  • 需引入 cxf-rt-frontend-jaxws、cxf-rt-transports-http 等依賴。
  • 僅適用於 SOAP/WSDL 服務,REST 請用 WebClient 或 HttpClient。
  • 參數類型需與 WSDL 定義匹配,複雜類型構造較繁瑣(需用 XMLBeans 或手動構造 DOM)。

**動態調用適合集成測試、網關轉發、無代碼生成場景,生產核心業務仍建議生成客戶端代碼編譯期檢查。**

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