Détection des exceptions causées par des erreurs réseau temporaires


Je dois télécharger des URL, et il peut arriver que pendant les opérations, une exception puisse se produire, comme java.net.NoRouteToHostException. Je considère que c'est une exception d'erreur temporaire, car le téléchargement peut réussir si vous réessayez après un certain temps.
Donc, j'aimerais attraper toutes ces exceptions liées aux erreurs temporaires, et j'ai commencé avec celles-ci: java.net.NoRouteToHostException, java.net.SocketException
Pouvez-vous énumérer d'autres exceptions comme celles-ci?

Author: cdarwin, 2011-02-24

4 answers

java.net.SocketException est le parent de java.net.NoRouteToHostException de sorte que vous pourriez peut-être attraper le parent. Les autres enfants de SocketException sont BindException, ConnectException et PortUnreachableException. Peut-être que c'est ok pour attraper seulement SocketExceptiondans votre cas...

 4
Author: reef, 2011-02-24 15:46:45

Un modèle qui est parfois utile pour traiter les erreurs transitoires sur les opérations réessayables est de définir une interface de rappel d'erreur et certaines classes qui l'implémentent; lorsqu'une erreur se produit, informez l'objet de rappel et laissez-le décider si une exception doit être levée ou si l'action doit être réessayée. Parce que les classes de communications existantes ne suivent pas un tel modèle, il peut être nécessaire d'attraper leurs exceptions et de les transformer en rappels.

Notez que ceci l'approche permet une gestion beaucoup plus propre de nombreux scénarios de gestion des erreurs que la gestion normale des exceptions. Entre autres choses, il est facile de définir des stratégies pour combien de tentatives peut être tenté, combien de temps ils peuvent prendre, etc ... et fournit également un moyen de sauter de futures tentatives si quelque chose comme une demande "annuler" est reçu.

 1
Author: supercat, 2011-02-25 22:42:38

Comme @reef l'a déjà dit java.net.NoRouteToHostException exntends java.net.SocketException, donc si vous attrapez java.net.SocketException, cela suffit. Mais java. net.SocketException étend IOException et je pense que c'est ce que vous devriez vraiment attraper. Tous les problèmes d'E / S devraient lever cette exception.

 0
Author: AlexR, 2011-02-24 15:47:06

HttpRetryException est une autre. Peut - être tout dans java.net cela n'étend pas SocketException?

Un moyen rapide (et très sale) pourrait être

try {
....
} catch(Exception e) {
    if(e.getClass().getPackage().getName().equalsIgnoreCase("java.net")) {
        retry();
    }
}
 0
Author: gfelisberto, 2011-02-24 15:50:24