wso2 прокси-служба esb wsa: недопустимый заголовок действия

Я хочу начать использовать WSO2 ESB, чтобы разрешить манипулирование запросами, которые происходят между двумя сторонними продуктами.

Я не могу изменить вызывающего клиента. Я не могу изменить веб-службу.

Клиент отправляет запрос с заголовком SOAP, который ESB считает недействительным. Веб-сервис принимает вызов напрямую от клиента. Он не проходит через ESB, я вижу, что только запрос поступает в ESB, а ответ возвращается клиенту без обращения ESB к конечной точке. Трассировка отладки показывает, что обработчик решает, что тег действия, включенный в заголовок, не соответствует требуемому стандарту.

TID: [0] [ESB] [2014-12-24 10:51:06,481] DEBUG {org.apache.axis2.context.MessageContext} -  SoapAction is () {org.apache.axis2.context.MessageContext}
TID: [0] [ESB] [2014-12-24 10:51:06,481] DEBUG {org.apache.axis2.builder.BuilderUtil} -  char set encoding set from default =UTF-8 {org.apache.axis2.builder.BuilderUtil}
TID: [0] [ESB] [2014-12-24 10:51:06,481] DEBUG {org.apache.axis2.handlers.addressing.AddressingInHandler} -  No headers present corresponding to http://www.w3.org/2005/08/addressing {org.apache.axis2.handlers.addressing.AddressingInHandler}
TID: [0] [ESB] [2014-12-24 10:51:06,481] DEBUG {org.apache.axis2.handlers.addressing.AddressingInHandler} -  http://schemas.xmlsoap.org/ws/2004/08/addressing headers present in the SOAP message. Starting to process ... {org.apache.axis2.handlers.addressing.AddressingInHandler}
TID: [0] [ESB] [2014-12-24 10:51:06,481] DEBUG {org.apache.axis2.client.Options} -  getAction () from org.apache.axis2.client.Options@53781b2c {org.apache.axis2.client.Options}
TID: [0] [ESB] [2014-12-24 10:51:06,481] DEBUG {org.apache.axis2.handlers.addressing.AddressingInHandler} -  The wsa:Action header is present but its contents are empty.  This violates rules in the WS-A specification.  The SOAP node that sent this message must be changed. {org.apache.axis2.handlers.addressing.AddressingInHandler}
TID: [0] [ESB] [2014-12-24 10:51:06,481]  WARN {org.apache.axis2.addressing.AddressingFaultsHelper} -  triggerActionNotSupportedFault: messageContext: [MessageContext: logID=d241a239ecfe36148a4f055b69d082a8d2b599e9cd6d6ba7] problemAction:  {org.apache.axis2.addressing.AddressingFaultsHelper}
TID: [0] [ESB] [2014-12-24 10:51:06,481] DEBUG {org.apache.axis2.i18n.ProjectResourceBundle} -  org.apache.axis2.addressing.i18n.resource::handleGetObject(spec.FAULT_ACTION_NOT_SUPPORTED_REASON) {org.apache.axis2.i18n.ProjectResourceBundle}
TID: [0] [ESB] [2014-12-24 10:51:06,481] ERROR {org.apache.synapse.transport.passthru.util.RelaySecuirtyMessageBuilderDispatchandler} -  Error while executing the message at relaySecurity handler {org.apache.synapse.transport.passthru.util.RelaySecuirtyMessageBuilderDispatchandler}
org.apache.axis2.AxisFault: The [action] cannot be processed at the receiver.
    at org.apache.axis2.addressing.AddressingFaultsHelper.triggerAddressingFault(AddressingFaultsHelper.java:373)
    at org.apache.axis2.addressing.AddressingFaultsHelper.triggerActionNotSupportedFault(AddressingFaultsHelper.java:336)
    at org.apache.axis2.handlers.addressing.AddressingInHandler.extractActionInformation(AddressingInHandler.java:539)
    at org.apache.axis2.handlers.addressing.AddressingInHandler.extractAddressingInformation(AddressingInHandler.java:249)

Запрос, созданный клиентом, имеет следующий заголовок

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soap:Header>
    <wsa:Action/>
    <wsa:MessageID>urn:uuid:926dbf87-1f59-4fff-b1e9-341286567f8c</wsa:MessageID>
    <wsa:ReplyTo>
      <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
    </wsa:ReplyTo>
    <wsa:To>http://blahblahblah:8280/services/PassTrhuProxy1</wsa:To>
  </soap:Header>
  <soap:Body>
  ...
  </soap:Body>
</soap:Envelope>

Мы провели некоторое тестирование, создав запросы в SOAPUI. Если мы создадим запрос с заголовком, как показано ниже, мы сможем получить правильный ответ от службы.

 <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">

Я понятия не имею, как заставить ESB передать сообщение службе. Есть способ?

Интересно 1. Есть ли у меня способ заставить WSO2 ESB игнорировать ошибку валидации, чтобы я мог передать сообщение посредникам и манипулировать ими? 2. Есть ли способ полностью отключить валидацию? 3. Можно ли настроить WSO2 ESB для обработки этого сценария из коробки? Требуется изменение исходного кода?

Спасибо, что обдумали мой вопрос ....


person Combined Resource    schedule 24.12.2014    source источник
comment
Я думаю, что исходная причина этого в том, что вы не отправляете действие SOAP. ‹Wsa: Action /› имеет значение null. Попробуйте установить свойство перед отправкой в ​​ESB. В какой момент вы получаете ошибку? Попадает ли запрос в прокси / последовательность? Или он не работает на транспортном уровне?   -  person Ratha    schedule 24.12.2014
comment
Спасибо, что прочитали Ратху. К сожалению, я не могу изменить вызов клиента.   -  person Combined Resource    schedule 29.12.2014
comment
В какой момент вы получаете ошибку? Попадает ли запрос в прокси / последовательность? Или он не работает на транспортном уровне?   -  person Ratha    schedule 29.12.2014
comment
Я не знаю, как сказать; Это происходит до того, как будет вызвана последовательность, поэтому, возможно, в прокси-сервере будет фаза транспортировки или проверки. Мне удалось настроить настраиваемую последовательность отказов для службы и использовать ее с тестом фильтра, который выполняет ‹send› ‹/send›, который работает - я установил задержку отказа конечной точки с 30 секунд по умолчанию до 100 мс, чтобы сохранить служба активна. это обходной путь, который я могу использовать, чтобы выиграть время, но мне все еще нужно подходящее решение.   -  person Combined Resource    schedule 06.01.2015


Ответы (1)


Проверка WS-Addressing иногда раздражает, но вы можете отключить ее, добавив следующую строку в конфигурацию axis2.xml:

<parameter name="disableAddressingForInMessages" locked="false">true</parameter> 
person user3714601    schedule 28.12.2014
comment
Спасибо за инициативу. Первоначальное тестирование не удалось, однако я нашел много экземпляров файлов конфигурации в папке репозитория WSO2, поэтому я попробую еще раз завтра. Я добавляю раздел после <moduleConfig name="addressing"> вот так <parameter name="disableAddressingForInMessages">true</parameter> <parameter name="disableAddressingForOutMessages">true</parameter> </moduleConfig> - person Combined Resource; 29.12.2014
comment
Не уверен насчет многих файлов, вам нужен именно этот: repository / conf / axis2 / axis2.xml. Я добавил этот параметр как дочерний элемент корневого узла (axisconfig), и он работает. - person user3714601; 30.12.2014
comment
Мне не удалось увидеть никакой разницы в поведении с этим параметром в axis2.xml - я не знаю, был ли он выбран или проигнорирован. - person Combined Resource; 06.01.2015