У меня есть приложение, написанное на верблюде 2.10.6, которое использует EIP aggregator
. Он получает в качестве входных 2 файлов: один заканчивается -information
, а другой заканчивается -report
. Я должен обрабатывать оба файла (отдельно), а после обработки я должен комбинировать (т. Е. aggregate
) оба вместе.Агрегатор верблюдов с корреляцией Выражение
Для этого я использую EIP aggregator
. Я определил маршруты, используя весенний DSL. У меня нет корреляционного выражения. То есть, мое выражение является константой true
.
<route>
<from uri="activemq:assemblingAll" />
<log message="\n---------->>> @ASSEMBLEALL" />
<aggregate strategyRef="myAggregator" completionSize="2">
<correlationExpression>
<constant>true</constant>
</correlationExpression>
<to uri="activemq:toBeValidated" />
</aggregate>
</route>
Я хотел бы коррелируют файлы, которые принадлежат вместе, то есть файлы с же префиксом (префиксом является строка перед тем-information
(соотв. .report
). Я считаю, что это будет е также можно, установив некоторый идентификатор в заголовке.
Моя проблема заключается в том, что я не знаю, как это сделать. до сих пор все мои попытки породившей org.apache.camel.CamelExchangeException: Invalid correlation key
.
Любой намек?
Заранее спасибо.
Мои маршруты (в упрощенном виде) выглядит следующим образом:
<camelContext xmlns="http://camel.apache.org/schema/spring">
<!-- switchOnFilename" -->
<route>
<from uri="file:/inputdir" />
<choice>
<when>
<simple>${header.CamelFileName} regex '.*-information$'</simple>
<log message="\n---------->>> -information" />
<to uri="activemq:information" />
</when>
<otherwise>
<!-- The default case -->
<log message="\n---------->>> DEFAULT CASE (*-report)" />
<to uri="activemq:report" />
</otherwise>
</choice>
</route>
<route>
<from uri="activemq:information" />
<bean ref="myExtractInformation" />
<to uri="xslt:ExtractInformation.xsl" />
<to uri="activemq:assemblingAll" />
</route>
<route>
<from uri="activemq:report" />
<bean ref="myExtractReports" />
<to uri="xslt:extractReports.xsl" />
<to uri="activemq:assemblingAll" />
</route>
<route>
<from uri="activemq:assemblingAll" />
<log message="\n---------->>> @ASSEMBLEALL" />
<aggregate strategyRef="myAggregator" completionSize="2">
<correlationExpression>
<constant>true</constant>
</correlationExpression>
<to uri="activemq:toBeValidated" />
</aggregate>
</route>
<route>
<from uri="activemq:toBeValidated" />
<doTry>
<to uri="validator:validator.xsd" />
<to uri="activemq:insertUpdateDB" />
<doCatch>
<exception>org.apache.camel.ValidationException</exception>
<log message="INVALID " />
<to uri="mock:invalid" />
</doCatch>
<doFinally>
<log message="Finalizer...." />
<to uri="mock:finally" />
<to uri="mock:invalid" />
</doFinally>
</doTry>
</route>
<route>
<from uri="activemq:insertUpdateDB" />
<setHeader headerName="CamelHttpMethod">
<constant>PUT</constant>
</setHeader>
<setHeader headerName="Content-Type" inheritErrorHandler="true" id="setHeader3">
<constant>application/xml</constant>
</setHeader>
<setHeader headerName="Content-Encoding">
<constant>UTF-8</constant>
</setHeader>
<to uri="http4://localhost:8181/rest/insertUpdateDB" />
</route>