2013-10-20 35 views
1

我的需求是從web應用程序接收消息一個json對象,並將它(Json對象)路由到另一個web應用程序,我正在使用駱駝來達到這個目的,一個非常簡單的過程,現在給我的不眠之夜,我的駱駝路線如下給出無法發送消息到使用駱駝的外部Web應用程序

    <camel:route> 
     <camel:from uri="cxfrs://bean://lmrServer" /> 
     <camel:to uri="log:output?showAll=true"/> 
      <setHeader headerName="CamelHttpMethod"> 
     <constant>POST</constant> 
     </setHeader> 
    <camel:to uri="cxfrs:http://localhost:8080/RESTfulExample/rest/message"/> 

現在,下面是我的錯誤堆棧,在那裏我可以看到在郵件正文中的JSON對象,可一些請讓我知道Iam錯了,這將有很大的幫助..提前感謝..

[    qtp177816476-20] output       INFO Exchange[I 
d:ID-UKCNU1161RK1-53103-1382261880815-0-1, ExchangePattern:InOut, Properties:{Ca 
melToEndpoint=log://output?showAll=true, CamelCreatedTimestamp=Sun Oct 20 10:38: 
32 BST 2013}, Headers:{breadcrumbId=ID-UKCNU1161RK1-53103-1382261880815-0-2, Cam 
elHttpPath=/lmr/register, CamelAcceptContentType=*/*, CamelCxfRsOperationResourc 
eInfoStack=[[email protected]], CamelHttp 
Uri=/jkdlrn/lmr/register, connection=keep-alive, content-type=application/json, 
Host=localhost:8081, Content-Length=67, CamelCxfRsResponseGenericType=void, Came 
lHttpCharacterEncoding=ISO-8859-1, CamelCxfMessage=org.apache.cxf.message.XMLMes 
[email protected], CamelHttpMethod=POST, User-Agent=Apache-HttpClient/4.2.5 (java 1. 
5), CamelCxfRsResponseClass=void, operationName=register}, BodyType:org.apache.c 
xf.message.MessageContentsList, Body:[MemberApplication [name=xyz, organization= 
avc, nic=xyz, employeeId=5920]], Out: null] 
[    qtp177816476-20] DefaultErrorHandler   ERROR Failed del 
ivery for (MessageId: ID-UKCNU1161RK1-53103-1382261880815-0-2 on ExchangeId: ID- 
UKCNU1161RK1-53103-1382261880815-0-1). Exhausted after delivery attempt: 1 caugh 
t: org.apache.camel.CamelExecutionException: Exception occurred during execution 
on the exchange: Exchange[Message: [MemberApplication [name=xyz, organization=a 
vc, nic=xyz, employeeId=5920]]] 
org.apache.camel.CamelExecutionException: Exception occurred during execution on 
the exchange: Exchange[Message: [MemberApplication [name=xyz, organization=avc, 
nic=xyz, employeeId=5920]]] 
     at org.apache.camel.util.ObjectHelper.wrapCamelExecutionException(Object 
Helper.java:1287)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.impl.DefaultExchange.setException(DefaultExchange.ja 
va:282)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncP 
rocessorBridge.process(AsyncProcessorConverterHelper.java:64)[camel-core-2.10.3. 
jar:2.10.3] 
     at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelp 
er.java:73)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProc 
essor.java:122)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.j 
ava:298)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:1 
17)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelp 
er.java:73)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.DelegateAsyncProcessor.processNext(Delegat 
eAsyncProcessor.java:99)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsy 
ncProcessor.java:90)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.management.InstrumentationProcessor.process(Instrume 
ntationProcessor.java:73)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelp 
er.java:73)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.DelegateAsyncProcessor.processNext(Delegat 
eAsyncProcessor.java:99)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsy 
ncProcessor.java:90)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.interceptor.TraceInterceptor.process(Trace 
Interceptor.java:91)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelp 
er.java:73)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler 
(RedeliveryErrorHandler.java:334)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryE 
rrorHandler.java:220)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.RouteContextProcessor.processNext(RouteCon 
textProcessor.java:45)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsy 
ncProcessor.java:90)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.interceptor.DefaultChannel.process(Default 
Channel.java:303)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelp 
er.java:73)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.Pipeline.process(Pipeline.java:117)[camel- 
core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)[camel-c 
ore-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.RouteContextProcessor.processNext(RouteCon 
textProcessor.java:45)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsy 
ncProcessor.java:90)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWor 
kProcessor.java:150)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProc 
essor.java:117)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.RouteInflightRepositoryProcessor.processNe 
xt(RouteInflightRepositoryProcessor.java:48)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsy 
ncProcessor.java:90)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelp 
er.java:73)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.DelegateAsyncProcessor.processNext(Delegat 
eAsyncProcessor.java:99)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsy 
ncProcessor.java:90)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.management.InstrumentationProcessor.process(Instrume 
ntationProcessor.java:73)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.component.cxf.jaxrs.CxfRsInvoker.asyncInvoke(CxfRsIn 
voker.java:87)[camel-cxf-2.10.3.jar:2.10.3] 
     at org.apache.camel.component.cxf.jaxrs.CxfRsInvoker.performInvocation(C 
xfRsInvoker.java:57)[camel-cxf-2.10.3.jar:2.10.3] 
     at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker 
.java:89)[cxf-rt-core-2.5.0.jar:2.5.0] 
     at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:166)[cxf-r 
t-frontend-jaxrs-2.5.0.jar:2.5.0] 
     at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:93)[cxf-rt 
-frontend-jaxrs-2.5.0.jar:2.5.0] 
     at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInv 
okerInterceptor.java:58)[cxf-rt-core-2.5.0.jar:2.5.0] 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:47 
1)[:1.7.0_25] 
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)[:1 
.7.0_25] 
     at java.util.concurrent.FutureTask.run(FutureTask.java:166)[:1.7.0_25] 
     at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecu 
tor.java:37)[cxf-rt-core-2.5.0.jar:2.5.0] 
     at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(Se 
rviceInvokerInterceptor.java:106)[cxf-rt-core-2.5.0.jar:2.5.0] 
     at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseIntercept 
orChain.java:263)[cxf-api-2.5.0.jar:2.5.0] 
     at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainIniti 
ationObserver.java:123)[cxf-rt-core-2.5.0.jar:2.5.0] 
     at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceReque 
st(JettyHTTPDestination.java:323)[cxf-rt-transports-http-jetty-2.5.0.jar:2.5.0] 
     at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(Je 
ttyHTTPDestination.java:289)[cxf-rt-transports-http-jetty-2.5.0.jar:2.5.0] 
     at org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTP 
Handler.java:72)[cxf-rt-transports-http-jetty-2.5.0.jar:2.5.0] 
     at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandl 
er.java:943)[jetty-server-7.5.4.v20111024.jar:7.5.4.v20111024] 
     at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandle 
r.java:879)[jetty-server-7.5.4.v20111024.jar:7.5.4.v20111024] 
     at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.j 
ava:117)[jetty-server-7.5.4.v20111024.jar:7.5.4.v20111024] 
     at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(Cont 
extHandlerCollection.java:250)[jetty-server-7.5.4.v20111024.jar:7.5.4.v20111024] 

     at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper 
.java:110)[jetty-server-7.5.4.v20111024.jar:7.5.4.v20111024] 
     at org.eclipse.jetty.server.Server.handle(Server.java:349)[jetty-server- 
7.5.4.v20111024.jar:7.5.4.v20111024] 
     at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection. 
java:441)[jetty-server-7.5.4.v20111024.jar:7.5.4.v20111024] 
     at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpCo 
nnection.java:936)[jetty-server-7.5.4.v20111024.jar:7.5.4.v20111024] 
     at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:801)[jett 
y-http-7.5.4.v20111024.jar:7.5.4.v20111024] 
     at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:224) 
[jetty-http-7.5.4.v20111024.jar:7.5.4.v20111024] 
     at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnecti 
on.java:51)[jetty-server-7.5.4.v20111024.jar:7.5.4.v20111024] 
     at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEn 
dPoint.java:586)[jetty-io-7.5.4.v20111024.jar:7.5.4.v20111024] 
     at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEnd 
Point.java:44)[jetty-io-7.5.4.v20111024.jar:7.5.4.v20111024] 
     at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPoo 
l.java:598)[jetty-util-7.5.4.v20111024.jar:7.5.4.v20111024] 
     at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool 
.java:533)[jetty-util-7.5.4.v20111024.jar:7.5.4.v20111024] 
     at java.lang.Thread.run(Thread.java:724)[:1.7.0_25] 
[    qtp177816476-20] WebApplicationExceptionMapper WARN WebApplica 
tionException has been caught : org/apache/cxf/service/factory/ReflectionService 
FactoryBean 

我有它,因爲罐子所以下面的感覺是我的pom.xml

<properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <camel.version>2.10.3</camel.version> 
     <json.version>1.8.5</json.version> 
     <cxf.version>2.5.0</cxf.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-core</artifactId> 
      <version>${camel.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-spring</artifactId> 
      <version>${camel.version}</version> 
     </dependency> 


     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-jetty</artifactId> 
      <version>${camel.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-cxf</artifactId> 
      <version>${camel.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-script</artifactId> 
      <version>${camel.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-jaxb</artifactId> 
      <version>${camel.version}</version> 
     </dependency> 

<dependency> 
    <groupId>org.apache.camel</groupId> 
    <artifactId>camel-cache</artifactId> 
    <version>2.12.1</version> 
</dependency> 

     <!-- JSON --> 
    <dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-mapper-asl</artifactId> 
      <version>${json.version}</version> 
     </dependency> 
     <dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-jaxrs</artifactId> 
    <version>${json.version}</version> 
</dependency> 



     <!-- CXF --> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-frontend-jaxrs</artifactId> 
      <version>${cxf.version}</version> 
     </dependency> 
      <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-transports-http-jetty</artifactId> 
      <version>${cxf.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-ws-policy</artifactId> 
      <version>${cxf.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-ws-addr</artifactId> 
      <version>${cxf.version}</version> 
     </dependency> 

     <!-- logging --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.6.6</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>1.6.6</version> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.17</version> 
     </dependency> 

     <!-- testing --> 
     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-test-spring</artifactId> 
      <version>2.10.3</version> 
      <scope>test</scope> 
     </dependency> 


    </dependencies> 

    <build> 
     <defaultGoal>install</defaultGoal> 

     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.5.1</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>2.4.3</version> 
       <configuration> 
        <encoding>UTF-8</encoding> 
       </configuration> 
      </plugin> 

      <!-- allows the route to be ran via 'mvn camel:run' --> 
      <plugin> 
       <groupId>org.apache.camel</groupId> 
       <artifactId>camel-maven-plugin</artifactId> 
       <version>2.10.3</version> 
      </plugin> 
      <!-- -jetty --> 
<plugin> 
      <groupId>org.mortbay.jetty</groupId> 
      <artifactId>jetty-maven-plugin</artifactId> 
      <version>${camel.version}</version> 
      <configuration> 
       <connectors> 
       <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"> 
        <port>8081</port> 
       </connector> 
       </connectors> 
       <stopPort>18080</stopPort> 
      </configuration> 
      </plugin> 

     </plugins> 
    </build> 

</project> 

好了,現在@Pith我做你所建議的修改,現在它拋出下面的錯誤

el 2.10.3 (CamelContext: camel-1) started in 0.498 seconds 
[    qtp1431523121-14] output       INFO Exchange[E 
xchangePattern:InOut, BodyType:org.apache.cxf.message.MessageContentsList, Body: 
[{"name":"xyz", "organization":"avc", "nic":"xyz", "employeeId":"5920"}]] 
[    qtp1431523121-14] BusApplicationContext   INFO Refreshing 
[email protected]: startup date [Tue Oct 
22 15:46:42 BST 2013]; parent: org.springframework.context.support.ClassPathXml 
[email protected] 
[    qtp1431523121-14] DefaultErrorHandler   ERROR Failed del 
ivery for (MessageId: ID-UKCNU1161RK1-52360-1382453193775-0-2 on ExchangeId: ID- 
UKCNU1161RK1-52360-1382453193775-0-1). Exhausted after delivery attempt: 1 caugh 
t: java.lang.ClassCastException: java.util.ArrayList cannot be cast to org.apach 
e.cxf.message.MessageContentsList 
java.lang.ClassCastException: java.util.ArrayList cannot be cast to org.apache.c 
xf.message.MessageContentsList 
     at org.apache.camel.component.cxf.jaxrs.DefaultCxfRsBinding.bindCamelMes 
sageBodyToRequestBody(DefaultCxfRsBinding.java:166)[camel-cxf-2.10.3.jar:2.10.3] 

     at org.apache.camel.component.cxf.jaxrs.CxfRsProducer.invokeHttpClient(C 
xfRsProducer.java:143)[camel-cxf-2.10.3.jar:2.10.3] 
     at org.apache.camel.component.cxf.jaxrs.CxfRsProducer.process(CxfRsProdu 
cer.java:87)[camel-cxf-2.10.3.jar:2.10.3] 
     at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncP 
rocessorBridge.process(AsyncProcessorConverterHelper.java:61)[camel-core-2.10.3. 
jar:2.10.3] 
     at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelp 
er.java:73)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProc 
essor.java:122)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.j 
ava:298)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:1 
17)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelp 
er.java:73)[camel-core-2.10.3.jar:2.10.3] 
     at org.apache.camel.processor.DelegateAsyncProcessor.processNext(Delegat 
我做了

變化,我的駱駝-context是低於

<dataFormats> 
     <json library="Jackson" unmarshalTypeName="org.payment.camel.example.MemberApplication" id="jack"/> 
    </dataFormats> 

MemberApplication只是一個POJO類實現Serializable..Can有人指出我在哪裏,我錯了。

回答

0

交換的身體包含一個對象

BodyType:org.apache.cxf.message.MessageContentsList, Body:[MemberApplication [name=xyz, organization=avc, nic=xyz, employeeId=5920]] 

難道不該被髮送到

<camel:to uri="cxfrs:http://localhost:8080/RESTfulExample/rest/message"/> 
+0

感謝您的回覆,我的要求是將我收到的json對象發送給外部Web應用程序,是否有任何方法可以執行此操作。 – Sayan

0

之前轉換成JSON如果您想發送JSON,你必須馬歇爾你的對象之前。

你可以這樣說:

<dataFormats> 
    <!-- here we define a Json data format with the id jack and that it should use the TestPojo as the class type when 
     doing unmarshal. The unmarshalTypeName is optional, if not provided Camel will use a Map as the type --> 
    <json id="jack" library="Jackson" unmarshalTypeName="org.apache.camel.component.jackson.TestPojo"/> 
</dataFormats> 

<camel:route> 
    <camel:from uri="cxfrs://bean://lmrServer" /> 
     <camel:to uri="log:output?showAll=true"/> 
      <setHeader headerName="CamelHttpMethod"> 
     <constant>POST</constant> 
     </setHeader> 
    <camel:marshal ref="jack"/> 
    <camel:to uri="cxfrs:http://localhost:8080/RESTfulExample/rest/message"/> 
</camel:route> 

看到該文檔,瞭解詳情:camel-json doc

相關問題