Я взглянул на исходный код Apache CXF. Я думаю, что текущая версия CXF (2.3.1) не может извлечь WSDL из URL, который защищен базовой аутентификацией. Обычно вы создаете динамический клиент следующим образом:
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(
"http://localhost:8080/ws-auth/EchoService?wsdl");
К сожалению, в ответ вы получите исключение ServiceConstructionException:
org.apache.cxf.service.factory.ServiceConstructionException:
Could not resolve URL "http://localhost:8080/ws-auth/EchoService?wsdl".
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.composeUrl(DynamicClientFactory.java:6)
...
Мне не удалось найти место для установки учетных данных для базовой аутентификации. В качестве обходного пути я мог загрузить WSDL с помощью второго инструмента (возможно, httpclient) и сохранить его во временной папке. CXF может использовать этот файл и использовать его при создании клиента. Я пытался таким образом, но мне не повезло. Пришло еще одно исключение. Что не было неожиданностью, потому что я не смог выяснить, как передать учетные данные динамически созданному клиенту. Документация по Apache CXF может быть более обширной.
Честно говоря, я больше не уверен, является ли Apache CXF лучшим вариантом для этой задачи. Кто-нибудь знает инструмент или среду, которая поддерживает тестирование веб-сервисов SOAP простым способом? Как я упоминал ранее, он должен динамически создавать прокси-сервер службы, анализируя WSDL. Может быть, есть рабочие решения за пределами мира Java. Как парни из Ruby или Python справляются с этой проблемой? Может быть, я смогу применить их подходы, используя JRuby или Jython в своих модульных тестах.