Hi

Yeah for 3xx we should get the location that is returned, if any provided:

http://hc.apache.org/httpclient-3.x/redirects.html
Header locationHeader = method.getResponseHeader("location");

So the end-user can get this new location and retry if he wants to.

Yeah maybe we need a special exception where we can store this location if 
there is one.

Would be fine with a HttpOperationFailedException where we can have such 
details stored.
- error code
- status line
- location

And it could have a isRedirectError() + hasRedirectLocation () or whatever so 
you can do

Catch (HttpOperationFailedException e) {
If (e.isRedirectError() && e.hasRedirectLocation()) {
   // retry with the new location

}



Med venlig hilsen
 
Claus Ibsen
......................................
Silverbullet
Skovsgårdsvænget 21
8362 Hørning
Tlf. +45 2962 7576
Web: www.silverbullet.dk

-----Original Message-----
From: Willem Jiang [mailto:[EMAIL PROTECTED] 
Sent: 27. september 2008 10:07
To: camel-user@activemq.apache.org
Subject: Re: Camel HTTP producer successful on 404?

I just checked doc of HttpClient[1] , it will not handler redirection 
automatically.
"Currently HttpClient is unable to automatically handle redirects of 
entity enclosing methods such as POST and PUT."
Here is a question, if we just throw the exception when we get the 3xx, 
how can we extract the location of redirect response from the exception ?
Or we can create a ProtocalExcpection to store the response code and 
detail response message.

[1] http://hc.apache.org/httpclient-3.x/redirects.html

Willem
Claus Ibsen wrote:
> Hi
>
> About: Some of the 3xx errors. Does the http client lib support redirection 
> (follow redirection flag or something?). Maybe if there was such a flag we 
> should allow this to be configured as well. So camel would follow the 
> redirection instruction returned.
>
>
> And it should be documented in the wiki, what we do for the different http 
> return codes!
>
> I don't think we should set any reponse to the FAULT message as we are about 
> to @deprecate / alter this for the future. And FAULT is seldom used in Camel.
>
> Otherwise +1
>
> Med venlig hilsen
>  
> Claus Ibsen
> ......................................
> Silverbullet
> Skovsgårdsvænget 21
> 8362 Hørning
> Tlf. +45 2962 7576
> Web: www.silverbullet.dk
>
> -----Original Message-----
> From: Willem Jiang [mailto:[EMAIL PROTECTED] 
> Sent: 27. september 2008 08:30
> To: camel-user@activemq.apache.org
> Subject: Re: Camel HTTP producer successful on 404?
>
> I think we should have a list for the response message code which just 
> needs to set the fault message or to throw the exception.
> I just check the http status codes means.
> 1xx information, 2xx successful, 3xx redirection,  4xx client error, 5xx 
> server error.
> If the response code is in 1xx , 2xx, 3xx. We just put the message into 
> exchange out.
> If the response code is between 4xx and 5xx. We could throw the 
> exception from the http component to trigger the error handler.
>
> any thought?
>
> Willem
>
>
>  
> harinair wrote:
>   
>> Thanks a lot, Hadrian and Wilem.
>>
>> In my case, I have to transfer data to an external consumer using HTTP/HTTPS
>> Post. The producer works well for this case. However my requirement is to
>> try redelivering(with exponential backoff) for any errors including 404 and
>> 500 since it may be a case of consumer's server being down.
>>
>> I am using something like this:
>> errorHandler(deadLetterChannel("jms:redelivery-queue").initialRedeliveryDelay(20000)
>> .backOffMultiplier(2).maximumRedeliveries(3).useExponentialBackOff());
>> from("jms:deliveryqueue").recipientList(header("address")).to("bean:MyBean?method=processIsOK");
>>  
>> in this the header address contains something like
>> https://myconsumer/servlet/CallbackServlet
>>
>> Now the problem is I find that the HTTP component will not even try
>> redelivering for 404 and 401. It acts as if it is a successful transport. I
>> understand that I can check whether the delivery has failed or not. I found
>> out from HTTP producer code I am even able to check the response code by
>> looking at the http.responseCode header (Probably we should update HTTP
>> Component doc - I can help). But how can I make Camel try redelivering these
>> 404/401 messages?
>>
>> I am sorry if I am not explaining it properly. Since I am pretty new in
>> Camel, probably I am blabbering something that is totally off mark.
>>
>> Thanks in advance.
>> Hari Gangadharan
>>
>>
>> Hadrian Zbarcea wrote:
>>   
>>     
>>> Hi,
>>>
>>> To add to Willem's comment, there is no point in retrying for 404 for  
>>> example, but it makes sense to retry for codes like 500.  That means  
>>> that we have to enhance the camel-http component to create 2 classes  
>>> of errors and apply the error handle for some, but not for others.   
>>> This is depended on the cleanup in CAMEL-316 that will only be fully  
>>> resolved in the next release, and only partially (we hope) in 1.5.
>>>
>>> Thanks for riding the camel,
>>> Hadrian
>>>
>>>
>>> On Sep 26, 2008, at 4:00 AM, Willem Jiang wrote:
>>>
>>>     
>>>       
>>>> Hi ,
>>>>
>>>> Current HTTP producer will not retry if the response is 401/404/500.
>>>> It just put the response back in the fault message body and it will  
>>>> not trigger the default error handler[1] for retring.
>>>>
>>>> Your application code should call exchang.isFailed() for checking  
>>>> the fault response.
>>>>
>>>> For the Camel 1.5 , we are planing to cut a RC next week. I don't  
>>>> think camel-http 1.5-SNAPSHOT can work with camel-core 1.4, since  
>>>> they are some change between the core and http component in Camel 1.5.
>>>> We are publishing the snapshot every day here[2], please take a try :)
>>>>
>>>> [1] http://activemq.apache.org/camel/error-handler.html
>>>> [2] http://people.apache.org/repo/m2-snapshot-repository
>>>>
>>>> Willem
>>>>
>>>> harinair wrote:
>>>>       
>>>>         
>>>>> Willem:
>>>>>
>>>>> Thanks a lot for the quick reply. So you mean to say that the latest
>>>>> SNAPSHOT will mark response != 200 as failed - right? I guess, that  
>>>>> also
>>>>> means there will be retries by HTTP producer for 500 / 401/ 404 etc.
>>>>>
>>>>> If that is the case then it is great. When is the 1.5 release  
>>>>> planned? I am
>>>>> planning to go live this week for a small project and I uncovered  
>>>>> this bug
>>>>> on a test. Is 1.5 fairly stable? Or is it recommended that I use  
>>>>> just the
>>>>> camel-http component from the 1.5-SNAPSHOT?
>>>>>
>>>>> Regards,
>>>>> Hari Gangadharan
>>>>>
>>>>>
>>>>> willem.jiang wrote:
>>>>>
>>>>>         
>>>>>           
>>>>>> I just did a fixe on CAMEL-807[1] which relates your issue.
>>>>>> Now we will put the response into the fault message if the  
>>>>>> response is not 200.
>>>>>> You can know it when you call the exchange.isfailed().
>>>>>>
>>>>>> Please check out the latest snapshot and feel free to add your  
>>>>>> feed back.
>>>>>>
>>>>>> [1]https://issues.apache.org/activemq/browse/CAMEL-807
>>>>>>
>>>>>> Willem
>>>>>>
>>>>>>
>>>>>>
>>>>>>           
>>>>>>             
>>>>>         
>>>>>           
>>>     
>>>       
>>   
>>     
>
>
>   

Reply via email to