2015-06-03 2 views
0

У меня есть общий маршрут верблюда, который слушает запрос CXF: Bean (SOAP) с помощью DataFormat: POJO.Camel Multicast; Direct и AMQ

То, что я хочу, чтобы этот маршрут выполнял, - это многоадресный входящий обмен в AMQ JMS Queue, который будет потребляться другим внутренним маршрутом в более поздней точке, а другая конечная точка является прямой: конечная точка, которая будет использоваться для ответа SOAP Сообщение говоря, т.е. "Success"

Однако, я получаю следующее сообщение об ошибке с StackTrace:

015-06-03 16:56:49.645 INFO 4992 --- [qtp110495750-79] XxToYyyAsynchronizerRoute    : An error has occurred. java.lang.RuntimeException: xxx.zzz.yyy.xx_to_zzz.RequestType 
at org.apache.activemq.command.ActiveMQObjectMessage.storeContent(ActiveMQObjectMessage.java:118) 
at org.apache.activemq.command.ActiveMQObjectMessage.setObject(ActiveMQObjectMessage.java:169) 
at org.apache.camel.component.jms.JmsBinding.createJmsMessageForType(JmsBinding.java:561) 
at org.apache.camel.component.jms.JmsBinding.createJmsMessage(JmsBinding.java:473) 
at org.apache.camel.component.jms.JmsBinding.makeJmsMessage(JmsBinding.java:289) 
at org.apache.camel.component.jms.JmsProducer$2.createMessage(JmsProducer.java:297) 
at org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.doSendToDestination(JmsConfiguration.java:274) 
at org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.access$100(JmsConfiguration.java:217) 
at org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate$1.doInJms(JmsConfiguration.java:231) 
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:493) 
at org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.send(JmsConfiguration.java:228) 
at org.apache.camel.component.jms.JmsProducer.doSend(JmsProducer.java:431) 
at org.apache.camel.component.jms.JmsProducer.processInOnly(JmsProducer.java:385) 
at org.apache.camel.component.jms.JmsProducer.process(JmsProducer.java:153) 
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:129) 
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) 
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:448) 
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191) 
at org.apache.camel.processor.Pipeline.process(Pipeline.java:118) 
at org.apache.camel.processor.Pipeline.process(Pipeline.java:80) 
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191) 
at org.apache.camel.component.cxf.CxfConsumer$1.asyncInvoke(CxfConsumer.java:95) 
at org.apache.camel.component.cxf.CxfConsumer$1.invoke(CxfConsumer.java:75) 
at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at org.apache.cxf.interceptor.ServiceInvokerInterceptor$2.run(ServiceInvokerInterceptor.java:126) 
at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37) 
at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:131) 
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) 
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) 
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:251) 
at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:234) 
at org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:70) 
at org.eclipse.jetty.server.handler.ContextHandler.__doHandle(ContextHandler.java:1129) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1065) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
at org.eclipse.jetty.server.Server.handle(Server.java:497) 
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) 
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) 
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 
at java.lang.Thread.run(Thread.java:745) 

Мой маршрут определяют согласно ниже:

 onException(Exception.class) 
      .handled(true) 
      .log(LoggingLevel.INFO, "An error has occurred. ${exception.stacktrace}"); 

    from("{{xyz.route.zzz.soap.endpoint}}") 
     .routeId(xx_TO_zz_ROUTE_ID) 
     .log(LoggingLevel.INFO, "Placing messages into generic queue!") 
     .multicast().parallelProcessing().to("{{xxx.yy.to.zzz.jms.queue}}", "{{aaaa.xxx.generic.route}}"); 
} 

Для тестирования, если я удалю QueueEndpoint и только отправлю его в GenericRoute, я получаю ответ SOAP с «SUCCESS». Я подозрительно, что я не использую многоадресную рассылку должным образом или что AMQ (JMS) Queue не работает с форматом данных POJO?

Помогите пожалуйста? : |

+0

Является ли ваш POJO сериализуемым? Вы можете отправить POJO через JMS, используя ObjectMessage как сообщение JMS (которое Camel сделает для вас), но он должен реализовать Serializable (Active MQ фактически разрешает несериализуемый Java-объект как сообщения, но только если вы используете VM-транспорт и если вы установите параметр для отключения сериализации объектов). –

+0

Так что, если одна из ваших конечных точек работает, а как насчет другой? Вы можете удалить многоадресную рассылку и просто отправить ее в очередь JMS и посмотреть, проходит ли она. Как уже отмечал предыдущий комментатор, вполне возможно, что ваш POJO не является сериализуемым. –

+0

Привет, нет, POJO не являются Serialiazable. Они автоматически генерируются с использованием инструмента wsdl2java. Есть ли работа вокруг этого, чтобы заставить его работать с non-serialiazable POJO. Я использую embeddedAMQ, который использует VM-транспорт btw. – dnzdlklc

ответ

0

Хорошо, поэтому я взял на себя инициативу от Cyaegha (Спасибо), и я сгенерировал POJO, используя wsdl2java, используя ответ ниже.

Solution for wsdl2java serialization

Используя эти POJO, который реализовать Serializable интерфейс теперь работает!

Счастливые времена! =)

Смежные вопросы