【发布时间】: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 毫秒,以保持服务活跃。这是一种解决方法,我可以用它来争取一些时间,但我仍然需要一个合适的解决方案。