Я изучаю, как реализовать веб-сервисы на Java. Следуя примеру из книги О'Рейли «Изучение Java», я скачал файл WSDL (см. http://bit.ly/13moiTh) для службы погоды на cdyne.com и создал набор классов с помощью инструмента wsimport.
Первая проблема заключалась в том, что когда я создал файл JAR и сослался на него в проекте Eclipse, классы не были распознаны. Мне пришлось использовать wsimport -keep и по отдельности скопировать все исходные файлы в проект, чтобы его собрать.
Затем, чтобы убедиться, что служба доступна, я создал простой HTTP POST-клиент на основе кода из книги. Я смог успешно получить доступ к службе getCityWeatherByZIP с помощью этого кода, поэтому проблем с подключением или аутентификацией не было.
Наконец, я попытался получить доступ к службам 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: "
Это исключение возникает в строке, которая говорит (в перспективе отладки Eclipse): «Строка SEIStub.invoke(Object, Method, Object[]): недоступна»
Очевидно, что метод Packet.setHeaderList(HeaderList) не существует, что также подтверждается документацией невнутреннего класса: https://jax-ws.java.net/nonav/jax-ws-20-fcs/arch/com/sun/xml/ws/api/message/Packet.html
Я использую последнюю версию JDK 1.7 и Eclipse: Kepler Service Release 1, идентификатор сборки: 20130919-0819.
Я не знаю, как решить эту проблему. Любая помощь будет оценена по достоинству.