发生异常并标记为已处理时,阻止Apache Camel pollenrich File端点删除文件

时间:2018-06-22 08:30:45

标签: apache-camel

我有一个过程,该过程获取XML消息,该消息必须被原始XML事务中列出的1个或多个其他文件充实后,才能提交给REST / SOAP api。

<route xmlns="http://camel.apache.org/schema/spring" customId="true" id="...">
    <from uri="jms:queue:job?transacted=true&amp;acceptMessagesWhileStopping=true&amp;concurrentConsumers=1&amp;errorHandlerLoggingLevel=INFO&amp;selector=..."/>
    <onException useOriginalMessage="true">
        <handled>
            <constant>true</constant>
        </handled>
        <redeliveryPolicy logStackTrace="false" maximumRedeliveries="0"/>
        <choice>
            <when>
                <expressionDefinition>true</expressionDefinition>
                <log loggingLevel="WARN" message="${file:onlyname} - Attachment missing, submitting job to delay queue!"/>
                <to uri="jms:queue:delay"/>
            </when>
            <otherwise>
                <log loggingLevel="WARN" message="${file:onlyname} - Attachment missing, submitting job to error queue!"/>
                <to uri="jms:queue:error"/>
            </otherwise>
        </choice>
    </onException>
    <unmarshal>
        <asn1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="dataFormat"/>
    </unmarshal>
    <loop>
        <simple>${exchangeProperty.attachmentFileList.size()}</simple>
            <pollEnrich aggregateOnException="false" cacheSize="5" timeout="8000">
                    <expressionDefinition/>
        </pollEnrich>
    </loop>
    <to uri="cxf://http://..."/>
</route>

我正在使用没有重新交付策略的队列,因此当列出的文件之一仍然丢失时,会发生异常,并将原始XML放入延迟队列。由于我正在使用事务,因此我不想让异常传播,因此我将异常设置为handled = true。但是,如果有例如2个附件,并且第一个附件可用,则将为第一个文件调用GenericFileDeleteProcessStrategy。我希望可以确认JMS事务,但是避免在不执行GenericFileDeleteProcessStrategy或删除过程的情况下删除文件。

0 个答案:

没有答案