2016-04-28 12 views
0

RESTfulサービスを公開するためにcamel-cxfコンポーネントを使用してActivemqキューにJSONリクエストを送信しようとしました。以下は私のルートコードです: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

が表示されます。 私はラクダにとって全く新しいので、何が問題になるかも教えてください。あなたはActiveMQのにオブジェクトを送信する場合

+0

ログメッセージも本文を公開しません。 –

答えて

0

あなたはJMSコンポーネントを拡張ActiveMQのコンポーネント、用jmsMessageType =テキストオプションを使用する必要があります。

その後、ActiveMQキューにメッセージを配置するには、エラーがヒントしているので、オブジェクトをシリアライズ可能にする必要があります。

例では、cxfrsコンポーネントが交換を完了すると、本文はシリアル化できないMessageContentsListオブジェクトになります。あなたはここから行うことができます

2つのこと:

  1. 変更いくつかのcxfrsなbindingStyleとして構成シリアライズ可能なオブジェクトが
  2. 代わりに出力されるように、このような豆などの経路に別のコンポーネントを追加します。またはconvertBodyTo ActiveMQコンポーネントに送信する前にシリアル化可能オブジェクトを作成する

詳細については、http://camel.apache.org/bean.htmlおよびhttp://camel.apache.org/convertbodyto.htmlおよびhttp://camel.apache.org/cxfrs.htmlおよびhttp://camel.apache.org/jms.htmlを参照してください。

関連する問題