Camel路由自动将序列化对象转换为xml

时间:2014-02-28 22:04:11

标签: java xml jaxb jms apache-camel

我正在使用JMS的驼峰。我有一个路由,它只是将jaxb annoted java对象放在mq上。 java对象没有实现serializable,它只有“serialVersionUID”。

问题是,对象转换为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 for jaxb的依赖。

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

1 个答案:

答案 0 :(得分:3)

了解JMS及其支持的消息类型。由于您的java对象不可序列化,因此无法使用它,然后回退以使用文本消息,在发送之前将对象转换为该消息。

您可以使用jmsMessageType选项告诉Camel您需要哪种JMS类型。 http://camel.apache.org/jms

在camel-jaxb中有一个类型转换器可以将已经JAXB注释的Java对象转换为XML,从而在用例中发生了什么。