2016-04-28 12 views
0

Ich habe versucht, die JSON-Anfrage an die Activemq-Warteschlange zu senden, indem ich die camel-cxf-Komponente für die Offenlegung des RESTful-Dienstes verwendet habe. Unten ist mein Weg Code:Camel-cxf Anforderung von JSON an activemq

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

wo rsServer ausgesetzt der RESTful-Service ist.

<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> 

Auf Webservice ActiveMQ Aufruf tut Element in der Warteschlange empfangen, aber die Nachricht auf viewing:

javax.jms.JMSException: Körper von Inhalt zu bauen schlug fehl. Serialisierbare Klasse nicht zum Broker verfügbar. Grund: java.lang.ClassNotFoundException: org.apache.cxf.message.MessageContentsList

gezeigt. Bitte sagen Sie, was das Problem sein kann, da ich Kamel völlig neu bin.

+0

Protokollnachricht stellt auch keinen Textkörper frei. –

Antwort

0

Wenn Sie ein Objekt auf die ActiveMQ dann senden Sie die jmsMessageType = Text Option für die activemq Komponente verwenden müssen, die die jms Komponente erweitert.

Anschließend muss das Objekt serialisiert werden, um eine Nachricht in einer ActiveMQ-Warteschlange zu platzieren, da der Fehler Hinweise enthält.

In Ihrem Beispiel, sobald die Komponente cxfrs beendet wurde, ist der Austauschkörper ein MessageContentsList-Objekt, das möglicherweise nicht serialisierbar ist.

Zwei Dinge, die man von hier aus tun konnte:

  1. ändern einige cxfrs Konfigurationen wie bindingStyle, so dass ein serialisierbares Objekt ausgegeben statt
  2. eine andere Komponente auf die Route hinzufügen wie Bohne oder convertBodyTo zum Erstellen eines serialisierbaren Objekts vor dem Senden an die ActiveMQ-Komponente

Weitere Informationen finden Sie unter http://camel.apache.org/bean.html und http://camel.apache.org/convertbodyto.html und http://camel.apache.org/cxfrs.html und http://camel.apache.org/jms.html.