2016-12-06 40 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

相关问题