2010-11-08 2 views
7

Я использую XMLReader, чтобы просто читать канал, как показано ниже.«Тайм-аут при извлечении» URLFetch GAE/J

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

Когда это называется я получаю в течение 5 секунд IOException «Тайм-аут при выборке». Поэтому я попытался установить таймауты на максимум. (10 сек.), Но до сих пор не везет и все еще является IOExeption за 5 секунд.

urlConnection.setConnectTimeout(10000); 

(макс указано в документации: http://code.google.com/intl/nl-NL/appengine/docs/java/urlfetch/overview.html)

Кажется, что размер корма слишком велик. Когда я звоню на меньший канал , он работает правильно. Есть ли какое-либо решение или решение для этого? Мне нужно иметь возможность обращаться к более крупным каналам.

ответ

10

Вы должны использовать setReadTimeout метод, который устанавливает срок для чтения:

urlConnection.setReadTimeout(10000); //10 Sec 

Вы должны иметь возможность загружать большие каналы в течение 10 секунд.
Если у вас все еще есть проблемы, попробуйте поиграть с this.

+1

Спасибо за быстрый ответ. Я попробовал это, к сожалению, все тот же Исключение. Кажется, в течение 5 секунд нет ответа. –

+1

@Ben звучит странно для меня; сколько секунд требуется, чтобы получить этот канал через браузер, например? – systempuntoout

+0

Это займет около 10 секунд. в браузере (FireFox/Chrome/IE) –

0

Причина заключается в том:

Если данные не доступны для периода тайм-аута чтения, исключение может быть выброшен. От the doc of Oracle

SocketTimeoutException может быть выброшен при чтении из возвращенного входного потока, если тайм-аут чтения истекает до того, данные доступны для чтения.

Кстати, ReadTimeout отличается с ConnectTimeout, тайм-аут чтения является тайм-аут, чтобы получить данные от хоста, см different connection timeout and read timeout

Итак, как @systempuntoout ответ, нужно задать таймаут.

Смежные вопросы