2014-02-28 302 views
2

我正在使用駱駝與JMS。我有一個路由,它只是將jaxb註釋的java對象放在mq上。 java對象沒有實現可串行化,它只是有「serialVersionUID」。駱駝路由自動將序列化對象轉換爲xml

問題是,對象被轉換爲XML並且目標隊列具有MQSTR類型的XML消息。這是默認行爲嗎?我們是否應該依靠它來一直這樣做?請注意,我們沒有使用任何編號或從java dsl解組,並且如果我們從pom.xml中刪除jaxb依賴項,它不會被轉換爲xml。

我的路線是這樣的普通的香草。

from("someRoute") 
.setExchangePattern(ExchangePattern.InOnly) 
.doTry().processRef("processor") 
    .inOnly("destinationQueue") 
.doCatch(Exception.class) 
    .to("errorQueue"); 

處理器填充jaxb類並將其設置爲body。我的處理器代碼是這樣的

JaxbClass message = mapper.mapHL7ToXML(hl7Message);   
exchange.getIn().setBody(message) ; 

我目前使用這個作爲依賴在POM JAXB。

<dependency> 
    <groupId>org.apache.camel</groupId> 
    <artifactId>camel-jaxb</artifactId> 
    <version>2.10.3</version> 
</dependency> 

回答

3

閱讀關於JMS及其支持的消息類型。由於你的java對象不是可序列化的,所以它不能使用它,然後使用文本消息,在發送之前將對象轉換爲文本消息。

您可以使用jmsMessageType選項告訴Camel您想要哪種JMS類型。 http://camel.apache.org/jms

在camel-jaxb中有一個類型轉換器,它可以將已註釋爲JAXB的java對象轉換爲XML,從而在您的用例中發生了什麼。