【问题标题】:processing jms message in wso2 esb在 wso2 esb 中处理 jms 消息
【发布时间】:2016-10-04 19:18:48
【问题描述】:

我有 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>

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

[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>

谢谢

【问题讨论】:

  • 您能向我们展示您从队列中读取数据的 wso2 代理吗?然后您可以使用这样的 XPath 表达式访问您的元素:&lt;property name="JMSDestination" expression="$body/content/entry/textMessage/@JMSDestination"/&gt;

标签: jms wso2 wso2esb ibm-mq


【解决方案1】:

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

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

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

希望对您有所帮助。

【讨论】:

  • 不知何故,我的答案中没有显示设置标题的来源。希望这次能奏效。 org.apache.synapse/xsd" name="TRANSPORT_TRANSFERINTERVALL" expression="get-property('result_transferintervall')" scope="transport" type="STRING">
【解决方案2】:

您可以在 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>

【讨论】:

  • 它什么也不返回,无论我们给它什么表达式,它只用于 SOAP 返回消息,而不是我提到的 JMS 消息
  • &lt;log level="full"/&gt; 作为 inSequence 中的第一个中介并检查您的内容。
  • 它只会给带有信息的肥皂信封,谢谢,我知道如何访问这些属性
猜你喜欢
  • 2013-08-09
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
相关资源
最近更新 更多