我正在學習如何使用Java實現Web服務。按照O'Reilly的書「學習Java」中的例子,我下載了一個WSDL文件(見http://bit.ly/13moiTh),用於cdyne.com的天氣服務,並使用wsimport工具生成了一組類。Java Web服務客戶端無法從cdyne.com訪問天氣服務
的第一個問題是,當我生成一個JAR文件,在Eclipse項目中引用它,類無法識別。我必須使用wsimport -keep並單獨將所有源文件複製到項目中以使其生成。
接下來,以確保該服務可用,我構建了一個基於從書的代碼簡單的HTTP POST客戶端。我可以使用該代碼成功訪問getCityWeatherByZIP服務,因此沒有連接或身份驗證問題。
最後,我嘗試使用自動生成的Web服務客戶端代碼訪問getCityWeatherByZIP和getCityForecastByZIP服務。無論默默地失敗,即isSuccess()方法返回false和所有響應領域是空:
Weather service = new Weather();
WeatherSoap weatherSoap = service.getWeatherSoap();
WeatherReturn weather = weatherSoap.getCityWeatherByZIP(ZIP);
if (weather.isSuccess()) {
System.out.format("%s, %s : %s : Temperature: %s, Wind: %s\n",
weather.getCity(), weather.getState(), weather.getDescription(),
weather.getTemperature(), weather.getWind());
}
else {
System.out.println("Failed to obtain weather");
}
在單步調試代碼,在getCityWeatherByZIP(),我發現了以下NoSuchMethodException: com.sun.xml.internal .ws.api.message.Packet.setHeaderList(com.sun.xml.internal.ws.api.message.HeaderList)「
此異常發生在(在Eclipse的Debug透視圖中)行中: 」 SEIStub.invoke(對象,方法,對象[])行:不可用」
顯然,Packet.setHe aderList(HeaderList)方法不存在,這也是由非內部類的文檔佐證: https://jax-ws.java.net/nonav/jax-ws-20-fcs/arch/com/sun/xml/ws/api/message/Packet.html
我使用的是最新的JDK 1.7和Eclipse版本:開普勒服務發佈1,建立ID:20130919- 0819。
我不知道如何解決這個問題。任何幫助,將不勝感激。
我解決了這個問題:Eclipse項目中缺少package-info.java文件。一旦我按照這些說明將它添加到包中,一切都開始起作用了: http://stackoverflow.com/questions/8405336/how-do-i-use-or-edit-package-info-java – user1408140