2016-05-16 4 views
-1

Ich habe eine Liste mit Domänen. Wenn ich über diese Liste iteriere, bekomme ich Domains MX-Records. Wenn die Domäne ungültig ist, versucht catch block NamingException auszulösen und das Iterieren über die Liste wird gestoppt. Wie führe ich die Programmausführung nach dem Auslösen einer Namensausnahme fort?NamingException über Domain-Namen JAVA

try { 

       logger(clazz, "job started"); 

       List<Domain> domains = new ArrayList<>(); 
       domains.addAll(domManager.getActiveDoms()); 

       for (Domain d : domains) { 
        Attributes attributes = iDirC.getAttributes("dns:/" + d.getName(), new String[] { "MX" }); 
        Attribute attributeMX = attributes.get("MX"); 
        System.out.println(attributes); 
       } 

      } catch (NamingException e) { 
       e.printStackTrace(); 
      } 

Antwort

2

Ihr Code hat einen Try-Catch-Block mit einer Schleife im Innern, auf diese Weise, wenn etwas schiefgeht, wird das Programm abbrechen (wegen e.printStackTrace()). Beachten Sie, dass Sie "(...) nach dem Auslösen einer Namensausnahme" gesagt haben, und das ist nicht was passiert! Um eine Ausnahme auszulösen, müssen Sie throw new NamingException("cause"); verwenden und eine throws NamingException in Ihrer Methodendeklaration haben.

Beantworten Sie jetzt Ihre Frage: Wenn Sie den Fehler innerhalb der Schleife behandeln, können Sie fortfahren (beachten Sie, dass wenn Sie e.printStackTrace() haben, das Programm dort immer noch endet).

ich tun würde, so etwas wie:

logger(clazz, "job started"); 

List<Domain> domains = new ArrayList<>(); 
domains.addAll(domManager.getActiveDoms()); 

for (Domain d : domains) { 
    try { 
     Attributes attributes = iDirC.getAttributes("dns:/" + d.getName(), new String[] { "MX" }); 
     Attribute attributeMX = attributes.get("MX"); 
     System.out.println(attributes); 

    } catch (NamingException e) { 
     //do somethig here like `System.out.println("error message!");` 
    } 
} 

Hope this Sie hilft!