2014-11-17 64 views
0

我通過JMS發送下面的JSON消息流:如何將JMS消息的JSON的DataMapper

[{ 「的SalesOrderID」: 「00001-2-3」, 「saleName」:「汽車銷售「,」status「:」processing「},{」salesOrderId「:」00004-5-6「,」saleName「:」House Sale「,」status「:」processing「}]

這是我的策略:

<flow name="integration-consumer-client2" doc:name="integration-consumer-client2"> 
    <jms:inbound-endpoint queue="client2.queue" connector-ref="Active_MQ" doc:name="JMS"/> 
    <logger message="Consumes Client 2 = #[payload]" level="INFO" doc:name="Logger"/> 
    <logger message="Client 2 Correlation = #[message.correlationId]" level="INFO" doc:name="Logger"/> 
    <vm:outbound-endpoint exchange-pattern="one-way" path="response" doc:name="VM"/> 
</flow> 
<flow name="integration-consumer-client" doc:name="integration-consumer-client"> 
    <jms:inbound-endpoint doc:name="JMS" connector-ref="Active_MQ" queue="client1.queue"> 
    </jms:inbound-endpoint> 
    <logger message="Consumes Client = #[payload]" level="INFO" doc:name="Logger"/> 
    <logger message="Client Correlation = #[message.correlationId]" level="INFO" doc:name="Logger"/> 
    <vm:outbound-endpoint exchange-pattern="one-way" path="response" doc:name="VM"/>  
</flow> 
<flow name="integration-flow" doc:name="integration-flow"> 
    <vm:inbound-endpoint path="response" doc:name="VM"> 
     <message-properties-transformer> 
      <add-message-property key="MULE_CORRELATION_GROUP_SIZE" value="2" /> 
     </message-properties-transformer> 
     <collection-aggregator/> 
    </vm:inbound-endpoint> 
    <logger message="after vm = #[payload]" level="INFO" doc:name="Logger"/> 
    <request-reply doc:name="Request-Reply"> 
     <jms:outbound-endpoint queue="queue.validation" connector-ref="Active_MQ" doc:name="JMS"> 
      <jms:object-to-jmsmessage-transformer doc:name="Object to JMSMessage"/> 
     </jms:outbound-endpoint> 
     <jms:inbound-endpoint queue="queue.validation.response" connector-ref="Active_MQ" doc:name="JMS"/> 
    </request-reply> 
    <logger message="Siebel Response in ESB = #[payload]" level="INFO" doc:name="Logger"/> 
</flow> 

因此,兩個消費者消息被彙總,然後通過使用JMS的請求回覆發送到另一個流。在該流程中,消息以 [{「salesOrderId」:「00001-2-3」,「saleName」:「Car Sale」,「status」:「processing」},{「salesOrderId」:「00004-5 -6" ,‘saleName’:‘房屋買賣’,‘狀態’:‘處理’}]

和流量:

<jms:activemq-connector name="Active_MQ" username="admin" password="admin" brokerURL="tcp://localhost:61616" validateConnections="true" doc:name="Active MQ"/> 
<data-mapper:config name="JSON_To_JSON" transformationGraphPath="json_to_json.grf" doc:name="JSON_To_JSON"/> 
<flow name="validation-flow" doc:name="validation-flow"> 
    <jms:inbound-endpoint doc:name="JMS" connector-ref="Active_MQ" queue="queue.validation" > 
     <jms:jmsmessage-to-object-transformer doc:name="JMSMessage to Object"/>  
    </jms:inbound-endpoint> 

    <logger message="Payload = #[payload]" level="INFO" doc:name="Logger"/> 
    <data-mapper:transform config-ref="JSON_To_JSON" doc:name="JSON To JSON"/> 
    <logger message="inside siebel after mapper = #[payload]" level="INFO" doc:name="Logger"/> 
</flow> 

我想通過一個映射器發送數據,因爲我想將狀態更改爲「完成」。但在json到json映射器之後,結果是[B @ 2b9f82b。如何將jms消息轉換爲更易於讀寫的映射器?

回答

1

你有什麼是一個完全有效的bytearray。您可以使用對象到字符串轉換器再次將其轉換爲字符串,或者甚至更好地將字符數組轉換爲字符串轉換器。

+0

感謝您的答覆,如果我把一個對象到字符串或字節數組到字符串變換器之後,我得到下面的有效載荷= [] –

+0

然後你的數據映射器轉換是錯誤的,它什麼也沒有。我會開始檢查*元素映射*(對話框的頂部中心)。 –

+0

通過執行json-to-map數據映射器,然後在使用對象到json轉換器的映射器之後進行管理。由於一些奇怪的原因,這是有效感謝您的幫助 –