2012-03-12 48 views
1

我正在使用SaxParser解析從OAI服務器接收的xml。這個XML可以從我生成另一個請求到服務器來獲得另一個XML等等。如何使用SaxParser.parse捕獲(http)響應代碼

某些服務器可以將這些後續請求理解爲拒絕服務攻擊並返回「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

解析器是您希望「捕捉」web異常的最後一個地方,除非異常以XML格式返回並且您想解析它。您是否嘗試過在HTTP請求級別捕獲異常?邏輯通常按照HTTP響應!= 200 - >的方式進行處理。否則 - >解析響應。您應該可以通過查看HTTP請求返回的頭來檢查HTTP響應代碼,而不必將其解析出來。 – FloppyDisk 2012-03-12 11:41:13

回答

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