2017-12-28 25 views
0

낙타에서 요청/응답 jms 소비자를 얻으려고합니다. 들어오는 메시지가 수신되었고 그 낙타가 응답을 보냈지 만 메시지는 마샬링되지 않습니다. 나는에서와 ActiveMQ를 모든 메시지를 마샬링하는 인터셉터를 사용하고Camel intercept/marshal jms reply

OsdrDataFormat osdrDataFormat = new OsdrDataFormat(); 

interceptFrom("activemq:*").unmarshal(osdrDataFormat); 
interceptSendToEndpoint("activemq:*").marshal(osdrDataFormat); 

이 (메시지를 마샬링 할 때 내가 JMSType을 채울 수 있도록 내가 JacksonDataFormat을 확장합니다.) 엔드 포인트 정상 편도

교환이 (예를 들어)

from("activemq:queue:test").bean(TestComponent.class, "test"); 
from("direct:test-input").to("activemq:queue:test"); 

작업 있지만 나는이 경로를 사용할 때

from("activemq:queue:test").bean(TestComponent.class, "test"); 

메시지를 JMSReplyTo 메시지와 함께 테스트 대기열로 보냅니다 (activemq 관리 페이지 사용). 낙타가 응답 메시지를 보냈지 만 json에 마샬링되지 않았 음을 알 수 있습니다.

marshal을 수동으로 추가해도 작동하지만 인터셉터를 사용하면 추상 RouteBuilder를 만들고 각 경로에 기본적으로 인터셉터를 추가 할 수 있습니다.

from("activemq:queue:test").bean(TestComponent.class, "test").marshal(osdrDataFormat); 

누구나 해결 방법을 알고 있습니까? 또는 activemq와의 모든 메시지가 마샬링되는지 확인하는 더 좋은 방법일까요?

이 스레드를 찾았 어 : Apache Camel inOut routes, out exchange marshaling/unmarshaling with jaxb 하지만 대답은 수동 마샬 러를 사용하는 것입니다.

답변

0

interceptSendToEndpoint은 Camel이 Camel 엔드 포인트에 메시지를 보낼 때만 사용됩니다. JMS 구성 요소가 내부적으로 일부 JMS 대상에 JMS 메시지를 보내는 경우가 아닙니다. 이건 같은게 아니야.

+0

(아주) 늦게 답변을 드려 죄송합니다. 수동 마샬링 및 비 마샬을 사용하는 것이 최선의 해결책이었습니다. 마샬링 전에 무언가를하고 싶습니다. –