Aufrufstack von Ausnahmen verändern

Wenn wir in einer Ausnahmebehandlung eine Exception e auffangen und genau diese dann mit throw e weiterleiten, müssen wir uns bewusst sein, dass die Ausnahme e auch den Aufrufstack weitergibt. Aus dem vorangehenden Beispiel:

java.net.URISyntaxException: Malformed escape pair at index 7: http://%

at java.net.URI$Parser.fail(URI.java:2827)

at java.net.URI$Parser.scanEscape(URI.java:2957)

at java.net.URI.<init>(URI.java:595)

at Rethrow.createUriFromHost(Rethrow.java:9)

at Rethrow.main(Rethrow.java:24)

Die main()-Methode fängt den Fehler von createUriFromHost() ab, aber diese Methode steht nicht ganz oben im Aufrufstack. Die Ausnahme stammte ja gar nicht von createUriFromHost() selbst, sondern von fail(), sodass fail() oben steht. Ist das nicht gewünscht, kann es korrigiert werden, denn die Basisklasse für alle Ausnahmen Throwable bietet die Methode fillInStackTrace(), mit dem sich der Aufrufstack neu füllen lässt. Unsere bekannte Methode createUriFromHost() soll auf fillInStackTrace() zurückgreifen:

public static URI createUriFromHost( String host ) throws URISyntaxException

{

try

{

return new URI( "http://" + host );

}

catch ( URISyntaxException e )

{

System.err.println( "Hilfe! " + e.getMessage() );

e.fillInStackTrace();

throw e;

}

}

Kommt es in createUriFromHost() zur URISyntaxException, so fängt unsere Methode diese ab. Ursprünglich ist in e in der Aufrufstack mit der fail()-Methode ganz oben gespeichert, allerdings löscht fillInStackTrace() zunächst den ganzen Stracktrace und füllt ihn neu mit dem Pfad, den der aktuelle Thread zu der der Methode führt, die fillInStackTrace() aufruft – das ist createUriFromHost(). Daher beginnt die Konsolenausgabe auch mit unserer Methode:

Hilfe! Malformed escape pair at index 7: http://%

java.net.URISyntaxException: Malformed escape pair at index 7: http://%

at RethrowWithFillInStackTrace.createUriFromHost(RethrowWithFillInStackTrace.java:14)

at RethrowWithFillInStackTrace.main(RethrowWithFillInStackTrace.java:24)

Ähnliche Beiträge

Veröffentlicht in Insel

Ein Gedanke zu “Aufrufstack von Ausnahmen verändern

  1. Darf ich mal anregen Fachbegriffe wie Exception nicht einzudeutschen.
    Es schreibt ja auch niemand „Zwischennetz“ (Internet) oder „Zusammentrager“ (Compiler) – Okay Compiler könnte deutsch auch „Übersetzer“ sein (sagt auch niemand), aber das „Zusammentrager“ war einfach zu lustig, um es nicht zu schreiben *gg*.

    Im Artikel steht dann eh wieder „Exception“, aber gerade beim lesen des Titels denk ich mir bei eingedeutschten Fachbegriffen oft (weiß nicht wie es anderen geht) „Was will er denn jetzt? … Achso!)
    Außerdem müsste es dann auch „Aufrufstapel“ statt -stack heißen, usw.
    Wenn man das konsequent machen würde wüßte keiner mehr wovon die Rede ist bzw. nur mir sehr viel mehr gedanklichen Umwegen.

    Ist natürlich kein Drama, ist mir nur so aufgefallen.
    Nix für ungut 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.