2013-03-31 2 views
1

낙타 라우터에서 나는 아래 라우팅을 가지고 있습니다.낙타 : 라우팅 전에 출력 수정

from("jetty:http://localhost:9092?matchOnUriPrefix=true"). 
    to("http://server:9093/service1?bridgeEndpoint=true&throwExceptionOnFailure=false") 
    .to("http://server:9094/service2?bridgeEndpoint=true&throwExceptionOnFailure=false") 
    .to("log:output") 

위 라우팅이 정상적으로 작동합니다.

하지만 내 요구 사항은 service2로 보내기 전에 service1의 출력을 수정하는 것입니다. 내가 <x>abc</x>

을 얻고 경우처럼 나는

내가 프로세서를 사용하여 시도
<y><x>abc</x></y> 

로 변환해야하지만, 실제로는이 XML을 반환하는 동안은 널 (null)로 서비스 2의 exchange.getOut()를 얻는다.

가능하다면 누군가 도와 줄 수 있습니까? 질문이 명확하지 않은 경우 알려주십시오.

+0

프로세서 코드를 표시 할 수 있습니까? – techuser

+0

안녕하세요 @ 사용자 - soma, 다음은 내 프로세서 코드입니다. '.process (새 프로세서() { \t \t \t \t \t \t @Override \t \t \t 공개 무효 처리 (교환 교환) = exchange.getOut() {예외 \t \t \t \t 메시지를 발생; \t \t \t \t \t \t \t \t exchange.getOut(). setBody nvertIncomingRequestToOutgoingRequest (in.getBody (IncomingRequest.class)))); \t \t \t} –

답변

1

어디에서이 프로세서를 추가 할 것인지 잘 모르겠습니다. 프로세서의 메시지는 교환기의 메시지에서 사용할 수 있습니다. 나는 네가 메시지를 꺼내려고한다는 것을 알았다.

출력 메시지에 본문을 설정하면 다음 끝점 또는 프로세서의 메시지 교환에서 사용할 수 있으므로 교환기의 올바른 메시지를 가져와야합니다.

아래의 경로는 다른, 이해한다 질문에 프로세서와 함께 전체 경로를 붙여 구성원은 문제가 무엇인지 볼 수 modifyBody 수행하는 사용자 정의 방법이 될 것입니다

from("jetty:http://localhost:9092?matchOnUriPrefix=true") 
    .to("http://server:9093/service1?bridgeEndpoint=true&throwExceptionOnFailure=false"). 
     process(new Processor() { 
     public void process(Exchange exchange) throws Exception { 
      String body = exchange.getIn().getBody(String.class); 
      exchange.getOut().setBody(modifyBody(body); 
     } 
     }) 
    .to("http://server:9094/service2?bridgeEndpoint=true&throwExceptionOnFailure=false") 
    .to("log:output"); 

필요한 변환.