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