Hi,

It looks like you are using some kind of MOCK API to throw the exception.
Can you show me the code how did you setup the mocked POJO bean?
--  
Willem Jiang

Red Hat, Inc.
Web: http://www.redhat.com
Blog: http://willemjiang.blogspot.com (English)
http://jnn.iteye.com (Chinese)
Twitter: willemjiang  
Weibo: 姜宁willem



On July 8, 2014 at 11:36:38 PM, atg roxx (atgr...@gmail.com) wrote:
> Hi Team,
>  
> I am using multicast with AggreationStrategy an also using onException on
> my route.
>  
> Happy case is working fine,
>  
> But when there is any exception, my exception processor handle it and set a
> header and add error message in the body of the exchange.
>  
> When call go back to aggregator, it check whether the body of the exchange
> received is not null and of type Class A or not. if not then we know this
> exchange is returned by the Exception handler. and we return that exchange.
>  
> When testing for exception , my mock end point does not receive exchange
> set by the exception processor.
>  
> Kindly guide me where I am getting things wrong.:
>  
> Below is the source code:
>  
> Route definition :-------------------------------------
>  
> onException(RecoverableException.class)
> .maximumRedeliveries(2)
> .handled(true)
> .beanRef("myCustomeExceptionHandler","handleException");
>  
>  
> from("{{route.direct.endpoint}}")
> .routeId(ROUTE_ID)
> .multicast(new MyAggregationStrategy())
> .parallelProcessing()
> .timeout(COMPLETION_TIMEOUT)
> .to(GET_DETAILS, GET_SUMMARY, GET_IMAGE)
> .end()
> .marshal(responseFormat);
>  
> from(GET_SUMMARY)
> .choice()
> .when(summaryIsRequested)
> .beanRef("myCustomeService", "getSummary")
> .otherwise()
> .setBody().constant(null)
> .log(LoggingLevel.DEBUG, "Skipping summary - not
> requested.")
> .end();
>  
> from(GET_DETAILS)
> .choice()
> .when(detailsAreRequested)
> .beanRef("myCustomeService", "getDetails")
> .otherwise()
> .setBody().constant(null)
> .log(LoggingLevel.DEBUG, "Skipping details - not
> requested.")
> .end();
>  
> from(GET_IMAGE)
> .routeId("podImageRoute")
> .choice()
> .when(podImageIsRequested)
> .beanRef("myCustomeService", "getImage")
> .otherwise()
> .setBody().constant(null)
> .log(LoggingLevel.DEBUG, "Skipping image - not requested.")
> .end();
>  
> Exception Handler
> :------------------------------------------------------------------
> public class HttpResponseExceptionHandler implements ExceptionHandler {
> @Override
> public void handleRecoverableException(Exchange exchange) {
> Throwable cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT,
> Exception.class);
> String failureRouteId = exchange.getProperty(Exchange.FAILURE_ROUTE_ID,
> String.class);
> String errorMessage = cause.getMessage();
> LOGGER.error("Exception occurred in the route {}. Exception details are:
> {}", failureRouteId, errorMessage);
> exchange.getIn().removeHeaders("*");
> exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, statusCode);
> exchange.getIn().setBody(errorMessage);
> }
> }
>  
> Aggregator code: ----------------------------
>  
> public class MyCustomeAggregationStrategy implements AggregationStrategy {
>  
> @Override
> public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
>  
> if (oldExchange == null) { // occurs for a new group
> return newExchange;
> }
>  
> if (exchangeHasNonNullBody(oldExchange) &&
> exchangeContainBodyofTypeClassA(oldExchange)) {
> oldBody=oldExchange.getIn().getBody();
> } else {
> return oldExchange; // assuming that body contain string
> message set in Exception Handler
> }
> }
>  
> if (exchangeHasNonNullBody(newExchange) &&
> exchangeContainBodyofTypeClassA(newExchange)) {
> newBody=newExchange.getIn().getBody();
> } else {
> return newExchange; // assuming that body contain string
> message set in Exception Handler
> }
> }
>  
> MergeBodyofOldAndNewExchange(oldExchange,oldBody,newBody);
>  
> return oldExchange;
> }
>  
> ----------------------
>  
> Test case :---------------------
>  
>  
> @DirtiesContext
> @Test
> public void testExceptionHandeling() throws Exception {
>  
> // Given
> when(myService.getImage(anyString(), anyString())).thenThrow(new
> ConnectionException("Exception of type ConnectionException"));
> mockEndpointResult.expectedMessageCount(1);
>  
> // When
> try {
> template.sendBody("{{route.direct.endpoint}}", request);
> Thread.sleep(1000); // wait a few moments...
> //then
> mockEndpointResult.assertIsSatisfied(); // fails here
>  
> } catch (CamelExecutionException ex) {
> //then
> fail();
> }
> }
>  
>  
> -- Regards,
> atg roxx
>  

Reply via email to