users@jersey.java.net

Re: [Jersey] Use of Form causing org.apache.commons.httpclient.ProtocolException: Unbuffered entity enclosing request can not be repeated.

From: Steve Sims <steve_at_steveandgeorge.co.uk>
Date: Wed, 08 Apr 2009 14:43:06 +0100

Oops - I actually thought that I'd set pre-emptive authentication but it
turns out that I hadn't; you've just halved the number of calls I was
going to make!

Cheers,

Steve

Paul Sandoz wrote:
>
> On Apr 8, 2009, at 2:50 PM, Steve Sims wrote:
>
>> Hi Paul,
>>
>> As usual, thank you for the prompt reply and you were spot on! Yes, I
>> was using 1.0.2 and 1.0.3 snapshot fixed it.
>>
>> As for the reason for the failure, it's a 403 - Forbidden on my
>> resource. It's not client related as curl returns the same response so
>> I'll continue looking into that; probably another one of my usual typos!
>>
>
> Ah, of course! What's happening is the Apache HTTP client is resending s
> second time with auth credentials. If you want to still work with 1.0.2
> you can work around this by setting the property
> PROPERTY_PREEMPTIVE_AUTHENTICATION [1] to true.
>
> Paul.
>
> [1]
> https://jersey.dev.java.net/source/browse/*checkout*/jersey/tags/jersey-1.0.2/api/contribs/jersey-apache-client/index.html
>
>
>> Again, many thanks for your help.
>>
>> Cheers,
>>
>> Steve
>>
>> Paul Sandoz wrote:
>>> Hi Steve,
>>> Are you using 1.0.2? If so you hit a bug that i have fixed in
>>> 1.0.3-SNAPSHOT (btw i am going to send an email soon about when we
>>> will release 1.0.3).
>>> In 1.0.3-SNAPSHOT the Apache client support will by default buffer
>>> the request entity. If you set the property
>>> ApacheHttpClientConfig.PROPERTY_CHUNKED_ENCODING_SIZE to a non-null
>>> value then chunked encoding will be enabled and no buffering will occur.
>>> Could you try 1.0.3-SNAPSHOT ?
>>> I am curious to know why the Apache client is repeating the request.
>>> Perhaps you could do a curl, for example:
>>> curl -v -X PUT -d "param1=param1"
>>> http://locahost:8080/path?request_id=1
>>> Paul.
>>> On Apr 8, 2009, at 12:45 PM, Steve Sims wrote:
>>>> Hello,
>>>>
>>>> The following exception is being thrown whilst using the Apache
>>>> Jersey client. From what I've been able to find out, this is
>>>> occurring because there's a communications error in the PUT to my
>>>> resource and the client is automatically attempting to retry but
>>>> can't because it doesn't think that it can re-read the entity. My
>>>> questions are, given that the entity I'm trying to send is an
>>>> instance of com.sun.jersey.api.representation.Form, why is it being
>>>> treated as "unbuffered"? and what can I use instead?
>>>>
>>>> Caused by: com.sun.jersey.api.client.ClientHandlerException:
>>>> org.apache.commons.httpclient.ProtocolException: Unbuffered entity
>>>> enclosing request can not be repeated.
>>>> at
>>>> com.sun.jersey.client.apache.ApacheHttpClientHandler.handle(ApacheHttpClientHandler.java:202)
>>>>
>>>> at com.sun.jersey.api.client.Client.handle(Client.java:365)
>>>> at
>>>> com.sun.jersey.api.client.WebResource.handle(WebResource.java:556)
>>>> at
>>>> com.sun.jersey.api.client.WebResource.access$300(WebResource.java:68)
>>>> at
>>>> com.sun.jersey.api.client.WebResource$Builder.put(WebResource.java:466)
>>>> at com.myapp.services.MyMainBean.ejbTimeout(MyMainBean.java:225)
>>>> at sun.reflect.GeneratedMethodAccessor253.invoke(Unknown Source)
>>>> at
>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>>
>>>> at java.lang.reflect.Method.invoke(Method.java:616)
>>>> at
>>>> com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1067)
>>>>
>>>> at
>>>> com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:176)
>>>> at
>>>> com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:2895)
>>>>
>>>> at
>>>> com.sun.ejb.containers.BaseContainer.callEJBTimeout(BaseContainer.java:2824)
>>>>
>>>> ... 6 more
>>>> Caused by: org.apache.commons.httpclient.ProtocolException:
>>>> Unbuffered entity enclosing request can not be repeated.
>>>> at
>>>> org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:487)
>>>>
>>>> at
>>>> org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
>>>>
>>>> at
>>>> org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
>>>>
>>>> at
>>>> org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
>>>>
>>>> at
>>>> org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
>>>>
>>>> at
>>>> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
>>>>
>>>> at
>>>> com.sun.jersey.client.apache.ApacheHttpClientHandler.handle(ApacheHttpClientHandler.java:197)
>>>>
>>>> ... 18 more
>>>>
>>>> I'm PUTing the resource using this code:
>>>>
>>>> MultivaluedMap<String, String> formParams = new Form();
>>>> formParams.add("param1", param1);
>>>> WebResource resource =
>>>> restClient.resource(resourceUri).queryParam("request_id", requestId);
>>>> ClientResponse resp =
>>>> resource.entity(formParams).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).put(ClientResponse.class);
>>>>
>>>>
>>>> Many thanks,
>>>>
>>>> Steve
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>>>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>
>