Hi,
I am getting a ClientProtocolException for a delete request. The response
is "204 No Content" and seems to be a bug in httpclient.
I am creating the transport like this
transport = new ApacheHttpTransport();
final RequestConfig defaultRequestConfig = RequestConfig.DEFAULT;
final RegistryBuilder<ConnectionSocketFactory> builder =
RegistryBuilder.<ConnectionSocketFactory>create()
.register("http",
PlainConnectionSocketFactory.getSocketFactory());
// allow a customized SSLConnectionSocketFactory to be used
if (this.sslConnectionSocketFactory != null) {
builder.register("https", this.sslConnectionSocketFactory);
} else {
builder.register("https",
SSLConnectionSocketFactory.getSocketFactory());
}
final Registry<ConnectionSocketFactory> registry = builder.build();
final PoolingHttpClientConnectionManager cm =
new PoolingHttpClientConnectionManager(registry);
// Increase max total connection
cm.setMaxTotal(this.maxConnections);
// Increase default max connection per route
cm.setDefaultMaxPerRoute(this.maxConnections);
//close expired connections
cm.closeExpiredConnections();
final HttpClient client = HttpClientBuilder.create()
.setConnectionManager(cm)
.setDefaultRequestConfig(defaultRequestConfig)
.setMaxConnPerRoute(this.maxConnections)
.setConnectionReuseStrategy(
DefaultConnectionReuseStrategy.INSTANCE)
.build();
transport.setClient(client);
transport.setServerUrl(serverUrl);
transport.setUsername(username);
transport.setPassword(password);
transport.setBasicAuth(hasText(username) || hasText(password));
return transport;
and calling transport.delete(httpparams) and the server it is trying to
call seem to be fine no stack trace and access log seems behave as expected.
I enabled some debug logging which is indicating that there might be a bug
with the library
Sat Jul 12 07:22:33.516 PDT 2014 | "ajp-bio-8009"-exec-2 |
org.apache.http.impl.conn.DefaultHttpResponseParser | DEBUG | Garbage in
response: HTTP/1.1 204 No Content
Sat Jul 12 07:22:33.516 PDT 2014 | "ajp-bio-8009"-exec-2 |
org.apache.http.impl.conn.DefaultHttpResponseParser | DEBUG | Garbage in
response: Date: Sat, 12 Jul 2014 14:22:33 GMT
Sat Jul 12 07:22:33.516 PDT 2014 | "ajp-bio-8009"-exec-2 |
org.apache.http.impl.conn.DefaultHttpResponseParser | DEBUG | Garbage in
response: Server: Apache
Sat Jul 12 07:22:33.517 PDT 2014 | "ajp-bio-8009"-exec-2 |
org.apache.http.impl.conn.DefaultHttpResponseParser | DEBUG | Garbage in
response: Access-Control-Allow-Origin: *
Sat Jul 12 07:22:33.517 PDT 2014 | "ajp-bio-8009"-exec-2 |
org.apache.http.impl.conn.DefaultHttpResponseParser | DEBUG | Garbage in
response: Access-Control-Allow-Methods: GET, POST, PUT, DELE
TE, OPTIONS
Sat Jul 12 07:22:33.517 PDT 2014 | "ajp-bio-8009"-exec-2 |
org.apache.http.impl.conn.DefaultHttpResponseParser | DEBUG | Garbage in
response: Access-Control-Allow-Headers: Authorization, Conte
nt-Type
Sat Jul 12 07:22:33.517 PDT 2014 | "ajp-bio-8009"-exec-2 |
org.apache.http.impl.conn.DefaultHttpResponseParser | DEBUG | Garbage in
response: Access-Control-Max-Age: 86400
Sat Jul 12 07:22:33.518 PDT 2014 | "ajp-bio-8009"-exec-2 |
org.apache.http.impl.conn.DefaultHttpResponseParser | DEBUG | Garbage in
response: Content-Encoding: gzip
Sat Jul 12 07:22:33.518 PDT 2014 | "ajp-bio-8009"-exec-2 |
org.apache.http.impl.conn.DefaultHttpResponseParser | DEBUG | Garbage in
response: Content-Length: 20
Sat Jul 12 07:22:33.518 PDT 2014 | "ajp-bio-8009"-exec-2 |
org.apache.http.impl.conn.DefaultHttpResponseParser | DEBUG | Garbage in
response: Keep-Alive: timeout=15, max=65
Sat Jul 12 07:22:33.518 PDT 2014 | "ajp-bio-8009"-exec-2 |
org.apache.http.impl.conn.DefaultHttpResponseParser | DEBUG | Garbage in
response: Connection: Keep-Alive
Sat Jul 12 07:22:33.519 PDT 2014 | "ajp-bio-8009"-exec-2 |
org.apache.http.impl.conn.DefaultHttpResponseParser | DEBUG | Garbage in
response: Content-Type: application/json;charset=UTF-8
Sat Jul 12 07:22:33.519 PDT 2014 | "ajp-bio-8009"-exec-2 |
org.apache.http.impl.conn.DefaultHttpResponseParser | DEBUG | Garbage in
response:
Sat Jul 12 07:22:48.532 PDT 2014 | "ajp-bio-8009"-exec-2 |
org.apache.http.impl.conn.DefaultHttpResponseParser | DEBUG | Garbage in
response:
The root cause is
Caused by: org.apache.http.ProtocolException: The server failed to respond
with a valid HTTP response
at
org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:151)
at
org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57)
at
org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:260)
at
org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:161)
at
org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:153)
at
org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:271)
at
org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123)
at
org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:254)
at
org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195)
at
org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86)
at
org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
at
org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
Please let me know if I am doing something wrong and thanks in advance.
--
-SK.