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 Mon, 14 Jun 2010 02:12:34 GMT

The issue is resolved after I added the below line in camelconetxt.xml file
<bean id="http" class="org.apache.camel.component.http.HttpComponent">

cheers
gnanda


gnanda wrote:
> 
> 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-tp28847433p28875336.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Mime
View raw message