Как поймать (http) код ответа с SaxParser.parse - PullRequest
1 голос
/ 12 марта 2012

Я использую SaxParser для анализа xml, получаемого с (OAI) сервера.Этот xml может сгенерировать еще один запрос от меня на сервер, чтобы получить другой xml и т. Д.

Некоторые серверы могут воспринимать эти последующие запросы как атаку отказа в обслуживании и возвращать «HTTP-код ответа: 503».

Как я могу поймать код ответа?

Вот код, который я использую:

try
    {
        InputSource is = new InputSource( uri );
        is.setEncoding( "UTF-8" );
        parser.parse( is, handler );
        parsed = true;
    }
    catch ( IOException ioException )
    {
        ...here should happen the response code handling...

        persistError( "Error(IOException) in parsing: " + ioException.getMessage() );
    }
    catch ( SAXException saxException )
    {
        persistError( "Error(SAXException) in parsing: " + saxException.getMessage() );
        // we do not retry to parse if the error is a parsing error
        retry = RETRY_FETCH_URL + 1;
    }

1 Ответ

1 голос
/ 24 февраля 2017

Вы всегда можете проверить код ответа перед вызовом парсера.Например:

HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
final int responseCode = connection.getResponseCode();
if (responseCode < 200 || responseCode > 299) {
    log.info("Response " + responseCode + " opening connection to " + url);
    return;
}
try (Reader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"))) {
    InputSource is = new InputSource(reader);
    is.setEncoding( "UTF-8" );
    parser.parse(is, handler);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...