Все,
Я пытаюсь написать тест 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)
Никакой другой информации или трассировки стека в журналах, кроме этого, поэтому, я запутался.
Есть идеи, что я делаю не так?