2016-04-28 95 views
0

我一直在嘗試使用camel-cxf組件發送對Activemq隊列的JSON請求來公開RESTful服務。以下是我的路由代碼:Camel-cxf請求JSON到activemq

<route> 
    <from uri="cxfrs:bean:rsServer" /> 
    <log message="${body}"/> 
    <to uri="activemq:queue:testQueue" pattern="InOnly" /> 
</route> 

其中rsServer是RESTful服務公開的。

<cxf:rsServer id="rsServer" address="/services" 
     serviceClass="com.mayank.restservice.resource.RestfulResource"> 

    <cxf:providers> 
     <bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" /> 
     <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" /> 
    </cxf:providers> 
    <cxf:extensionMappings> 
     <entry key="xml" value="application/xml" /> 
     <entry key="json" value="application/json" /> 
    </cxf:extensionMappings> 

</cxf:rsServer> 

在調用Web服務的ActiveMQ確實在隊列中,但在查看郵件接收項目:

的javax.jms.JMSException:無法從內容構建體。不可用於經紀商的可序列化類。原因:java.lang.ClassNotFoundException:org.apache.cxf.message.MessageContentsList

顯示。 請告訴我可能是什麼問題,因爲我對駱駝完全陌生。

+0

日誌消息也不公開任何文本正文。 –

回答

0

如果要發送的對象的ActiveMQ的則可能需要使用jmsMessageType =文本選項爲的ActiveMQ部件,它擴展了JMS組件。

之後,要將消息放置到ActiveMQ隊列中,該對象需要可序列化,因爲錯誤在暗示。

在你的例子中,一旦cxfrs組件完成交換正文是一個MessageContentsList對象,它可能不是可序列化的。

兩件事情,你可以從這裏做:

  1. 改變一些cxfrs配置,例如bindingStyle,這樣一個序列化的對象是輸出,而不是
  2. 添加其他成分的途徑,例如convertBodyTo在發送到ActiveMQ組件之前創建可序列化對象

有關詳細信息,請參閱http://camel.apache.org/bean.htmlhttp://camel.apache.org/convertbodyto.htmlhttp://camel.apache.org/cxfrs.htmlhttp://camel.apache.org/jms.html