Мне нужно реализовать клиент веб-сервиса для данного файла WSDL.
Я использовал инструмент wsimport SDK для создания классов Java из WSDL, а также класс, который оборачивает единственный метод веб-сервиса (enhanceAddress(auth, param, address)
) в простой метод Java. Все идет нормально. Веб-сервис работает и корректно возвращает результаты. Код выглядит так:
try {
EnhancedAddressList uniservResponse = getWebservicePort().enhanceAddress(m_auth, m_param, uniservAddress);
//Where the Port^ is the HTTP Soap 1.2 Endpoint
}catch (Throwable e) {
throw new AddressValidationException("Error during uniserv webservice request.", e);
}
Проблема сейчас: мне нужно получить информацию о соединении и любых ошибках, которые могут возникнуть, чтобы заполнить различные значения JMX (такие как COUNT_READ_TIMEOUT, COUNT_CONNECT_TIMEOUT, ...)
К сожалению, метод официально не генерирует никаких исключений, поэтому для получения подробной информации о ConnectException мне нужно использовать getCause()
на ClientTransportException
, который будет выброшен.
Еще хуже: я попытался проверить значение времени ожидания чтения, но его нет. Я изменил расположение службы в файле wsdl, чтобы отправить запрос в скрипт php, который просто ждет вечно и не возвращается. Угадайте, что: клиент веб-службы не истекает, но также ждет вечно (я убил приложение после 30 + минут ожидания). Это не вариант для моего приложения, так как в конце концов у меня заканчиваются соединения tcp, если некоторые из них «застревают».
Метод enhanceAddress(auth, param, address)
не реализован, но аннотирован javax.jws. * Аннотации, означающие, что я не могу видеть / изменять / проверять код, который фактически выполняется.
Есть ли у меня какой-либо вариант, кроме как выбросить весь wsimport / javax.jsw-вещи и реализовать свой собственный мыльный клиент?