Как создать динамический клиент веб-сервиса с базовой аутентификацией с использованием Apache CXF? - PullRequest
3 голосов
/ 10 декабря 2010

Я хочу разработать веб-сервис SOAP с TDD. Веб-сервис построен на Apache CXF и защищен базовой аутентификацией. Моя идея состоит в том, чтобы настроить модульные тесты с помощью динамического клиента, чтобы избежать процесса создания прокси.

В документации показано, как создать динамический клиент 1 :

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("http://localhost:8080/OrderProcess?wsdl");
Object order = Thread.currentThread().getContextClassLoader()
    .loadClass("demo.order.Order").newInstance();
Method m1 = order.getClass().getMethod("setCustomerID", String.class);
m1.invoke(order, "C001");
Object[] response = client.invoke("processOrder", order);

Хорошо, это выглядит многообещающе. Но как я могу указать имя пользователя и пароль для базовой аутентификации? WSDL и сама служба защищены базовой аутентификацией.

Bye,
Olaf

1 Ответ

2 голосов
/ 05 января 2011

Я взглянул на исходный код 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 в своих модульных тестах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...