2012-03-12 5 views
1

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

Некоторые серверы могут понимать эти последующие запросы как атаку отказа в обслуживании и возвращать «код ответа 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; 
    } 
+2

Парсеры - это последнее место, где вы хотите «поймать» веб-исключения, если исключение не будет возвращено как XML, и вы хотите его проанализировать. Вы пытались поймать исключение на уровне HTTP-запроса? Логика обычно протекает вдоль строк, если HTTP-ответ! = 200 -> сделать что-то, чтобы справиться с этим. Else -> проанализируйте ответ. Вы должны иметь возможность проверить код ответа HTTP, просто взглянув на возвращенный заголовок из HTTP-запроса, вместо того, чтобы анализировать его. – FloppyDisk

ответ

1

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

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); 
}