2014-04-24 1 views
0

다른 대기열에 목록의 다른 요소를 보내는 낙타 경로를 작성하려고합니다.카멜에서 메시지 나누기

메시지 본문은 2 xml의 목록입니다. 예를 들면 :

<Cat> 
<Name>Cat1</Name> 
</Cat>, 
<Dog> 
<Name>Dog1</Name> 
</Dog> 

지금, 내가 즉 CAT1 부분이 queue1을 할 수있는 메시지와 다른 큐에 XML 즉 Dog1의 '개'부분의 '캣'부분을 보낼 필요가?

이것은 내가 가지고있는 경로이지만, 노력하지 않는 : 내가 잘못 여기서 뭐하는 거지에서

<route> 
    <from uri="jms:queue:InQueue" />   
    <choice> 
     <when> 
      <simple>${in.body} regex 'Cat'</simple> 
      <to uri="jms:queue:CatQueue" /> 
     </when> 
     <when> 
      <simple>${in.body} regex 'Dog'</simple> 
      <to uri="jms:queue:DogQueue" /> 
     </when> 
    </choice> 
</route> 

어떤 아이디어?

답변

2

먼저 , 토큰을 사용하여 목록을 분할해야합니다. 둘째, XPath 표현식을 사용하여 XML 부분을 구문 분석하고 해당 JMS 대기열로 메시지를 보내야합니다.

<route> 
    <from uri="jms:queue:InQueue" /> 
    <split> 
     <tokenize token=","/> 
     <log message="Working on split: ${body}" /> 
     <choice> 
      <when> 
       <xpath>/Cat</xpath> 
       <to uri="jms:queue:CatQueue" /> 
      </when> 
      <when> 
       <xpath>/Dog</xpath> 
       <to uri="jms:queue:DogQueue" /> 
      </when> 
     </choice> 
    </split> 
</route> 
+0

'Cat'xml은 cat 큐에 올바르게 라우팅됩니다. 하지만 Dog xml은 전혀 라우팅되지 않고 있습니다. 목록의 첫 번째 요소 (예 : 고양이)를 라우팅 한 다음 반환하는 것은 두 번째 요소 (개)에 전혀 신경을 쓰지 않습니다 .. – user1717230

+0

' Cat1, Dog1'을 입력 문자열로 사용하고 모든 것이 예상대로 작동했습니다. 당신은 당신의 로그 출력을 다음 봤어 :'분할에서 작업 : CAT1'와'분할에서 작업 : Dog1'를? –

+0

내 잘못 ... 나는 그것을 잘못 본 ... 그것은 작동 ... 고마워 ...하지만 XML에 네임 스페이스가 있다면 어때? 네임 스페이스에 대한 계정을 바꾸려면 어떻게해야합니까? 예를 들면 : <고양이의 xmlns = 'http://www.openapplications.org/oagis/9 "의 xmlns : LW ="http://www.org/oagis/9 "> CAT1 , <개의 xmlns =' http://www.openapplications.org/oagis/9 "xmlns : lw ="http://www.org/oagis/9 "> Dog1 user1717230