2014-12-24 76 views
0

我希望開始使用WSO2 ESB來允許處理兩個第三方產品之間發生的請求。wso2 esb代理服務wsa:操作標頭無效

我無法更改呼叫客戶端。我無法更改Web服務。

客戶端發送的請求中包含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 [email protected] {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來處理這種開箱即用的情況嗎?源代碼更改需要?

謝謝您考慮我的問題....

+0

我認爲最初的原因是,你沒有發送SOAP操作。 爲空。嘗試在發送到ESB之前設置屬性。在哪一點你會得到錯誤?請求是否碰到代理/序列?否則在運輸層面失敗? – Ratha

+0

感謝您閱讀Ratha。不幸的是,我無法改變客戶電話。 –

+0

在哪一點你會得到錯誤?請求是否碰到代理/序列?否則在運輸層面失敗? – Ratha

回答

0

WS-Addressing的驗證有時是惱人的,但你可以將其關閉,通過添加以下行axis2.xml配置:

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

謝謝領先。最初的測試失敗了,但是我在WSO2 repository文件夾中發現了很多配置文件的實例,所以明天我會再試一次。 我加入以下的截面中的 '<的ModuleConfig名稱= 「尋址」>' 這樣 '<參數名稱= 「disableAddressingForInMessages」>真 <參數名稱= 「disableAddressingForOutMessages」>真' –

+0

不知道很多文件,你需要這個:repository/conf/axis2/axis2.xml。我將此參數添加爲根節點(axisconfig)的子節點,並且它可以工作。 – user3714601

+0

我無法看到axis2.xml中這個設置的行爲有什麼不同 - 我不知道它被拾取或忽略。 –