Ok, I traced the problem. I had written the URL in a bad form,
http://hostname:8080//alfresco/[...] instead of
http://hostname:8080/alfresco/[...], i.e. there was a double slash at
the wrong place; apparently, in httpclient 4.1 there is some feature to
normalize such a URL, while in 3.1 there is none, so the parsing of the
URL failed with 4.1. Of course, the reason to signal an error in the
parsing of the servlet URL with a 417 error code is a mistery.
Sorry for the noise on this list, I hope this little experience may be
useful to somebody else...
Francesco.
Il 08/03/2011 18.36, Francesco Marchetti-Stasi ha scritto:
I extracted the fragments to two standalone programs reading a file,
and again, with 4.1 the upload succeeds, with 3.1 it fails. I sniffed
the network traffic, and I found two relevant differences: with 4.1
the transfer encoding is chunked, and connection is set to keep-alive.
So I set the transfer encoding and a "Connection" header in 3.1, but
the problem persists.
Two differences persist, and I couldn't find a way to backport them to
3.1: chunk size is 800 in 4.1 and 1000 in 3.1; and the order of HTTP
headers is different in each case.
I have no other idea, any suggestion is welcome.
Francesco.
Il 08/03/2011 14.08, Francesco Marchetti-Stasi ha scritto:
Hello,
in one of the servlet of my web application I receive a multipart
form, from which I have to extract the file input stream and send it
via PUT to an existing servlet on an Alfresco repository.
I managed to accomplish this with httpclient 4.1, with the following
code fragment:
HttpClient httpclient = new DefaultHttpClient();
HttpPut httpput = new HttpPut(uploadUrl) ;
InputStreamEntity entity = new
InputStreamEntity(is, -1) ;
httpput.setEntity(entity);
HttpResponse alfResponse =
httpclient.execute(httpput);
HttpEntity resEntity = alfResponse.getEntity();
System.out.println("Status Line from
alfresco: " + alfResponse.getStatusLine().toString());
resEntity.getContent().close() ;
Unfortunately I have to use httpclient 3.1, since I also have to use
a third parti library (Remote Alfresco Access by Rivet logic) which
needs this version. So I tried to translate the above into the
following:
HttpClient httpclient = new HttpClient();
PutMethod method = new PutMethod(uploadUrl);
RequestEntity entity = new
InputStreamRequestEntity(is) ;
method.setRequestEntity(entity) ;
int statusCode =
httpclient.executeMethod(method);
is.close() ;
System.out.println("Status code: " +
statusCode) ;
but in ths case I get a "417" status code, corresponding to the
dreadful "Expectation Failed" message (I have seen it a few times
during my first attempts, in which I was using 4.0).
There are still a few tests I can try (first and foremost, sniffing
the network traffic in the two cases), but in the meantime I thought
I could ask if anybody has experience using PutMethod with 3.1, and
if there is something clearly wrong with my code...
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]