2010-11-08 14 views
7

Estoy usando el XMLReader para leer simplemente un feed como el siguiente."Tiempo de espera durante la búsqueda" URLFetch GAE/J

URLConnection urlConnection = url.openConnection(); 
XmlReader reader = new XmlReader(urlConnection); 

Cuando esto se llama recibo dentro de los 5 segundos una IOException "Tiempo de espera mientras recuperaba". Así que traté de establecer los tiempos de espera al máximo. (10 segundos) pero todavía no hubo suerte y sigue siendo una IOExepción en 5 segundos.

urlConnection.setConnectTimeout(10000); 

(el máximo se afirma en la documentación: http://code.google.com/intl/nl-NL/appengine/docs/java/urlfetch/overview.html)

Parece que el tamaño de la alimentación es demasiado grande. Cuando llamo a un feed más pequeño , funciona correctamente. ¿Hay alguna solución o solución para esto? Necesito poder llamar alimentaciones más grandes.

Respuesta

10

Debe utilizar setReadTimeout método que establece el plazo de lectura:

urlConnection.setReadTimeout(10000); //10 Sec 

usted debería ser capaz de descargar los alimentos más grandes en 10 segundos.
Si aún tiene problemas, intente cambiar el enfoque de this.

+1

Gracias por la respuesta rápida. Lo intenté, desafortunadamente sigue siendo la misma excepción. Parece que no hay respuesta en absoluto dentro de los 5 segundos. –

+1

@Ben me suena extraño; ¿Cuántos segundos toma obtener este feed a través del navegador, por ejemplo? – systempuntoout

+0

Tarda unos 10 segundos en el navegador (FireFox/Chrome/IE) –

0

La razón es:

Si no hay datos disponibles para el período de tiempo de espera de lectura, una excepción puede ser lanzado. De the doc of Oracle

Un SocketTimeoutException puede ser lanzado durante la lectura de la corriente de entrada se devuelve si el tiempo de espera de lectura expira antes de que los datos están disponibles para lectura.

Por cierto, ReadTimeout es diferente con ConnectTimeout, el tiempo de espera de lectura es el tiempo de espera para obtener datos desde el host, ver different connection timeout and read timeout

Así como @systempuntoout respuesta, necesita poner el tiempo de leer.

Cuestiones relacionadas