To handle exceptions within a split, your AggregationStrategy needs to
be written in such a way that it deals with Exceptions. See the
following for an example:
https://github.com/CamelCookbook/camel-cookbook-examples/blob/master/camel-cookbook-routing/src/main/java/org/camelcookbook/routing/multicast/ExceptionHandlingAggregationStrategy.java
If you don't, the splitting process will complete anyway, but the
exception will be thrown afterwards - never reaching the next processor
(in your case, "Check_New_Record"). See the documentation about
"stopOnException" here:
https://camel.apache.org/splitter.html
Jakub
On 11/12/15 08:27, Scisci wrote:
hi,
sorry for the delayed response.
I'm using camel version 2.6.0 and spring version 4.1.6.RELEASE.
This one of the routes
<camelContext id="XXX"
xmlns="http://camel.apache.org/schema/spring"
xmlns:ag_01="http://www.my.it/Accpos"
>
<propertyPlaceholder id="placeholder"
location="classpath:file.properties"/>
<route id="Accpos">
<from
uri="file:{{Path_In}}?fileName={{File_Name_Accpos}}&readLock=changed&readLockTimeout=10000&readLockCheckInterval=5000&move={{Backup}}"/>
<doTry>
<to uri="validator:classpath:Accpos.xsd"/>
<log message="Reciving ${file:name}"/>
<setHeader headerName="Tipo_Fondo"><xpath
resultType="java.lang.String">/ag_01:Accpos/ag_01:Tipo_Fondo/text()</xpath></setHeader>
<log message="Tipo_Fondo : ${header.Tipo_Fondo}"/>
<setHeader headerName="Data_Giro"><xpath
resultType="java.lang.String">/ag_01:Accpos/ag_01:Data_Giro/text()</xpath></setHeader>
<log message="Data_Giro : ${header.Data_Giro}"/>
<setHeader headerName="Numero_Record_Inviati"><xpath
resultType="java.lang.String">/ag_01:Accpos/ag_01:Items/@count</xpath></setHeader>
<log message="Numero_Record_Inviati :
${header.Numero_Record_Inviati}"/>
<setHeader
headerName="Tabella"><simple>${file:name}</simple></setHeader>
<log message="Tabella : ${header.Tabella}"/>
<setHeader
headerName="Numero_Items"><simple>0</simple></setHeader>
<log message="Numero_Items : ${header.Numero_Items}"/>
<process ref="Clean_Tables"/>
<split strategyRef="Item_Aggregator"
streaming="true">
<xtokenize>/ag_01:Accpos/ag_01:Items/ag_01:Item</xtokenize>
<to uri="direct:Convert_Accpos"/>
</split>
<process ref="Check_New_Record"/>
<to uri="direct:Mail_Info_Loading"/>
<doCatch>
<exception>org.apache.camel.ValidationException</exception>
<setHeader headerName="subject">
<simple>ERRORE - validazione - ACCPOS</simple>
</setHeader>
<setBody>
<simple>Errore nella validazione \r \n
${exception.message}</simple>
</setBody>
<to
uri="smtp://{{Mail_Server}}?from={{Sender}}&to={{Receivers_Error}}"/>
</doCatch>
</doTry>
</route>
<route id="Convert_Accpos"
errorHandlerRef="myDeadLetterErrorHandler_Accpos">
<from uri="direct:Convert_Accpos"/>
<unmarshal>
<jaxb contextPath="it.my.Risk_Files.Accpos"
partClass="it.my.Risk_Files.Accpos.ItemType" ignoreJAXBElement="true"/>
</unmarshal>
<convertBodyTo type="it.my.Risk_Files.Accpos.Accpos"/>
<to
uri="jpa:it.my.Risk_Files.Accpos.Accpos?usePersist=true"/>
</route>
....
<bean id="myDeadLetterErrorHandler_Accpos"
class="org.apache.camel.builder.DeadLetterChannelBuilder">
<property name="deadLetterUri"
value="jpa:it.my.Risk_Files.Accpos.Accpos_Error"/>
</bean>
if the last split throw an error, for example primary key violation, never
return after the deadletter error handler and don't execute process
Check_New_Record.
Thanks
Mirko
--
View this message in context:
http://camel.465427.n5.nabble.com/AggregatinStrategy-on-split-never-stop-tp5773905p5774985.html
Sent from the Camel - Users mailing list archive at Nabble.com.