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 Thu, 25 Sep 2008 06:13:26 GMT
The "mock:fail" is just for the testing, you can use your endpoint URI 
for the error message receiving.
I just went through the codes in your mail, can you remove the below can 
from router configure and try again?

exception(Exception.class).process(changeRequestInputExceptionProcessor).to(MOCK_OUTPUT_ERROR_DESTINATION_URI);


Willem.

Mick Knutson wrote:
> But my test throws an exception, and created a*MOCK_OUTPUT_ERROR_DESTINATION_URI
> * Mock instead of the name used "mock:fail" or is there some reason I have
> to use "mock:fail" instead of my endpoint?
>
>
>
>
> On Wed, Sep 24, 2008 at 10:34 PM, Mick Knutson <mknutson@baselogic.com>wrote:
>
>   
>> But my test throws an exception, and created
>>
>> On Wed, Sep 24, 2008 at 8:23 PM, Willem Jiang <willem.jiang@gmail.com>wrote:
>>
>>     
>>> Can you take a look at the below unit test, the message is only sent to
>>> the "mock:fail" endpoint when the exception is thrown.
>>>
>>>
>>> Willem Jiang wrote:
>>>
>>>       
>>>> 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
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>
>>>>>
>>>>>           
>>>>
>>>>         
>> --
>> ---
>> 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