From: <svn...@os...> - 2012-06-06 15:19:13
|
Author: dwins Date: 2012-06-06 08:19:01 -0700 (Wed, 06 Jun 2012) New Revision: 38801 Modified: trunk/modules/library/main/src/main/java/org/geotools/xml/transform/TransformerBase.java trunk/modules/library/main/src/test/java/org/geotools/xml/TransformerBaseTest.java Log: GEOT-4167 Avoid loss of diagnostic info when errors occur while using transactional XML encoding Modified: trunk/modules/library/main/src/main/java/org/geotools/xml/transform/TransformerBase.java =================================================================== --- trunk/modules/library/main/src/main/java/org/geotools/xml/transform/TransformerBase.java 2012-06-06 15:18:38 UTC (rev 38800) +++ trunk/modules/library/main/src/main/java/org/geotools/xml/transform/TransformerBase.java 2012-06-06 15:19:01 UTC (rev 38801) @@ -468,6 +468,10 @@ public void commit() { _start(element, attributes); } + + public String toString() { + return "Start(" + element + ", " + attributes + ")"; + } } /** @@ -484,6 +488,10 @@ public void commit() { _chars(text); } + + public String toString() { + return "Chars(" + text + ")"; + } } /** @@ -500,6 +508,10 @@ public void commit() { _cdata(text); } + + public String toString() { + return "CData(" + text + ")"; + } } /** @@ -516,6 +528,10 @@ public void commit() { _end(element); } + + public String toString() { + return "End(" + element + ")"; + } } /** @@ -533,18 +549,33 @@ */ private class BufferedBackend implements Backend { public void start(String element, Attributes attributes) { + if (element == null) { + throw new NullPointerException("Attempted to start XML tag with null element"); + } + if (attributes == null) { + throw new NullPointerException("Attempted to start XML tag with null attributes"); + } pending.add(new Start(element, attributes)); } public void chars(String text) { + if (text == null) { + throw new NullPointerException("Attempted to start text block with null text"); + } pending.add(new Chars(text)); } public void cdata(String text) { + if (text == null) { + throw new NullPointerException("Attempted to start CDATA block with null text"); + } pending.add(new CData(text)); } public void end(String element) { + if (element == null) { + throw new NullPointerException("Attempted to close tag with null element"); + } pending.add(new End(element)); } } @@ -662,7 +693,13 @@ protected void commit() { if (backend != bufferedBackend) throw new IllegalStateException("Can't commit without a mark"); for (Action a : pending) { - a.commit(); + try { + a.commit(); + } catch (Exception e) { + String message = + "Error while committing XML elements; specific element was: " + a; + throw new RuntimeException(message, e); + } } pending.clear(); backend = directBackend; Modified: trunk/modules/library/main/src/test/java/org/geotools/xml/TransformerBaseTest.java =================================================================== --- trunk/modules/library/main/src/test/java/org/geotools/xml/TransformerBaseTest.java 2012-06-06 15:18:38 UTC (rev 38800) +++ trunk/modules/library/main/src/test/java/org/geotools/xml/TransformerBaseTest.java 2012-06-06 15:19:01 UTC (rev 38801) @@ -82,4 +82,15 @@ String actual = tx.transform(10); assertEquals(expected, actual); } + + public void testPassingInNull() throws FileNotFoundException, TransformerException { + ExampleTransformer tx = new ExampleTransformer(0, 0, true); + try { + tx.transform(null); + fail("Expected NullPointerException but none was thrown."); + } catch (TransformerException e) { + // Swallow exception IFF it was due to a NullPointerException; otherwise rethrow + if (!(e.getCause() instanceof NullPointerException)) throw e; + } + } } |