2011-02-24 3 views
3

일부 URL을 다운로드해야하며 작동 중에 예외가 발생할 수 있습니다 (예 : java.net.NoRouteToHostException). 잠시 후에 다시 시도하면 다운로드가 성공할 수 있으므로 임시 오류 예외로 간주됩니다.
임시 오류와 관련된 모든 예외를 잡으려고합니다. 다음과 같이 시작했습니다. java.net.NoRouteToHostException, java.net.SocketException
이러한 예외를 나열 할 수 있습니까?임시 네트워크 오류로 인한 예외 캐치

+1

java.net.SocketException은 java.net.NoRouteToHostException의 부모이므로 어쩌면 부모 만 잡을 수 있습니다. SocketException의 다른 하위 클래스는 BindException, ConnectException 및 PortUnreachableException입니다. 어쩌면 당신의 경우 SocketException 만 잡아도 괜찮습니다. – reef

+0

대답을 내 대답으로 추가했습니다. – reef

답변

4

java.net.SocketExceptionjava.net.NoRouteToHostException의 부모이므로 어쩌면 부모 만 잡을 수 있습니다. SocketException의 다른 어린이는 BindException, ConnectExceptionPortUnreachableException입니다. 어쩌면 SocketException을 잡는 것이 좋습니다.

0

@reef가 이미 java.net.NoRouteToHostException을 exntends java.net.SocketException이라고 했으므로 java.net.SocketException 만 잡으면 충분합니다. 하지만 java.net.SocketException IOException을 확장하고 이것이 당신이 정말로 잡아야한다고 생각합니다. 모든 입출력 문제는이 예외를 throw해야합니다.

0

HttpRetryException은 다른 것입니다. SocketException을 확장하지 않는 java.net의 모든 것?

한 빠른 (아주 더러운) 방법은 재시도 할 작업에 일시적인 오류를 처리하는 것이 유용하다

try { 
.... 
} catch(Exception e) { 
    if(e.getClass().getPackage().getName().equalsIgnoreCase("java.net")) { 
     retry(); 
    } 
} 
+1

임시 네트워크 오류로 java.net.MalformedURLException을 처리하지 않을 수도 있습니다. – satur9nine

1

하나 개의 패턴이 될 수하면 오류 콜백 인터페이스와 구현 어떤 클래스를 정의하는 것입니다 그것; 오류가 발생하면 콜백 개체를 알게하고 예외를 throw해야하는지 또는 작업을 다시 시도해야하는지 결정합니다. 기존 통신 클래스는 이러한 패턴을 따르지 않으므로 예외를 포착하여 콜백으로 변환해야 할 수 있습니다.

이 방법을 사용하면 일반적인 예외 처리보다 많은 오류 처리 시나리오를보다 명확하게 처리 할 수 ​​있습니다. 무엇보다 시도 재 시도 횟수, 소요 시간 등을 쉽게 설정할 수 있으며, "취소"요청과 같은 항목이 있으면 향후 재 시도를 건너 뛸 수있는 수단을 제공합니다.

관련 문제