Мне нужно реализовать клиент веб-сервиса для данного файла WSDL. Я использовал инструмент SDK wsimport для создания классов 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. * Annotations, что означает, что я не могу видеть / изменять / проверять код, который фактически выполняется.
Есть ли у меня другой вариант, кроме как выбросить весь wsimport / javax.jsw-stuff и реализовать свой собственный мыльный клиент?