protocolversion org lorg logfactory failed didn dexpathlist commons caused android http

org - HttpClient en Android: NoHttpResponseException a través de UMTS/3G



didn t find class org apache http protocolversion on path dexpathlist[[ zip file (3)

Tengo mi aplicación de Android que usa HttpClient para alcanzar mi servlet implementado en mi Tomcat. Está instalado en mi HTC Magic.

Si lo lanzo cuando estoy conectado a Wifi: funciona. Si lo inicio cuando estoy conectado a 3G (red de datos GSM): no funciona pero se llega a mi servlet. En otras palabras, parece que mi teléfono nunca recibe la respuesta:

Technical problem while receiving response. org.apache.http.NoHttpResponseException: The target server failed to respond at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:85) at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174) at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:179) at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235) at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259) at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279) at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:410) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)

Si utilizo el navegador web a través de 3G para activar la página HTML de prueba que está empaquetada con mi servlet, llega al mismo servlet con éxito (la página recibe la respuesta).

¿Cómo podría depurar HttpClient o pedirle que descargue todo?

¿Alguien tiene una idea de lo que está pasando?



Finalmente me deshice de este problema: simplemente un encabezado HTTP que fue mal manejado por un servidor de calamar en el camino:

Espera: 100-Continuar

Parece que está allí de forma predeterminada con DefaultHttpClient en Android SDK. Para abordar esto, simplemente agregue eso en su código:

HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), false);


Me encontré con este problema también. Solo ocurrió esporádicamente, generalmente en una solicitud inicial de http. Las solicitudes posteriores funcionarán bien. Agregar setUseExpectContinue no parece funcionar.

La solución en mi caso fue agregar un controlador de reintento que reintentaría la solicitud en excepciones específicas:

HttpProtocolParams.setUseExpectContinue(client.getParams(), false); HttpRequestRetryHandler retryHandler = new HttpRequestRetryHandler() { public boolean retryRequest(IOException exception, int executionCount, HttpContext context) { // retry a max of 5 times if(executionCount >= 5){ return false; } if(exception instanceof NoHttpResponseException){ return true; } else if (exception instanceof ClientProtocolException){ return true; } return false; } }; client.setHttpRequestRetryHandler(retryHandler);