我正在使用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>
答案 0 :(得分:3)
了解JMS及其支持的消息类型。由于您的java对象不可序列化,因此无法使用它,然后回退以使用文本消息,在发送之前将对象转换为该消息。
您可以使用jmsMessageType选项告诉Camel您需要哪种JMS类型。 http://camel.apache.org/jms
在camel-jaxb中有一个类型转换器可以将已经JAXB注释的Java对象转换为XML,从而在用例中发生了什么。