处理wso2 esb中的jms消息

时间:2015-06-19 12:26:31

标签: jms wso2 wso2esb ibm-mq

我将JMS消息作为



<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<content>
    <entry type="1">
        <textMessage JMSDeliveryMode="2" JMSDestination="queue:///QUEUE" JMSExpiration="0" JMSMessageID="ID:c3e2d840d8e3c1f14040404040404040cf1eba01c4eff036" JMSPriority="4" JMSRedelivered="false" JMSTimestamp="1434705226223" fromQueue="true" codec="Base64">
            <text>dGVzdA==</text>
        </textMessage>
    </entry>
</content>
&#13;
&#13;
&#13;

但当我把它拉进wso2 esb时,它会进入肥皂信封而且我无法在这里检索属性,例如JMSDestination等。
我想在WSO2 ESB中阅读这些细节。有办法吗? 从JMS获取消息后,我收到以下SOAP消息,它正在记录,或者xPath仅对此有效。

&#13;
&#13;
[2015-06-22 11:08:33,632]  INFO - LogMediator To: , WSAction: urn:mediate, SOAPA
ction: urn:mediate, MessageID: ID:c3e2d840d8e3c1f14040404040404040cf224f7f3bbf47
25, Direction: request, Envelope: <?xml version="1.0" encoding="utf-8"?><soapenv
:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Bod
y>test1</soapenv:Body></soapenv:Envelope>
&#13;
&#13;
&#13;

谢谢

2 个答案:

答案 0 :(得分:0)

您可以在inSequence中使用以下代码从邮件正文中选择任何信息(即使有内部肥皂信封):

<property name="JMSDestination" expression="$body/content/entry/textMessage/@JMSDestination"/>

验证是否正在使用适当的消息构建器构建消息,否则您将无法看到消息内容。请参阅此JMS代理示例:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse" name="JMSProxyName" transports="jms" startOnLoad="true" trace="disable">
    <target>
        <inSequence>
            <log level="custom">
                <property name="Log JMSDestination" expression="$body/content/entry/textMessage/@JMSDestination"/>
            </log>
            <drop/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </target>
    <parameter name="transport.jms.ContentType">
        <rules>
            <jmsProperty>contentType</jmsProperty>
            <default>application/xml</default>
        </rules>
    </parameter>
    <parameter name="transport.jms.Destination">YourQueue</parameter>
</proxy>

答案 1 :(得分:0)

我正在我的发送代理中设置JMS标头。

在接收代理中,您可以使用get-property访问该属性,如下例所示。

   <log level="custom">
        <property name="Autodeploy_TSONL_CreateProxyTarget - Config Params transport intervall "
                  expression="get-property('transport','TRANSPORT_TRANSFERINTERVALL')"/>

希望有所帮助。