{"id":1041,"date":"2011-07-15T20:08:48","date_gmt":"2011-07-15T18:08:48","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/2011\/07\/aufrufstack-von-ausnahmen-verndern\/"},"modified":"2011-07-15T20:08:48","modified_gmt":"2011-07-15T18:08:48","slug":"aufrufstack-von-ausnahmen-verndern","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2011\/07\/aufrufstack-von-ausnahmen-verndern\/","title":{"rendered":"Aufrufstack von Ausnahmen ver&auml;ndern"},"content":{"rendered":"<p>Wenn wir in einer Ausnahmebehandlung eine Exception e auffangen und genau diese dann mit throw e weiterleiten, m\u00fcssen wir uns bewusst sein, dass die Ausnahme e auch den Aufrufstack weitergibt. Aus dem vorangehenden Beispiel:<\/p>\n<p>java.net.URISyntaxException: Malformed escape pair at index 7: http:\/\/%<\/p>\n<p><b>at java.net.URI$Parser.fail(URI.java:2827)<\/b><\/p>\n<p>at java.net.URI$Parser.scanEscape(URI.java:2957)<\/p>\n<p>\u2026<\/p>\n<p>at java.net.URI.&lt;init&gt;(URI.java:595)<\/p>\n<p><b>at Rethrow.createUriFromHost(Rethrow.java:9)<\/b><\/p>\n<p>at Rethrow.main(Rethrow.java:24)<\/p>\n<p>Die main()-Methode f\u00e4ngt 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\u00fcnscht, kann es korrigiert werden, denn die Basisklasse f\u00fcr alle Ausnahmen Throwable bietet die Methode fillInStackTrace(), mit dem sich der Aufrufstack neu f\u00fcllen l\u00e4sst. Unsere bekannte Methode createUriFromHost() soll auf fillInStackTrace() zur\u00fcckgreifen:<\/p>\n<p>public static URI createUriFromHost( String host ) throws URISyntaxException<\/p>\n<p>{<\/p>\n<p>try<\/p>\n<p>{<\/p>\n<p>return new URI( &quot;http:\/\/&quot; + host );<\/p>\n<p>}<\/p>\n<p>catch ( URISyntaxException e )<\/p>\n<p>{<\/p>\n<p>System.err.println( &quot;Hilfe! &quot; + e.getMessage() );<\/p>\n<p><b><\/b><b>e.fillInStackTrace();<\/b><\/p>\n<p><b><\/b>throw e;<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>Kommt es in createUriFromHost() zur URISyntaxException, so f\u00e4ngt unsere Methode diese ab. Urspr\u00fcnglich ist in e in der Aufrufstack mit der fail()-Methode ganz oben gespeichert, allerdings l\u00f6scht fillInStackTrace() zun\u00e4chst den ganzen Stracktrace und f\u00fcllt ihn neu mit dem Pfad, den der aktuelle Thread zu der der Methode f\u00fchrt, die fillInStackTrace() aufruft \u2013 das ist createUriFromHost(). Daher beginnt die Konsolenausgabe auch mit unserer Methode:<\/p>\n<p>Hilfe! Malformed escape pair at index 7: http:\/\/%<\/p>\n<p>java.net.URISyntaxException: Malformed escape pair at index 7: http:\/\/%<\/p>\n<p>at <b>RethrowWithFillInStackTrace.createUriFromHost(RethrowWithFillInStackTrace.java:14)<\/b><\/p>\n<p>at RethrowWithFillInStackTrace.main(RethrowWithFillInStackTrace.java:24)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn wir in einer Ausnahmebehandlung eine Exception e auffangen und genau diese dann mit throw e weiterleiten, m\u00fcssen 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) \u2026 at java.net.URI.&lt;init&gt;(URI.java:595) at Rethrow.createUriFromHost(Rethrow.java:9) at Rethrow.main(Rethrow.java:24) Die main()-Methode [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11],"tags":[],"class_list":["post-1041","post","type-post","status-publish","format-standard","hentry","category-insel"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1041","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=1041"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1041\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=1041"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=1041"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=1041"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}