Apache Camel распаковать, обработать и заполнить не завершается - PullRequest
1 голос
/ 03 мая 2019

Я пытаюсь обработать zip-файл, который содержит несколько файлов (все маленькие, поэтому работа с памятью не проблема), которые необходимо преобразовать и снова сжать вместе.

Мне удалось распаковать, преобразуйте файлы, но по какой-то причине сплиттер не завершает работу, только использование completionTimeout заставляет агрегатор создать окончательный zip-архив.

Вот маршрут:

<route id="ZipFile">
    <from uri="file:{{file.path.in}}?move=.done&amp;moveFailed=.error&amp;readLock=rename"/>

    <setProperty propertyName="OriginalZipName">
        <simple>${header.CamelFileName}</simple>
    </setProperty>

    <unmarshal>
        <zipFile usingIterator="true"/>
    </unmarshal>

    <split streaming="true">
        <simple>${body}</simple>

        <log message="************ CamelSplitComplete = ${property.CamelSplitComplete}"/>

        <to uri="direct:ProcessUnzippedFile"/>

        <setHeader headerName="CamelFileName">
            <simple>${property.OriginalZipName}</simple>
        </setHeader>

        <!-- Aggregate to zip -->
        <aggregate strategyRef="zipAggregationStrategy" eagerCheckCompletion="true">
            <correlationExpression>
                <constant>true</constant>
            </correlationExpression>
            <completionPredicate>
                <simple>${property.CamelSplitComplete}</simple>
            </completionPredicate>
            <setHeader headerName="CamelFileName">
                <simple>${property.OriginalZipName}</simple>
            </setHeader>
            <to uri="file://{{file.path.out}}"/>
        </aggregate>
    </split>

</route>

Есть идеи, в чем может быть проблема?

1 Ответ

2 голосов
/ 06 мая 2019

Camel Splitter имеет встроенный агрегатор, который делает его еще проще объединить разделенные сообщения обратно в одно исходящее сообщение

Необходимо определить стратегию агрегирования в определении разделения

<split strategyRef="zipAggregationStrategy">

Не пробовал это в XML, но в Java DSL это один из моих примеров, который делает именно это.

  .unmarshal(zipFile)
                .split(bodyAs(Iterator.class),new ZipAggregationStrategy(true,true))
                .streaming()
                .stopOnException()
                .to("direct:transform-ticket")
                .end();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...