Hi,

I need to get the status code of a http/POST call that may fail, but that
should never stop the route, but log the errors instead.
But whatever solution I try, my route keeps failing as soon as I have a code
400+, and am never able to manage the return code:

/Failed delivery for (MessageId: topic_mmh.test.in_ID_myHost on ExchangeId:
someId). On delivery attempt: 0 caught:
org.apache.camel.component.http.HttpOperationFailedException: HTTP operation
failed invoking http://www.google.fr/ju?throwExceptionOnFailure=false with
statusCode: 405/

I have tried it two ways :
According to  camel-http doc <http://camel.apache.org/http.html>   : 
        from("direct:in")
                        .process(fillInBodyWithHttpPostData)
                        .setHeader(Exchange.HTTP_METHOD, constant("POST"))  
                        .setHeader(Exchange.HTTP_URI, 
constant("http://www.google.fr/ju";)) //
error 405
                        .setHeader(Exchange.HTTP_QUERY,
constant("throwExceptionOnFailure=false"))
                        .setHeader(Exchange.CONTENT_TYPE, 
constant("application/xml"))  
                        .enrich("http://dummyhost";, new AggregationStrategy() {
                                                    public Exchange 
aggregate(Exchange original, Exchange resource) {
                                                        Integer code =
resource.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);
                                                        
if(code.intValue()==405){
                                                                
logUtils.log(LoggingLevel.DEBUG, "erreur
405",runInDebugMode);
                                                        }
                                                        return resource;
                                                    }
                                                }).to("mock:result");
      

An another way I tried before reading the doc: 
      
  from("direct:in")
                        .process(fillInBodyWithHttpPostData)
                        .setHeader(Exchange.HTTP_METHOD, constant("POST"))  
                        .setHeader(Exchange.HTTP_URI, 
constant("http://www.google.fr/ju";)) //
error 405
                        .setHeader(Exchange.HTTP_QUERY,
constant("throwExceptionOnFailure=false"))
                        .setHeader(Exchange.CONTENT_TYPE, 
constant("application/xml"))  
                        .enrich("http://dummyhost";)
                        .process(processHttpReturnCode);
     
     
     // with processorCode  
   // ...
                        final Message in = exchange.getIn();
                        int responseCode = 
in.getHeader(Exchange.HTTP_RESPONSE_CODE,
Integer.class);
                        switch(responseCode){
                        case HttpStatus.SC_ACCEPTED :  
                        case HttpStatus.SC_CREATED :  
                                logUtils.log(LoggingLevel.DEBUG,"Return Code ok 
 : " +
Integer.toString(responseCode),runInDebugMode);break;   
                          default :  
                                logUtils.log(LoggingLevel.ERROR,"Return code KO 
: " +
Integer.toString(responseCode),runInDebugMode);break;   
                        }

   // ...

If any of you have a tip here, or could point out my mistake, she/he is
welcome!

Thanks in advance




--
View this message in context: 
http://camel.465427.n5.nabble.com/camel-http-keeps-throwing-exception-regardless-of-throwExceptionOnFailure-value-tp5739143.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to