camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Willem Jiang <willem.ji...@gmail.com>
Subject Re: Trying to understand how to deal with process() errors and creating an exceptionChannel for bad messages.
Date Wed, 24 Sep 2008 02:39:15 GMT
Hi

You don't need to call the exchange.isFailed(),  it just check if the 
exchange's  fault message  or exception  is set.
Here is a Unit test of DeadLetterChannel[1],  which shows what you want. 
Please check it out.

[1] 
https://svn.apache.org/repos/asf/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelTest.java

Willem

Mick Knutson wrote:
> To give some background here is my process:
>
>     *public void process(Exchange exchange)
>             throws Exception {
>         log.info("process ChangeRequestInputTransformer request");
>
>         String body = (String) exchange.getIn().getBody();
>
>         // Get a Map of Items from the input message
>         JSONObject jsonIn = new JSONObject(body);
>
>         // validate input message, route to verifyErrorEndpoint if there are
> errors.
>         String customerId = jsonIn.getString(Constants.CUSTOMER_ID);
>         String type = jsonIn.getString(Constants.CHANGEREQUST_TYPE);
>         String quota = jsonIn.getString(Constants.QUOTA);
>
>         ChangeRequest changeRequest = null;
>
>         try {
>
>             if (type.equalsIgnoreCase(Constants.PROVISION)) {
>                 log.info("***** PROVISION *****");
>                 changeRequest = createProvisionChangeRequest(customerId,
> quota); // can throw Exception
>                 exchange.getOut().setHeader(Constants.REQUEST_DESTINATION,
> Constants.REQUEST_OUTPUT_CHANNEL);
>
>             } else if (type.equalsIgnoreCase(Constants.DEPROVISION)) {
>                 log.info("DEPROVISION");
>             } else {
>                 log.error("Invalid Change Request");
>                 exchange.getOut().setHeader(Constants.REQUEST_DESTINATION,
> Constants.REQUEST_INPUT_ERROR_CHANNEL);
>             }
>
>             String jsonOut = toJSON(body);
>
>             exchange.getOut().setMessageId(changeRequest.getChangeRequestId()
> + "");
>             exchange.getOut().setHeader(Constants.CORRELATION_ID,
> changeRequest.getChangeRequestId());
>             exchange.getOut().setHeader(Constants.TIMEOUT, new
> Integer(5000)); // fixme: 5 seconds....
>             exchange.getOut().setHeader(Constants.CUSTOMER_ID,
> changeRequest.getCustomerId());
>
>             exchange.getOut().setBody(jsonOut);
>
>             //todo need to rout to CR_INPUT_ERROR_CHANNEL if there is an
> error.
>
>             log.info("*********************************");
>         } catch (Exception e) {
>             exchange.isFailed();
>             throw new Exception("Error creating Change Request");
>         }
>     }
> *
>
> Now, I get an exception with
> *exchange.getOut().setMessageId(changeRequest.getChangeRequestId()
> + ""); *but my mock still gets the expected number of messages.
>
> so I need to understand how to stop the current message, and redirect this
> to an error channel instead.
>
>
>
>
> On Tue, Sep 23, 2008 at 1:50 PM, Mick Knutson <mknutson@baselogic.com>wrote:
>
>   
>> I have input messages that I am trying to process, and when there is an
>> error, I want to create a new exceptionMessage and put it onto an
>> inputErrorChannel .
>>
>>
>>
>> --
>> ---
>> Thank You…
>>
>> Mick Knutson
>> BASE Logic, inc.
>> (415) 354-4215
>>
>> Website: http://baselogic.com
>> Blog: http://baselogic.com/blog
>> BLiNC Magazine: http://blincmagazine.com
>> Linked IN: http://linkedin.com/in/mickknutson
>> DJ Mick: http://djmick.com
>> MySpace: http://myspace.com/mickknutson
>> Vacation Rental: http://tahoe.baselogic.com
>>
>>
>>     
>
>
>   


Mime
View raw message