2013-05-15 4 views
1

Google은 낙타 경로 용 DSL에 몇 가지 문제가 있습니다.Apache Camel : DSL (Groovy 또는 Java)의 중첩 필터 (필터 ... 필터 ... 끝 ... 필터 ... 끝 ... 끝)

from("fromURI") 
     .filter().xpath('//entity[contains(@destinations, \'databasedestination\')]') 
      .setHeader("bodyTemp", simple('${body}')) 
      .filter().xpath('//entity[@objectType = \'objectType\']') 

       .filter().xpath('//entity[@command = \'add\']') 
        .convertBodyTo(com.foo.bar.Entity) 
        .bean(handler, "add") 
       .end() 
       .filter().xpath('//entity[@command = \'foo\']') 
        .convertBodyTo(com.foo.bar.Entity) 
        .bean(handler, "foo") 
       .end() 
       .filter().xpath('//entity[@command = \'bar\']') 
        .convertBodyTo(com.foo.bar.Entity) 
        .bean(handler, "bar") 
       .end() 

       .to("toURI") 
      .end() 
     .end() 

그러나 그 : 다음과 같이

위는 그루비 기반 RouteBuilder 안에 번역을 시도

<route id="myroute" > 
     <from uri="fromURI" /> 
     <filter> 
      <xpath>//entity[contains(@destinations, 'databasedestination')]</xpath> 
      <filter> 
       <xpath>//entity[@objectType = 'objectType']</xpath> 
       <camel:setHeader headerName="bodyTemp"> 
        <simple>${body}</simple> 
       </camel:setHeader> 
       <filter> 
        <xpath>//entity[@command = 'add']</xpath> 
        <convertBodyTo type="com.foo.bar.Entity" /> 
        <bean ref="handler" method="add" /> 
       </filter> 
       <filter> 
        <xpath>//entity[@command = 'foo']</xpath> 
        <convertBodyTo type="com.foo.bar.Entity" /> 
        <bean ref="handler" method="foo" /> 
       </filter> 
       <filter> 
        <xpath>//entity[@command = 'bar']</xpath> 
        <convertBodyTo type="com.foo.bar.Entity" /> 
        <bean ref="handler" method="bar" /> 
       </filter> 
       <to uri="toURI" />  
      </filter> 
     </filter> 
    </route> 
다음 XML 그루비로 구성 (또는 JAVA) DSL을 번역 할 수없는 것 같다 분명히 작동하지 않습니다. 메시지와 함께 javax.xml.xpath.XPathExpressionException을 얻습니다. Invalid xpath: //entity[@command = 'foo']

