2017-08-10 58 views
0

我有一個ActimeMQ使用者,它需要javax.jms.ObjectMessage格式的消息。 此消息pojo有5個字符串元素。將JSON消息轉換爲ActiveMq中的javax.jms.ObjectMessage

現在我正在嘗試在NodeJs中爲此使用者編寫消息生產者。 我使用stompit模塊

我當前的代碼的NodeJS是

stompit.connect(connectOptions, function(error, client) { 

if (error) { 
    console.log('connect error ' + error.message); 
    return; 
} else { 
    console.log("connected"); 
} 

var sendHeaders = { 
    'destination': '/queue/test', 

    'transformation': 'jms-object-json' 
}; 
var msg = new Object(); 
msg.val1 = "12"; 
msg.val2 = "test"; 
msg.val3 = "1"; 
msg.val4 = "1"; 
msg.val5 = "Y"; 
var frame = client.send(sendHeaders); 
frame.write(JSON.stringify(msg)); 
frame.end(); 

}); Java的消費者能夠得到的消息卻引發異常

org.apache.activemq.command.ActiveMQTextMessage不能轉換到javax.jms.ObjectMessage

我從ActiveMQ的閱讀page它說,

目前的ActiveMQ附帶了可轉換XML/JSON文本到Java對象的變壓器,但你可以添加自己的變壓器以及

我不太瞭解如何轉換數據的這部分。

我在apache-activemq-5.15.0 \ lib中添加了xstream-1.4.10.jar和jettison-1.3.8.jar並重新啓動了ActiveMq服務器。 但我仍然在消費者中遇到錯誤。 此外,在控制檯的ActiveMQ - >隊列 - >郵件屬性,它顯示了轉型錯誤

請讓我知道我可以在到達消費者之前

回答

0

有此ActiveMQTextMessage類型javax.jms.ObjectMessage轉換不是ActiveMQ中的變換器,它將任何隨機的JSON字符串轉換爲ObjectMessages,你必須寫你自己的來處理你發送的任何格式。 ActiveMQ中的轉換器將從JSON轉換一些基本的Map類型,但它很棘手,不一定可靠。你最好是自己處理TextMessage並用JSON做一些有意義的事情。

+0

這個轉換'jms-object-json'做了什麼呢?在activemq網站中,「ActiveMQ帶有一個可以將XML/JSON文本轉換爲Java對象的轉換器」的含義是什麼意思? – Sravan

0

ActiveMQTextMessage和ObjectMessage是不同的,它們不能互相轉換。

從ActiveMQTextMessage,你可以得到真正的消息內容作爲一個字符串,然後你必須將它自己轉換爲json對象。