我试图使用camel路由从队列中读取消息并将其发送到消息监听器的bean,但它以异常结束。难道我做错了什么。 我在activemq中序列化了对象
<bean class="com.herman.cxf.incident.ReportIncidentRequestConsumer"
id="requestConsumer" />
<camelContext id="camelContext-32616f27-d786-4ed8-9f75-2d208cd14b40"
trace="false" xmlns="http://camel.apache.org/schema/blueprint">
<route id="report_amq">
<from uri="activemq:queue:INCIDENT_REQUEST" />
<to uri="bean:requestConsumer" />
</route>
</camelContext>
消息列表器类:
public class ReportIncidentRequestConsumer implements MessageListener {
Logger _log = Logger.getLogger(ReportIncidentRequestConsumer.class);
@Override
public void onMessage(Message arg0) {
_log.info("================== IM HERE IN REQUEST CONSUMER ===============");
}
}
错误时抛出: 引起:javax.jms.JMSException:无法从内容构建正文。可序列化的类不可用于代理。原因:java.lang.ClassNotFoundException:Forbidden class org.apache.cxf.message.MessageContentsList!不信任此类被序列化为ObjectMessage有效负载。
答案 0 :(得分:1)
使用camel时,您不需要MessageListener来处理消息。
您可以使用Processor对邮件执行某些操作。
首先编写一个实现这样处理器的类......
public class MyProcessor implements Processor {
public void process(Exchange exchange) throws Exception {
// do something...
}
}
然后,您可以通过在Spring中声明bean来轻松地在路径中使用它,例如通过XML(或者在JNDI中注册它,如果这是您的注册表)
<bean id="myProcessor" class="com.acme.MyProcessor"/>
然后在Camel中你可以做到
from("activemq:myQueue").to("myProcessor");
答案 1 :(得分:1)
跳过在camel中处理ActiveMQ的不同方法,由于“不受信任的包”而引发了异常。 ActiveMQ使用可信包的列表,它可以序列化/反序列化对象(更多细节:http://activemq.apache.org/objectmessage.html)。 为了能够发送/接收您需要的对象,您需要作为ActiveMq客户端告诉您信任它们。以下是一些示例:https://github.com/apache/activemq/blob/master/activemq-camel/src/test/resources/org/apache/activemq/camel/jms-object-message.xml