【问题标题】:wso2 esb proxy service wsa:Action header invalidwso2 esb 代理服务 wsa:Action header 无效
【发布时间】:2014-12-28 22:24:09
【问题描述】:

我希望开始使用 WSO2 ESB 来允许处理两个第 3 方产品之间发生的请求。

我无法更改调用客户端。我无法更改网络服务。

客户端正在发送带有被 ESB 视为无效的 SOAP 标头的请求。 Web 服务直接接受来自客户端的调用。它没有通过 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 以开箱即用地处理这种情况?需要更改源代码吗?

感谢您考虑我的问题......

【问题讨论】:

  • 我认为最初的原因是,您没有发送 SOAP 操作。 为空。在发送到 ESB 之前尝试设置属性。在什么时候你得到错误?请求是否命中代理/序列?否则它会在传输级别失败?
  • 感谢您阅读 Ratha。不幸的是,我无法更改客户呼叫。
  • 你在什么时候得到错误?请求是否命中代理/序列?否则它会在传输级别失败?
  • 我不知道该怎么说;它发生在调用顺序之前,因此可能是代理中的传输或验证阶段。我能够为服务设置自定义故障序列,并将其与执行 的过滤器测试一起使用 - 我已将端点故障延迟从默认的 30 秒设置为 100 毫秒,以保持服务活跃。这是一种解决方法,我可以用它来争取一些时间,但我仍然需要一个合适的解决方案。

标签: wso2 handler axis esb


【解决方案1】:

WS-Addressing 验证有时很烦人,但您可以通过在axis2.xml 配置中添加以下行来关闭它:

<parameter name="disableAddressingForInMessages" locked="false">true</parameter> 

【讨论】:

  • 感谢您的领导。初始测试失败,但是我在 WSO2 存储库文件夹中发现了许多配置文件实例,所以明天我会再试一次。我在&lt;moduleConfig name="addressing"&gt; 之后添加一个部分,如下所示&lt;parameter name="disableAddressingForInMessages"&gt;true&lt;/parameter&gt; &lt;parameter name="disableAddressingForOutMessages"&gt;true&lt;/parameter&gt; &lt;/moduleConfig&gt;
  • 不确定很多文件,你需要这个:repository/conf/axis2/axis2.xml。我将此参数添加为根节点(axisconfig)的子节点,它可以工作。
  • 我无法在axis2.xml 中看到此设置在行为上的任何差异 - 我不知道它被拾取或忽略了。
猜你喜欢
  • 2012-06-15
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多