簡體   English   中英

在JAX-WS客戶端.jar中嵌入Web服務的WSDL

[英]Embedding the WSDL for a web service in a JAX-WS client .jar

我有一個幾年前在C ++中創建的Web服務,並由.NET客戶端使用C#的“wsdl.exe”來生成客戶端存根。 出於各種原因,我現在還需要一個Java客戶端,並且願意使用JAX-WS限制Java 6(JDK 1.6)的使用。 生成的存根工作正常,即使打包在.jar中,但我遇到了JAX-WS Web服務客戶端要部署的方式的問題。 看起來我遇到的問題可以解決的,但建議的方法似乎都不起作用。

JAX-WS期望WSDL可以訪問,最好是從網絡訪問,因為它每次啟動時都會解析WSDL以創建綁定。 與使用已知但無法訪問的wsdl創建Web服務客戶端中的 jgrowl一樣,客戶端可能無法訪問JAX-WS使用的URL(可能是構建計算機上的文件或指向localhost的指針)的WSDL。 。 我想在客戶端.jar中發布WSDL,但最簡單的解決方案( -wsdllocation "/path/to/wsdl/in/jar.wsdl" )打印出一個我不想顯示的警告。

我也不想讓客戶端做這樣的事情找到了解決辦法jgrowl,這似乎工作,但不只是工作。 在Google上找到的文章主要針對服務器WSDL位置,但建議客戶端應該能夠使用META-INF/jax-ws-catalog.xml文件將-wsdllocation使用的URL轉換為.jar文件中的路徑,但是那些似乎不適用於我們的測試。

是否有一個“配方”,以便我可以將WSDL放在.jar的某個地方,並且讓JAX-WS客戶端需要在客戶端用戶方面不需要額外的工作而且沒有警告?

如果您不想在構造函數中將URL設置為WSDL,則可能依賴於生成的工件的行為。 我使用以下-wsdlLocation

-wsdllocation wsdl/MaintainAddress.wsdl

在服務代碼中生成以下內容作為靜態初始化程序:

static {
    URL url = null;
    try {
        URL baseUrl;
        baseUrl = demo.ws.service.MaintainAddress_Service.class.getResource(".");
        url = new URL(baseUrl, "wsdl/MaintainAddress.wsdl");
    } catch (MalformedURLException e) {
        logger.warning("Failed to create URL for the wsdl Location: 'wsdl/MaintainAddress.wsdl', retrying as a local file");
        logger.warning(e.getMessage());
    }
    MAINTAINADDRESS_WSDL_LOCATION = url;
}

這基本上與您找到的解決方案相同,但使用默認構造函數。 WSDL需要是wsdl文件夾中類路徑的資源。

這種方法對我沒有任何警告。

我不認為這個行為是在規范中定義 - 至少,我找不到它。 我相信它是我JDK中wsimport工具的實現細節。


如果要部署到Java EE容器,則有更多選項 - 請參閱JSR 109 我相信這是jax-ws-catalog.xml發揮作用的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM