You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by "Goyal, Arpit" <ar...@sap.com> on 2013/11/13 05:11:33 UTC
Try-Catch in choice-when
Hi All,
I am trying to use Try-Catch inside 'when' but not sure how to get it right. I am using BLUEPRINT DSL. Following is my route:
<camel:route>
<camel:from ref="Sender"/>
<camel:setHeader headerName="MyHeader">
<camel:constant>GOOD</camel:constant>
</camel:setHeader>
<camel:choice>
<camel:when>
<camel:doTry>
<camel:xpath>//MessageId = 'a'</camel:xpath>
<camel:to ref="Receiver1"/>
<camel:doCatch>
<camel:exception>org.apache.camel.builder.xml.InvalidXPathExpression</camel:exception>
<camel:to uri="log:TryCatchEval?level=INFO"/>
</camel:doCatch>
</camel:doTry>
</camel:when>
<camel:when>
<camel:simple>${header.MyHeader} == 'GOOD'</camel:simple>
<camel:to ref="Receiver_"/>
</camel:when>
<camel:otherwise/>
</camel:choice>
</camel:route>
Here the prefix camel stands for xmlns:camel=http://camel.apache.org/schema/blueprint
Basically the idea which we want to achieve is, in case my first condition fails (due to some exception), I want to execute the second condition and have hard restriction that I can't change my pattern of choice-when.
As per the camel-blueprint xsd (http://camel.apache.org/schema/blueprint/camel-blueprint-2.11.2.xsd), whenDefinition expects first element to be some language element and then allows Try-Catch. What if the language it-self throws exception? How can I prevent that?
Regards,
Arpit.
Re: Try-Catch in choice-when
Posted by Claus Ibsen <cl...@gmail.com>.
On Fri, Nov 15, 2013 at 5:13 AM, Goyal, Arpit <ar...@sap.com> wrote:
> Hi Claus,
>
> Tried two approach but neither of them worked for me (based out of the URL - http://camel.apache.org/exception-clause.html) What I need is when the first When fails, camel should continue to execute the second When. Could you let me know where I am going wrong?
>
You cannot have Camel fallback and pick a 2nd when, its just like if
.. else cannot do that
if a
....
try {
exception happens here
} catch (Exception e)
.. // you cannot either do this in java to catch an exception
here, and then continue in the 2nd if (eg else if b)
}
else if b
...
else if c
> Option 1: Defined the onException clause after the camel:xpath expression. Getting exception " OnException[[class org.apache.camel.builder.xml.InvalidXPathExpression] -> []] is not configured. "
>
> <camel:route>
>
> <camel:from ref="Sender"/>
> <camel:setHeader headerName="MyHeader">
> <camel:constant>GOOD</camel:constant>
> </camel:setHeader>
> <camel:choice>
>
> <camel:when>
> <camel:xpath>//MessageId = 'a'</camel:xpath>
>
> <camel:onException>
> <camel:exception>org.apache.camel.builder.xml.InvalidXPathExpression</camel:exception>
> <camel:continued><camel:constant>true</camel:constant></camel:continued>
> </camel:onException>
>
> <camel:to ref="Receiver1_"/>
> </camel:when>
>
> <camel:when>
> <camel:simple>${header.MyHeader} == 'GOOD'</camel:simple>
> <camel:to ref="Receiver_"/>
> </camel:when>
>
> <camel:otherwise/>
>
> </camel:choice>
> </camel:route>
>
> Option 2: Define the onException clause inside the camel context. Here two it doesn't work. After exception occurs, the processing stops successfully. Instead I need the second condition to be evaluated.
>
> <camel:camelContext id="TryCatchEval">
> <camel:onException>
> <camel:exception>org.apache.camel.builder.xml.InvalidXPathExpression</camel:exception>
> <camel:continued><camel:constant>true</camel:constant></camel:continued>
> </camel:onException>
>
> <camel:route>
>
> <camel:from ref="Sender"/>
>
> <camel:setHeader headerName="MyHeader">
> <camel:constant>GOOD</camel:constant>
> </camel:setHeader>
>
> <camel:choice>
>
> <camel:when>
> <camel:xpath>//MessageId = 'a'</camel:xpath>
> <camel:to ref="Receiver1_"/>
> </camel:when>
>
> <camel:when>
> <camel:simple>${header.MyHeader} == 'GOOD'</camel:simple>
> <camel:to ref="Receiver_"/>
> </camel:when>
>
> <camel:otherwise/>
>
> </camel:choice>
>
> </camel:route>
> </camel:camelContext>
>
> Regards,
> Arpit
> -----Original Message-----
> From: Claus Ibsen [mailto:claus.ibsen@gmail.com]
> Sent: Thursday, November 14, 2013 2:58 PM
> To: users@camel.apache.org
> Subject: Re: Try-Catch in choice-when
>
> Use <onException> instead of try .. catch as that is better.
>
> On Wed, Nov 13, 2013 at 2:15 PM, Goyal, Arpit <ar...@sap.com> wrote:
>> Any idea how can I achieve the following?
>>
>> -----Original Message-----
>> From: Goyal, Arpit [mailto:arpit.goyal@sap.com]
>> Sent: Wednesday, November 13, 2013 9:42 AM
>> To: users@camel.apache.org
>> Subject: Try-Catch in choice-when
>>
>> Hi All,
>>
>> I am trying to use Try-Catch inside 'when' but not sure how to get it right. I am using BLUEPRINT DSL. Following is my route:
>>
>> <camel:route>
>> <camel:from ref="Sender"/>
>>
>> <camel:setHeader headerName="MyHeader">
>> <camel:constant>GOOD</camel:constant>
>> </camel:setHeader>
>>
>> <camel:choice>
>> <camel:when>
>> <camel:doTry>
>> <camel:xpath>//MessageId = 'a'</camel:xpath>
>> <camel:to ref="Receiver1"/>
>> <camel:doCatch>
>> <camel:exception>org.apache.camel.builder.xml.InvalidXPathExpression</camel:exception>
>> <camel:to uri="log:TryCatchEval?level=INFO"/>
>> </camel:doCatch>
>> </camel:doTry>
>> </camel:when>
>> <camel:when>
>> <camel:simple>${header.MyHeader} == 'GOOD'</camel:simple>
>> <camel:to ref="Receiver_"/>
>> </camel:when>
>> <camel:otherwise/>
>> </camel:choice>
>> </camel:route>
>>
>> Here the prefix camel stands for xmlns:camel=http://camel.apache.org/schema/blueprint
>>
>> Basically the idea which we want to achieve is, in case my first condition fails (due to some exception), I want to execute the second condition and have hard restriction that I can't change my pattern of choice-when.
>>
>> As per the camel-blueprint xsd (http://camel.apache.org/schema/blueprint/camel-blueprint-2.11.2.xsd), whenDefinition expects first element to be some language element and then allows Try-Catch. What if the language it-self throws exception? How can I prevent that?
>>
>> Regards,
>> Arpit.
>
>
>
> --
> Claus Ibsen
> -----------------
> Red Hat, Inc.
> Email: cibsen@redhat.com
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen
--
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cibsen@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen
RE: Try-Catch in choice-when
Posted by "Goyal, Arpit" <ar...@sap.com>.
Hi Claus,
Tried two approach but neither of them worked for me (based out of the URL - http://camel.apache.org/exception-clause.html) What I need is when the first When fails, camel should continue to execute the second When. Could you let me know where I am going wrong?
Option 1: Defined the onException clause after the camel:xpath expression. Getting exception " OnException[[class org.apache.camel.builder.xml.InvalidXPathExpression] -> []] is not configured. "
<camel:route>
<camel:from ref="Sender"/>
<camel:setHeader headerName="MyHeader">
<camel:constant>GOOD</camel:constant>
</camel:setHeader>
<camel:choice>
<camel:when>
<camel:xpath>//MessageId = 'a'</camel:xpath>
<camel:onException>
<camel:exception>org.apache.camel.builder.xml.InvalidXPathExpression</camel:exception>
<camel:continued><camel:constant>true</camel:constant></camel:continued>
</camel:onException>
<camel:to ref="Receiver1_"/>
</camel:when>
<camel:when>
<camel:simple>${header.MyHeader} == 'GOOD'</camel:simple>
<camel:to ref="Receiver_"/>
</camel:when>
<camel:otherwise/>
</camel:choice>
</camel:route>
Option 2: Define the onException clause inside the camel context. Here two it doesn't work. After exception occurs, the processing stops successfully. Instead I need the second condition to be evaluated.
<camel:camelContext id="TryCatchEval">
<camel:onException>
<camel:exception>org.apache.camel.builder.xml.InvalidXPathExpression</camel:exception>
<camel:continued><camel:constant>true</camel:constant></camel:continued>
</camel:onException>
<camel:route>
<camel:from ref="Sender"/>
<camel:setHeader headerName="MyHeader">
<camel:constant>GOOD</camel:constant>
</camel:setHeader>
<camel:choice>
<camel:when>
<camel:xpath>//MessageId = 'a'</camel:xpath>
<camel:to ref="Receiver1_"/>
</camel:when>
<camel:when>
<camel:simple>${header.MyHeader} == 'GOOD'</camel:simple>
<camel:to ref="Receiver_"/>
</camel:when>
<camel:otherwise/>
</camel:choice>
</camel:route>
</camel:camelContext>
Regards,
Arpit
-----Original Message-----
From: Claus Ibsen [mailto:claus.ibsen@gmail.com]
Sent: Thursday, November 14, 2013 2:58 PM
To: users@camel.apache.org
Subject: Re: Try-Catch in choice-when
Use <onException> instead of try .. catch as that is better.
On Wed, Nov 13, 2013 at 2:15 PM, Goyal, Arpit <ar...@sap.com> wrote:
> Any idea how can I achieve the following?
>
> -----Original Message-----
> From: Goyal, Arpit [mailto:arpit.goyal@sap.com]
> Sent: Wednesday, November 13, 2013 9:42 AM
> To: users@camel.apache.org
> Subject: Try-Catch in choice-when
>
> Hi All,
>
> I am trying to use Try-Catch inside 'when' but not sure how to get it right. I am using BLUEPRINT DSL. Following is my route:
>
> <camel:route>
> <camel:from ref="Sender"/>
>
> <camel:setHeader headerName="MyHeader">
> <camel:constant>GOOD</camel:constant>
> </camel:setHeader>
>
> <camel:choice>
> <camel:when>
> <camel:doTry>
> <camel:xpath>//MessageId = 'a'</camel:xpath>
> <camel:to ref="Receiver1"/>
> <camel:doCatch>
> <camel:exception>org.apache.camel.builder.xml.InvalidXPathExpression</camel:exception>
> <camel:to uri="log:TryCatchEval?level=INFO"/>
> </camel:doCatch>
> </camel:doTry>
> </camel:when>
> <camel:when>
> <camel:simple>${header.MyHeader} == 'GOOD'</camel:simple>
> <camel:to ref="Receiver_"/>
> </camel:when>
> <camel:otherwise/>
> </camel:choice>
> </camel:route>
>
> Here the prefix camel stands for xmlns:camel=http://camel.apache.org/schema/blueprint
>
> Basically the idea which we want to achieve is, in case my first condition fails (due to some exception), I want to execute the second condition and have hard restriction that I can't change my pattern of choice-when.
>
> As per the camel-blueprint xsd (http://camel.apache.org/schema/blueprint/camel-blueprint-2.11.2.xsd), whenDefinition expects first element to be some language element and then allows Try-Catch. What if the language it-self throws exception? How can I prevent that?
>
> Regards,
> Arpit.
--
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cibsen@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen
Re: Try-Catch in choice-when
Posted by Claus Ibsen <cl...@gmail.com>.
Use <onException> instead of try .. catch as that is better.
On Wed, Nov 13, 2013 at 2:15 PM, Goyal, Arpit <ar...@sap.com> wrote:
> Any idea how can I achieve the following?
>
> -----Original Message-----
> From: Goyal, Arpit [mailto:arpit.goyal@sap.com]
> Sent: Wednesday, November 13, 2013 9:42 AM
> To: users@camel.apache.org
> Subject: Try-Catch in choice-when
>
> Hi All,
>
> I am trying to use Try-Catch inside 'when' but not sure how to get it right. I am using BLUEPRINT DSL. Following is my route:
>
> <camel:route>
> <camel:from ref="Sender"/>
>
> <camel:setHeader headerName="MyHeader">
> <camel:constant>GOOD</camel:constant>
> </camel:setHeader>
>
> <camel:choice>
> <camel:when>
> <camel:doTry>
> <camel:xpath>//MessageId = 'a'</camel:xpath>
> <camel:to ref="Receiver1"/>
> <camel:doCatch>
> <camel:exception>org.apache.camel.builder.xml.InvalidXPathExpression</camel:exception>
> <camel:to uri="log:TryCatchEval?level=INFO"/>
> </camel:doCatch>
> </camel:doTry>
> </camel:when>
> <camel:when>
> <camel:simple>${header.MyHeader} == 'GOOD'</camel:simple>
> <camel:to ref="Receiver_"/>
> </camel:when>
> <camel:otherwise/>
> </camel:choice>
> </camel:route>
>
> Here the prefix camel stands for xmlns:camel=http://camel.apache.org/schema/blueprint
>
> Basically the idea which we want to achieve is, in case my first condition fails (due to some exception), I want to execute the second condition and have hard restriction that I can't change my pattern of choice-when.
>
> As per the camel-blueprint xsd (http://camel.apache.org/schema/blueprint/camel-blueprint-2.11.2.xsd), whenDefinition expects first element to be some language element and then allows Try-Catch. What if the language it-self throws exception? How can I prevent that?
>
> Regards,
> Arpit.
--
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cibsen@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen
RE: Try-Catch in choice-when
Posted by "Goyal, Arpit" <ar...@sap.com>.
Any idea how can I achieve the following?
-----Original Message-----
From: Goyal, Arpit [mailto:arpit.goyal@sap.com]
Sent: Wednesday, November 13, 2013 9:42 AM
To: users@camel.apache.org
Subject: Try-Catch in choice-when
Hi All,
I am trying to use Try-Catch inside 'when' but not sure how to get it right. I am using BLUEPRINT DSL. Following is my route:
<camel:route>
<camel:from ref="Sender"/>
<camel:setHeader headerName="MyHeader">
<camel:constant>GOOD</camel:constant>
</camel:setHeader>
<camel:choice>
<camel:when>
<camel:doTry>
<camel:xpath>//MessageId = 'a'</camel:xpath>
<camel:to ref="Receiver1"/>
<camel:doCatch>
<camel:exception>org.apache.camel.builder.xml.InvalidXPathExpression</camel:exception>
<camel:to uri="log:TryCatchEval?level=INFO"/>
</camel:doCatch>
</camel:doTry>
</camel:when>
<camel:when>
<camel:simple>${header.MyHeader} == 'GOOD'</camel:simple>
<camel:to ref="Receiver_"/>
</camel:when>
<camel:otherwise/>
</camel:choice>
</camel:route>
Here the prefix camel stands for xmlns:camel=http://camel.apache.org/schema/blueprint
Basically the idea which we want to achieve is, in case my first condition fails (due to some exception), I want to execute the second condition and have hard restriction that I can't change my pattern of choice-when.
As per the camel-blueprint xsd (http://camel.apache.org/schema/blueprint/camel-blueprint-2.11.2.xsd), whenDefinition expects first element to be some language element and then allows Try-Catch. What if the language it-self throws exception? How can I prevent that?
Regards,
Arpit.