2013-05-03 121 views
1

我有侦听消息代理上的JMS队列的代理。当我将消息发送到队列时,我将自定义属性设置为JMS消息。但是当我记录代理收到的消息时,没有自定义的JMS属性。
我将如何获得代理中的自定义JMS属性?WSO2 ESB:获取JMS消息属性

我使用WSO2 ESB 4.6.0和ActiveMQ 5.8.0。

<proxy xmlns="http://ws.apache.org/ns/synapse" name="MyProxy" transports="https,TTP,http,jms" statistics="disable" trace="disable" startOnLoad="true"> 
    <target> 
     <inSequence> 
     <property name="OUT_ONLY" value="true"/> 
     <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/> 
     <log level="full"/>    
     </inSequence> 
     <outSequence>   
     <drop/> 
     </outSequence> 
     <endpoint> 
     <address uri="jms:/MyQueue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=queue" format="pox"/> 
     </endpoint> 
    </target> 
</proxy> 

回答

3

我不认为它们直接在SOAP消息中可用。它们应该在Axis2/Transport范围中可用。通常,JMS传输仅将JMS消息的有效内容添加到SOAP主体。所以请尝试以下。

你可以检查它们使用ESB中的属性进行检索并记录它们。

<log level="custom"> 
    <property name="JMS_PROPERTY---->" expression="get-property('axis2','your-property-name')"/> 
</log> 

您可以参考this的属性范围。 (如果它设置在传输标题,您可以将范围从'axis2'更改为'传输'并尝试。)

我没有亲自尝试过这一点,并在逻辑上建议了答案。

+2

这个答案是完全正确的。谢谢!在单独的答案中增加了一个关于从自定义中介获取JMS属性的观察。 – surlac 2013-05-03 17:07:04

6

为了访问自定义的JMS属性,有必要获取传输标题。我发现2种方法为:从自定义类中保

<log level="custom">    
    <property name="jms property" expression="get-property('transport', 'custom_prop_key_1')"/>    
</log> 

2):从XML配置
1)

public boolean mediate(MessageContext synCtx) { 
    ((Map)((Axis2MessageContext) synCtx).getAxis2MessageContext().getProperty("TRANSPORT_HEADERS")).get("custom_prop_key_1"); 
... 
}