해당 스택 추적도 참조하십시오.

 
    ->> 814 | doInEvaluateAs  in org.apache.camel.builder.xml.XPathBuilder 
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
    | 697 | evaluateAs   in  '' 
    | 139 | matches . . . . . . in  '' 
    |  47 | process    in org.apache.camel.processor.FilterProcessor 
    |  73 | process . . . . . . in org.apache.camel.util.AsyncProcessorHelper 
    |  99 | processNext   in org.apache.camel.processor.DelegateAsyncProcessor 
    |  90 | process . . . . . . in  '' 
    |  73 | process    in org.apache.camel.management.InstrumentationProcessor 
    |  99 | processNext . . . . in org.apache.camel.processor.DelegateAsyncProcessor 
    |  90 | process    in  '' 
    |  91 | process . . . . . . in    org.apache.camel.processor.interceptor.TraceInterceptor 
    |  73 | process    in org.apache.camel.util.AsyncProcessorHelper 
    | 330 | processErrorHandler in org.apache.camel.processor.RedeliveryErrorHandler 
    | 220 | process    in  '' 
    |  45 | processNext . . . . in org.apache.camel.processor.RouteContextProcessor 
    |  90 | process    in org.apache.camel.processor.DelegateAsyncProcessor 
    | 303 | process . . . . . . in org.apache.camel.processor.interceptor.DefaultChannel 
    |  73 | process    in org.apache.camel.util.AsyncProcessorHelper 
    | 117 | process . . . . . . in org.apache.camel.processor.Pipeline 
    |  80 | process    in  '' 
    |  45 | processNext . . . . in org.apache.camel.processor.RouteContextProcessor 
    |  90 | process    in org.apache.camel.processor.DelegateAsyncProcessor 
    | 150 | processAsync . . . in org.apache.camel.processor.UnitOfWorkProcessor 
    | 117 | process    in  '' 
    |  48 | processNext . . . . in  org.apache.camel.processor.RouteInflightRepositoryProcessor 
    |  90 | process    in org.apache.camel.processor.DelegateAsyncProcessor 
    |  73 | process . . . . . . in org.apache.camel.util.AsyncProcessorHelper 
    |  99 | processNext   in org.apache.camel.processor.DelegateAsyncProcessor 
    |  90 | process . . . . . . in  '' 
    |  73 | process    in org.apache.camel.management.InstrumentationProcessor 
    |  99 | process . . . . . . in org.apache.camel.util.AsyncProcessorHelper 
    |  86 | process    in org.apache.camel.processor.DelegateAsyncProcessor 
    | 105 | onMessage . . . . . in org.apache.camel.component.jms.EndpointMessageListener 
    | 1110 | runWorker   in java.util.concurrent.ThreadPoolExecutor 
    | 603 | run . . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker 
    ^ 722 | run     in java.lang.Thread 
    Caused by XPathExpressionException: null 
    ->> 200 | evaluate   in  com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl 
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
    | 800 | doInEvaluateAs  in org.apache.camel.builder.xml.XPathBuilder 
    | 697 | evaluateAs . . . . in  '' 
    | 139 | matches    in  '' 
    |  47 | process . . . . . . in org.apache.camel.processor.FilterProcessor 
    |  73 | process    in org.apache.camel.util.AsyncProcessorHelper 
    |  99 | processNext . . . . in org.apache.camel.processor.DelegateAsyncProcessor 
    |  90 | process    in  '' 
    |  73 | process . . . . . . in org.apache.camel.management.InstrumentationProcessor 
    |  99 | processNext   in org.apache.camel.processor.DelegateAsyncProcessor 
    |  90 | process . . . . . . in  '' 
    |  91 | process    in org.apache.camel.processor.interceptor.TraceInterceptor 
    |  73 | process . . . . . . in org.apache.camel.util.AsyncProcessorHelper 
    | 330 | processErrorHandler in org.apache.camel.processor.RedeliveryErrorHandler 
    | 220 | process . . . . . . in  '' 
    |  45 | processNext   in org.apache.camel.processor.RouteContextProcessor 
    |  90 | process . . . . . . in org.apache.camel.processor.DelegateAsyncProcessor 
    | 303 | process    in org.apache.camel.processor.interceptor.DefaultChannel 
    |  73 | process . . . . . . in org.apache.camel.util.AsyncProcessorHelper 
    | 117 | process    in org.apache.camel.processor.Pipeline 
    |  80 | process . . . . . . in  '' 
    |  45 | processNext   in org.apache.camel.processor.RouteContextProcessor 
    |  90 | process . . . . . . in org.apache.camel.processor.DelegateAsyncProcessor 
    | 150 | processAsync  in org.apache.camel.processor.UnitOfWorkProcessor 
    | 117 | process . . . . . . in  '' 
    |  48 | processNext   in  org.apache.camel.processor.RouteInflightRepositoryProcessor 
    |  90 | process . . . . . . in org.apache.camel.processor.DelegateAsyncProcessor 
    |  73 | process    in org.apache.camel.util.AsyncProcessorHelper 
    |  99 | processNext . . . . in org.apache.camel.processor.DelegateAsyncProcessor 
    |  90 | process    in  '' 
    |  73 | process . . . . . . in org.apache.camel.management.InstrumentationProcessor 
    |  99 | process    in org.apache.camel.util.AsyncProcessorHelper 
    |  86 | process . . . . . . in org.apache.camel.processor.DelegateAsyncProcessor 
    | 105 | onMessage   in  org.apache.camel.component.jms.EndpointMessageListener 
    | 1110 | runWorker . . . . . in java.util.concurrent.ThreadPoolExecutor 
    | 603 | run     in java.util.concurrent.ThreadPoolExecutor$Worker 
    ^ 722 | run . . . . . . . . in java.lang.Thread 
    Caused by TransformerException: Unable to evaluate expression using this context 
    ->> 367 | execute    in com.sun.org.apache.xpath.internal.XPath 
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
    | 129 | eval    in  com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl 
    | 105 | eval . . . . . . . in  '' 
    | 187 | evaluate   in  '' 
    | 800 | doInEvaluateAs . . in org.apache.camel.builder.xml.XPathBuilder 
    | 697 | evaluateAs   in  '' 
    | 139 | matches . . . . . . in  '' 
    |  47 | process    in org.apache.camel.processor.FilterProcessor 
    |  73 | process . . . . . . in org.apache.camel.util.AsyncProcessorHelper 
    |  99 | processNext   in org.apache.camel.processor.DelegateAsyncProcessor 
    |  90 | process . . . . . . in  '' 
    |  73 | process    in org.apache.camel.management.InstrumentationProcessor 
    |  99 | processNext . . . . in org.apache.camel.processor.DelegateAsyncProcessor 
    |  90 | process    in  '' 
    |  91 | process . . . . . . in  org.apache.camel.processor.interceptor.TraceInterceptor 
    |  73 | process    in org.apache.camel.util.AsyncProcessorHelper 
    | 330 | processErrorHandler in org.apache.camel.processor.RedeliveryErrorHandler 
    | 220 | process    `enter code here`in  '' 
    |  45 | processNext . . . . in org.apache.camel.processor.RouteContextProcessor 
    |  90 | process    in org.apache.camel.processor.DelegateAsyncProcessor 
    | 303 | process . . . . . . in org.apache.camel.processor.interceptor.DefaultChannel 
    |  73 | process    in org.apache.camel.util.AsyncProcessorHelper 
    | 117 | process . . . . . . in org.apache.camel.processor.Pipeline 
    |  80 | process    in  '' 
    |  45 | processNext . . . . in org.apache.camel.processor.RouteContextProcessor 
    |  90 | process    in org.apache.camel.processor.DelegateAsyncProcessor 
    | 150 | processAsync . . . in org.apache.camel.processor.UnitOfWorkProcessor 
    | 117 | process    in  '' 
    |  48 | processNext . . . . in  org.apache.camel.processor.RouteInflightRepositoryProcessor 
    |  90 | process    in org.apache.camel.processor.DelegateAsyncProcessor 
    |  73 | process . . . . . . in org.apache.camel.util.AsyncProcessorHelper 
    |  99 | processNext   in org.apache.camel.processor.DelegateAsyncProcessor 
    |  90 | process . . . . . . in  '' 
    |  73 | process    in org.apache.camel.management.InstrumentationProcessor 
    |  99 | process . . . . . . in org.apache.camel.util.AsyncProcessorHelper 
    |  86 | process    in org.apache.camel.processor.DelegateAsyncProcessor 
    | 105 | onMessage . . . . . in  org.apache.camel.component.jms.EndpointMessageListener 
    | 1110 | runWorker   in java.util.concurrent.ThreadPoolExecutor 
    | 603 | run . . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker 
    ^ 722 | run     in java.lang.Thread 
    Caused by RuntimeException: Unable to evaluate expression using this context 
    ->> 266 | setRoot    in com.sun.org.apache.xpath.internal.axes.NodeSequence 
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
    | 214 | execute    in  com.sun.org.apache.xpath.internal.axes.LocPathIterator 
    | 339 | execute . . . . . . in com.sun.org.apache.xpath.internal.XPath 
    | 129 | eval    in  com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl 
    | 105 | eval . . . . . . . in  '' 
    | 187 | evaluate   in  '' 
    | 800 | doInEvaluateAs . . in org.apache.camel.builder.xml.XPathBuilder 
    | 697 | evaluateAs   in  '' 
    | 139 | matches . . . . . . in  '' 
    |  47 | process    in org.apache.camel.processor.FilterProcessor 
    |  73 | process . . . . . . in org.apache.camel.util.AsyncProcessorHelper 
    |  99 | processNext   in org.apache.camel.processor.DelegateAsyncProcessor 
    |  90 | process . . . . . . in  '' 
    |  73 | process    in org.apache.camel.management.InstrumentationProcessor 
    |  99 | processNext . . . . in org.apache.camel.processor.DelegateAsyncProcessor 
    |  90 | process    in  '' 
    |  91 | process . . . . . . in  org.apache.camel.processor.interceptor.TraceInterceptor 
    |  73 | process    in org.apache.camel.util.AsyncProcessorHelper 
    | 330 | processErrorHandler in org.apache.camel.processor.RedeliveryErrorHandler 
    | 220 | process    in  '' 
    |  45 | processNext . . . . in org.apache.camel.processor.RouteContextProcessor 
    |  90 | process    in org.apache.camel.processor.DelegateAsyncProcessor 
    | 303 | process . . . . . . in org.apache.camel.processor.interceptor.DefaultChannel 
    |  73 | process    in org.apache.camel.util.AsyncProcessorHelper 
    | 117 | process . . . . . . in org.apache.camel.processor.Pipeline 
    |  80 | process    in  '' 
    |  45 | processNext . . . . in org.apache.camel.processor.RouteContextProcessor 
    |  90 | process    in org.apache.camel.processor.DelegateAsyncProcessor 
    | 150 | processAsync . . . in org.apache.camel.processor.UnitOfWorkProcessor 
    | 117 | process    in  '' 
    |  48 | processNext . . . . in  org.apache.camel.processor.RouteInflightRepositoryProcessor 
    |  90 | process    in org.apache.camel.processor.DelegateAsyncProcessor 
    |  73 | process . . . . . . in org.apache.camel.util.AsyncProcessorHelper 
    |  99 | processNext   in org.apache.camel.processor.DelegateAsyncProcessor 
    |  90 | process . . . . . . in  '' 
    |  73 | process    in org.apache.camel.management.InstrumentationProcessor 
    |  99 | process . . . . . . in org.apache.camel.util.AsyncProcessorHelper 
    |  86 | process    in org.apache.camel.processor.DelegateAsyncProcessor 
    | 105 | onMessage . . . . . in  org.apache.camel.component.jms.EndpointMessageListener 
    | 1110 | runWorker   in java.util.concurrent.ThreadPoolExecutor 
    | 603 | run . . `enter code here`. . . . . . in  java.util.concurrent.ThreadPoolExecutor$Worker 
    ^ 722 | run     in java.lang.Thread 

마르쿠스

답변

0

귀하의 코드가 선택 EIP를 활용, 콘텐츠 기반 라우터 더 맞는 것 같다 어떤 도움 주셔서 감사합니다.

대신 선택 문을 사용할 수 있습니까? http://camel.apache.org/content-based-router.html

+0

나는 이것이 표시된 시나리오에서 작동하지 않을 것이라고 생각합니다. 차라리 필터를 통해 문제를 해결하고 싶습니다. 필요하다고 생각합니다. 제 예제에서 실제로 잘못된 점을 설명해주십시오. –