Как правильно использовать WS-Addressing в клиенте Axis2? - PullRequest
7 голосов
/ 26 марта 2010

Все, Я пытаюсь написать тест Junit, который вызывает клиент Web-сервиса в Axis2.1.5, и я запутался в том, как точно настроить его для использования WS-Addressing.

Я сгенерировал клиентскую заглушку с помощью wsdl2java и использую хранилище axis2.xml и modules из двоичного дистрибутива axis2.

Я знаю, что мне нужно использовать версию WS-Addressing для MemberSubmission, и я думаю Я правильно настроил (используя Опции), но заголовки, похоже, не генерируются правильно. (Я говорю «кажется», потому что я также не могу понять, как работает модуль SOAPMonitor - я бы тоже хотел получить любые советы по этому поводу!).

Мое главное заблуждение, однако, заключается в том, что именно нужно, чтобы «задействовать» модуль адресации. Должно ли быть достаточно настроить мой ConfigurationContext с помощью файла axis2.xml, который имеет ссылку на модуль адресации? Как это? :

//standard out of the box axis2 configs
 ConfigurationContext myConfigContext = ConfigurationContextFactory
   .createConfigurationContextFromFileSystem("C:/devapps/axis2-1.5.1/repository","C:/devapps/axis2-1.5.1/conf/axis2.xml");

  Options options = new Options();
  EndpointReference targetEPR = new EndpointReference(
    "https://host:port/service.asmx");

  options.setTo(targetEPR);

                //I believe this is what I'm supposed to do to specify the 
  //MemberSubmission version of WS-Addressing
  options.setProperty(AddressingConstants.WS_ADDRESSING_VERSION,
    AddressingConstants.Submission.WSA_NAMESPACE);
  //No idea of this is needed or not.
  options.setProperty(AddressingConstants.INCLUDE_OPTIONAL_HEADERS,
    Boolean.TRUE);
  options.activate(myConfigContext);
  options.setAction("someAction");

  CaseDetailsServiceStub stub = new CaseDetailsServiceStub(
    "https://host:port/service.asmx");
  stub._getServiceClient().setOptions(options);

  //I'm calling this from a Junit test
  assertNotNull(stub.someAction(someParam));

С моими настройками, как указано выше, в файле журнала видно, что модули загружаются из axis2.xml:

[INFO] Deploying module: addressing-1.5.1 - file:/C:/devapps/axis2-1.5.1/repository/modules/addressing-1.5.1.mar

Но я не думаю, что получаю какие-либо заголовки адресации. Ошибка, которую я получаю от сервера в этот момент, говорит:

Заголовок http://schemas.xmlsoap.org/ws/2004/08/addressing:Action для конечного получателя требуется, но отсутствует в сообщении.

Итак, я также видел некоторые документы, ссылающиеся на «интересные» модули. Когда я пытаюсь добавить эту строку в мой код и добавить адрес-1.5.1.mar в мой путь к классу, хотя:

stub._getServiceClient().engageModule("addressing");

Я получаю сообщение об ошибке:

Невозможно задействовать модуль: адресация org.apache.axis2.AxisFault: Невозможно задействовать модуль: soapmonitor в org.apache.axis2.client.ServiceClient.engageModule (ServiceClient.java:358)

Никакой другой информации или трассировки стека в журналах, кроме этого, поэтому, я запутался.

Есть идеи, что я делаю не так?

Ответы [ 2 ]

7 голосов
/ 27 апреля 2010

поместите addressign.mar и sopamoniter.mar в lib или classpath проекта. меня устраивает найти марш от axis2 kit

2 голосов
/ 15 октября 2015

В моем проекте Maven мне пришлось объявить дополнительную зависимость от артефакта org.apache.axis2:addressing:

<dependency>
    <groupId>org.apache.axis2</groupId>
    <artifactId>addressing</artifactId>
    <version>1.6.2</version>
    <classifier>classpath-module</classifier>
</dependency>
MyServiceStub stub = new MyServiceStub(targetEndpoint);
stub._getServiceClient().engageModule("addressing");

Я не вижу classpath-module артефактов для SoapMonitor в Maven Central , однако.

...