Я создаю клиент для веб-службы SOAP. Я автоматически сгенерировал большую часть клиентского кода с помощью IntelliJ IDEA, сказав, что он должен создать клиент веб-службы JaxWS из WSDL.
Веб-служба работает по разным URL-адресам (тестирование, интеграция, производство), поэтому мне необходимо настроить URL-адрес службы в моем клиенте. Мой код выглядит так:
String urlString = props.getProperty(URL);
service = new RequestMultiTransportService(new URL(urlString),
new QName("http://some.uri.com/",
"RequestMultiTransportService"));
Boolean useBasicAuth = Boolean.parseBoolean(props.getProperty(BASICAUTH));
RequestMultiTransport rmt = service.getRequestMultiTransportPort();
if (useBasicAuth) {
String user = props.getProperty(AUTHUSER);
String pw = props.getProperty(AUTHPW);
Map requestContext = ((BindingProvider)rmt).getRequestContext();
requestContext.put(BindingProvider.USERNAME_PROPERTY, user);
requestContext.put(BindingProvider.PASSWORD_PROPERTY, pw);
}
ProvisioningResponse response = rmt.send("some", "params", "...");
Как видите, службе может потребоваться базовая аутентификация. И вот проблема: хотя я могу настроить базовую аутентификацию для фактического запроса, я не могу настроить ее для загрузки файла WSDL (что происходит в конструкторе RequestMultiTransportService
). RequestMultiTransportService
автоматически сгенерирован IDEA, и его конструктор просто вызывает его супер-конструктор, являющийся одним из javax.xml.ws.Service
.
Так что, где бы веб-сервису не требовалась базовая аутентификация, мой код завершается ошибкой, потому что он не предоставляет пользователя / пароль для получения файла WSDL, расположенного в urlString
. Возможный обходной путь, о котором я подумал, - это сохранить файл WSDL локально и указать на него URL-адрес file://
. Но это не соответствует моим требованиям, поскольку расположение службы, определенное в файле WSDL, различается, и я не могу изменить URL службы в объекте service
, который был загружен из файла WSDL.
У кого-нибудь есть решение для получения файла WSDL с базовой аутентификацией?