2016-12-06 35 views
1

WSO2.0.0嘗試使用JDBC消息存儲實現存儲轉發模式。WSO2 ESB存儲和轉發 - 在發送消息期間發生意外錯誤

發送消息到目標端點拋出異常:

TID: [-1234] [] [2016-12-05 23:25:24,874] ERROR {org.apache.synapse.message.processor.impl.sampler.SamplingService} - Error occurred while executing the message {org.apache.synapse.message.processor.impl.sampler.SamplingService} 
org.apache.synapse.SynapseException: Unexpected error during sending message out 
    at org.apache.synapse.core.axis2.Axis2Sender.handleException(Axis2Sender.java:257) 
    at org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:84) 
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:548) 
    at org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:382) 
    at org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:65) 
    at org.apache.synapse.endpoints.IndirectEndpoint.send(IndirectEndpoint.java:55) 
    at org.apache.synapse.mediators.builtin.CallMediator.handleNonBlockingCall(CallMediator.java:221) 
    at org.apache.synapse.mediators.builtin.CallMediator.mediate(CallMediator.java:99) 
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:97) 
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:59) 
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158) 
    at org.apache.synapse.message.processor.impl.sampler.SamplingService$1.run(SamplingService.java:211) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NullPointerException 
    at org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:538) 
    at org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:78) 
    ... 15 more 

我相信我缺少一個重要的交通,Axis2的或突觸財產,但我無法找到是哪一個。

存儲和轉發的序列是here

我試圖找出in the source codes什麼可能導致NullPointerException,但對我來說,它是沒有意義的,因爲httpMethod和messageType被定義。

謝謝大家的任何暗示

編輯: 基於註釋,使用的突觸源here

+0

的NPE是GET從拋出https://github.com/wso2/wso2-synapse/blob/release-2.1.7-wso2v6/modules/core/src/ main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java#L538 –

+0

噢,感謝您的更新。什麼是解決這個問題的最好方法?它看起來像originalInMsgCtx或getOperationContext()可能爲null :( – gusto2

+0

hmm。我想最有可能originalInMsgCtx.getOperationContext()爲null。如果originalInMsgCtx爲null你應該得到NPE之前來到那條線 –

回答

0

您的信息處理器在哪裏?理想情況下,您的消息處理器應使用呼叫中介調用後端服務。你能否嘗試下面的步驟。

  1. 創建一個代理服務來接受消息並使用其中的存儲介體將它們存儲在JDBC存儲中。
  2. 然後創建一個預定消息轉發處理器,該處理器監聽上述JDBC存儲並將消息轉發給端點。如果您需要,您可以指定任何回覆序列。否則,請確保您在上面的代理服務中設置了以下屬性。 <property name="OUT_ONLY" value="true" />
  3. 如果仍不能找出錯誤通過啓用log4j.properties文件的log4j.logger.httpclient.wire.header=DEBUG log4j.logger.httpclient.wire.content=DEBUG得到線日誌和張貼在這裏,這樣我可以分析並幫助你。
  4. 如果您需要有保證的交付,您必須使用消息轉發處理器。採樣處理器用於實現可能導致消息丟失的節流相關用例。
  5. 欲瞭解更多信息,請參閱文章[1]。不要使用相同的突觸配置,因爲它已經過時了,而是使用ESB web界面或developer studio創建工件。否則,由於缺少配置,您可能會遇到不同的錯誤。

[1] http://wso2.com/library/articles/2014/01/guaranteed-delivery-with-Message-Store-Message-Processor%20/

+0

謝謝大家,確實使用帶有本地代理的轉發處理器(在調用外部服務之前做一些工作)完成這項工作。我仍然有點與PostgreSQL支持的JDBC存儲(我會打開另一個線程,當我在合理的時間內找不到解決方案)。 – gusto2

相關問題