I have attached my routercode. as an attachment
For convenience few lines are here
onException(org.apache.camel.component.http.HttpOperationFailedException.class).handled(true).to("jms:queue:MM.HTTP-ERRORQ");
onException(Exception.class).onWhen(new Predicate() {
public boolean matches(Exchange exchange) {
log.info(exchange);
Exception ex =
exchange.getProperty(Exchange.EXCEPTION_CAUGHT,
Exception.class);
org.apache.camel.component.http.HttpOperationFailedException ex1 =
exchange.getProperty(Exchange.EXCEPTION_CAUGHT,
org.apache.camel.component.http.HttpOperationFailedException.class);
log.info("HttpOperatioFailedException is:"+ex1);
if(ex instanceof
org.apache.camel.component.http.HttpOperationFailedException){
log.info("exception is instanceof
http.HttpOperationFailedException");
org.apache.camel.component.http.HttpOperationFailedException ex2
=(org.apache.camel.component.http.HttpOperationFailedException)ex;
log.info("response body is:"+
ex2.getResponseBody());
}
else{
log.info("exception is NOT instanceof
http.HttpOperationFailedException");
}
if(ex instanceof
org.apache.camel.RuntimeCamelException){
log.info("exception is instanceof
org.apache.camel.RuntimeCamelException");
}
else{
log.info("exception is NOT instanceof
org.apache.camel.RuntimeCamelException");
}
log.info("EXCEPTION CLASS IS:"+ex.getClass());
log.info("EXCEPTION CAUSE IS:"+ex.getCause());
log.error(ex);
log.error("error:",ex);
ex.printStackTrace();
String exMessage = exchange.getProperty(
Exchange.EXCEPTION_CAUGHT,
String.class);
log.info("exmessage is:" + exMessage);
if (exMessage.endsWith("404")) {
log.info("error code is 404");
return true;
} else
return false;
}
}).useExponentialBackOff().handled(true).to(this.errorQ).process(
new DefaultErrorHandler());
onException(Exception.class).useExponentialBackOff().handled(true).to(this.errorQ)
.process(new DefaultErrorHandler());
//
onException(SoapFault.class).maximumRedeliveries(1).useExponentialBackOff().handled(true)
// .process(new DefaultErrorHandler()).to(this.errorQ);
onException(java.net.ConnectException.class).maximumRedeliveries(1)
.handled(true).to(this.retryQ).process(new
DefaultErrorHandler());
// this is just the generic error handler where we set the
destination
// and the number of redeliveries we want to try
//
errorHandler(deadLetterChannel("jmstx:queue:DLQ.cex.spq2").maximumRedeliveries(1));
// IMP:If I add policy here then onException clause does not
work with
// 4.0. With
// exception block it does local retry with deadletter channel
// it works in4.2
from(this.inputQ).transacted("PROPAGATION_REQUIRED").bean(
processorBean, "setLocationUrI")//
.bean(myBean,"setSoap12Header").bean(myBean,"printExchangeHeaders")
.process(new Processor() {
public void process(Exchange exchange)
throws Exception {
// MyProcessorBean myBean = new
MyProcessorBean();
Message message =
exchange.getIn();
Message in = exchange.getIn();
log.info("isTransacted:" +
exchange.isTransacted());
log
.info("Messaged read
from the queue by camelRouter:= "
+ in.getBody(String.class));
log.info("printing properties");
Map<String, Object> properties
= exchange
.getProperties();
Set<String> sin =
properties.keySet();
for (String key : sin) {
log.info(key + ":" +
properties.get(key));
}
//
exchange.setPattern(ExchangePattern.InOut);
}
})
/**
* call external web service using
recipientlist patterns
*/
.recipientList(header(Constants.DYNAMIC_HTTP_URI)).bean(
resProcessorBean,
"handleResponse");
Here are few lines from the log file that i am printing from the router
code
2010-06-12 06:33:24,739 |06:33:24,739 | INFO | tenerContainer-4 |
SCRouterBuilder | er.camelrouter.SCRouterBuilder$1 149 |
HttpOperatioFailedException is:null
2010-06-12 06:33:24,739 |06:33:24,739 | INFO | tenerContainer-4 |
SCRouterBuilder | er.camelrouter.SCRouterBuilder$1 157 |
exception is NOT instanceof http.HttpOperationFailedException
2010-06-12 06:33:24,739 |06:33:24,739 | INFO | tenerContainer-4 |
SCRouterBuilder | er.camelrouter.SCRouterBuilder$1 164 |
exception is NOT instanceof org.apache.camel.RuntimeCamelException
2010-06-12 06:33:24,739 |06:33:24,739 | INFO | tenerContainer-4 |
SCRouterBuilder | er.camelrouter.SCRouterBuilder$1 166 |
EXCEPTION CLASS IS:class
org.apache.camel.component.http.HttpOperationFailedException
2010-06-12 06:33:24,739 |06:33:24,739 | INFO | tenerContainer-4 |
SCRouterBuilder | er.camelrouter.SCRouterBuilder$1 167 |
EXCEPTION CAUSE IS:null
2010-06-12 06:33:24,739 |06:33:24,739 | ERROR | tenerContainer-4 |
SCRouterBuilder | er.camelrouter.SCRouterBuilder$1 169 |
org.apache.camel.component.http.HttpOperationFailedException: HTTP
operation failed invoking http://lpf004689/orderapp1/OrderProcess with
statusCode: 404
And here is the exception getting printed
2010-06-12 06:33:24,833 |06:33:24,833 | ERROR | tenerContainer-4 |
TransactionErrorHandler | rg.apache.camel.processor.Logger 248 |
Failed delivery for exchangeId: a9119c36-5bee-4395-9eda-0e62199b54c5.
Exhausted after delivery attempt: 1 caught:
org.apache.camel.component.http.HttpOperationFailedException: HTTP
operation failed invoking http://lpf004689/orderapp1/OrderProcess with
statusCode: 404. Processed by failure processor:
Pipeline[Channel[sendTo(Endpoint[jms://queue:MM.error])],
channel[com.pf.simpleconsumer.camelrouter.defaulterrorhand...@b39fbc]]
org.apache.camel.component.http.HttpOperationFailedException: HTTP
operation failed invoking http://lpf004689/orderapp1/OrderProcess with
statusCode: 404
at
org.apache.camel.component.http.HttpProducer.populateHttpOperationFailedException(HttpProducer.java:150)
at
org.apache.camel.component.http.HttpProducer.process(HttpProducer.java:92)
at
org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:177)
at
org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:143)
at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88)
at
org.apache.camel.spring.spi.TransactionErrorHandler.processByRegularErrorHandler(TransactionErrorHandler.java:90)
at
org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:81)
at
org.apache.camel.processor.MulticastProcessor.doProcess(MulticastProcessor.java:266)
at
org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:218)
at
org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:137)
at
org.apache.camel.processor.RecipientList.sendToRecipientList(RecipientList.java:102)
at
org.apache.camel.processor.RecipientList.process(RecipientList.java:81)
at
org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53)
at
org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82)
at
org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:161)
at
org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:177)
at
org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:143)
at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88)
at
org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49)
at
org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:228)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:74)
at
org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:177)
at
org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:143)
at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88)
at
org.apache.camel.spring.spi.TransactionErrorHandler.access$001(TransactionErrorHandler.java:39)
at
org.apache.camel.spring.spi.TransactionErrorHandler$1.doInTransactionWithoutResult(TransactionErrorHandler.java:140)
at
org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:33)
at
org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:128)
at
org.apache.camel.spring.spi.TransactionErrorHandler.doInTransactionTemplate(TransactionErrorHandler.java:130)
at
org.apache.camel.spring.spi.TransactionErrorHandler.processInTransaction(TransactionErrorHandler.java:106)
at
org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:84)
at
org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53)
at
org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82)
at
org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:161)
at
org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:177)
at
org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:143)
at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88)
at
org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49)
at
org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:228)
at
org.apache.camel.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:66)
at
org.apache.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48)
at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67)
at
org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:84)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:543)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:482)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:451)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:323)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:241)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:982)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:974)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:876)
at java.lang.Thread.run(Thread.java:619)
willem.jiang wrote:
What's the exception that you got?
I didn't see the detail info log level message.
Can I have a look at your whole Camel route?
Willem
gnanda wrote:
Thanks a lot willem for the reply.
I am still stuck with the issue, not sure what is going on
I do get exception as
org.apache.camel.component.http.HttpOperationFailedException. I have the
exception log attached below.
But when I tried getting the exception as HttpOperationFailedException
it
prints NULL and prints "exception is not instanceof
http.HttpOperationFailedException" from the below log statements.
Any help is appreciated
Here is the code snippet
onException(Exception.class).onWhen(new Predicate() {
public boolean matches(Exchange exchange) {
log.info(exchange);
org.apache.camel.component.http.HttpOperationFailedException ex1 =
exchange.getProperty(Exchange.EXCEPTION_CAUGHT,
org.apache.camel.component.http.HttpOperationFailedException.class);
log.info("HttpOperatioFailedException is:"+ex1);
Exception ex =
exchange.getProperty(Exchange.EXCEPTION_CAUGHT,
Exception.class);
if(ex instanceof
org.apache.camel.component.http.HttpOperationFailedException){
log.info("exception is instanceof
http.HttpOperationFailedException");
org.apache.camel.component.http.HttpOperationFailedException ex2
=(org.apache.camel.component.http.HttpOperationFailedException)ex;
log.info("response body is:"+
ex2.getResponseBody());
}
else{
log.info("exception is not instanceof
http.HttpOperationFailedException");
}
2010-06-11 12:18:29,898 |12:18:29,898 | ERROR | tenerContainer-5 |
DefaultErrorHandler | rg.apache.camel.processor.Logger 248
|
Failed delivery for exchangeId:
ID:LPF004689-2995-1276268480402-0:6:1:1:1.
Exhausted after delivery attempt: 2 caught:
org.apache.camel.component.http.HttpOperationFailedException: HTTP
operation
failed invoking http://localhost/orderapp/OrderProcess with statusCode:
500.
Processed by failure processor:
Pipeline[Channel[sendTo(Endpoint[jms://queue:MM.500Q])],
channel[com.pf.simpleconsumer.camelrouter.defaulterrorhand...@1bc1819]]
org.apache.camel.component.http.HttpOperationFailedException: HTTP
operation
failed invoking http://localhost/orderapp/OrderProcess with statusCode:
500
at
org.apache.camel.component.http.HttpProducer.populateHttpOperationFailedException(HttpProducer.java:150)
at
org.apache.camel.component.http.HttpProducer.process(HttpProducer.java:92)
at
org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:97)
at
org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:95)
at
org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:146)
willem.jiang wrote:
Hi,
You can get the soap fault message detail by checking out the
responseBody from the HttpOperationFailedException.
Willem
gnanda wrote:
Hi All,
I am using camel 2.2 with servicemix 4.2
I am trying to retrieve soapFault message from
HttpOperationFailedException
I could able to print the exception as below
Exception ex =
exchange.getProperty(Exchange.EXCEPTION_CAUGHT,Exception.class);
log.info(ex);
It prints the message as below
"org.apache.camel.component.http.HttpOperationFailedException: HTTP
operation failed invoking
http://localhost/orderapp/OrderProcess?httpClientConfigurerRef=com.pf.simpleconsumer.camelrouter.DefaultHttpClientConfigurer
with statusCode: 500"
The above string does not have soapfault message.How would I extract
soapfault message in my onException() block ?
How do I retrieve the fault code?
Any help is appreciated
http://old.nabble.com/file/p28863872/SCRouterBuilder.java
SCRouterBuilder.java