camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gnanda <gitanjali.na...@phaseforward.com>
Subject Re: reading soapfault message from HttpOperationFailedException
Date Sat, 12 Jun 2010 10:41:26 GMT

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.DefaultErrorHandler@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.DefaultErrorHandler@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 
-- 
View this message in context: http://old.nabble.com/reading-soapfault-message-from-HttpOperationFailedException-tp28847433p28863872.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Mime
View raw message