From f70ba2113a20afe81dc7e0641b5c25d0b8546f34 Mon Sep 17 00:00:00 2001 From: Mark Raynsford Date: Thu, 15 Oct 2020 14:29:19 +0000 Subject: [PATCH 1/5] Begin next development iteration --- com.io7m.blackthorne.api/pom.xml | 2 +- com.io7m.blackthorne.jxe/pom.xml | 2 +- com.io7m.blackthorne.tests/pom.xml | 2 +- pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/com.io7m.blackthorne.api/pom.xml b/com.io7m.blackthorne.api/pom.xml index 83ee74f..b7fd4fe 100644 --- a/com.io7m.blackthorne.api/pom.xml +++ b/com.io7m.blackthorne.api/pom.xml @@ -8,7 +8,7 @@ com.io7m.blackthorne com.io7m.blackthorne - 1.0.0 + 1.0.1-SNAPSHOT com.io7m.blackthorne.api diff --git a/com.io7m.blackthorne.jxe/pom.xml b/com.io7m.blackthorne.jxe/pom.xml index 9a9c1d0..0020339 100644 --- a/com.io7m.blackthorne.jxe/pom.xml +++ b/com.io7m.blackthorne.jxe/pom.xml @@ -8,7 +8,7 @@ com.io7m.blackthorne com.io7m.blackthorne - 1.0.0 + 1.0.1-SNAPSHOT com.io7m.blackthorne.jxe diff --git a/com.io7m.blackthorne.tests/pom.xml b/com.io7m.blackthorne.tests/pom.xml index a1760ae..c5f732b 100644 --- a/com.io7m.blackthorne.tests/pom.xml +++ b/com.io7m.blackthorne.tests/pom.xml @@ -8,7 +8,7 @@ com.io7m.blackthorne com.io7m.blackthorne - 1.0.0 + 1.0.1-SNAPSHOT com.io7m.blackthorne.tests diff --git a/pom.xml b/pom.xml index a9d8e3d..47f91b3 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.io7m.blackthorne com.io7m.blackthorne - 1.0.0 + 1.0.1-SNAPSHOT pom com.io7m.blackthorne From 0ca01a259aee1948654438b50c8f3381fff19cfd Mon Sep 17 00:00:00 2001 From: Mark Raynsford Date: Sat, 24 Oct 2020 20:19:30 +0000 Subject: [PATCH 2/5] Add a convenient leaf handler This adds a convenient handler class for elements that consist only of attributes. Affects: https://github.com/io7m/blackthorne/issues/2 --- com.io7m.blackthorne.api/pom.xml | 2 +- .../blackthorne/api/BTLeafElementHandler.java | 80 +++++++++++++++++++ .../api/BTLeafElementHandlerType.java | 45 +++++++++++ .../io7m/blackthorne/api/package-info.java | 2 +- com.io7m.blackthorne.jxe/pom.xml | 2 +- com.io7m.blackthorne.tests/pom.xml | 2 +- .../blackthorne/tests/BlackthorneTest.java | 32 ++++++++ pom.xml | 4 +- 8 files changed, 163 insertions(+), 6 deletions(-) create mode 100644 com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTLeafElementHandler.java create mode 100644 com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTLeafElementHandlerType.java diff --git a/com.io7m.blackthorne.api/pom.xml b/com.io7m.blackthorne.api/pom.xml index b7fd4fe..bb7bd3a 100644 --- a/com.io7m.blackthorne.api/pom.xml +++ b/com.io7m.blackthorne.api/pom.xml @@ -8,7 +8,7 @@ com.io7m.blackthorne com.io7m.blackthorne - 1.0.1-SNAPSHOT + 1.1.0-SNAPSHOT com.io7m.blackthorne.api diff --git a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTLeafElementHandler.java b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTLeafElementHandler.java new file mode 100644 index 0000000..42265ce --- /dev/null +++ b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTLeafElementHandler.java @@ -0,0 +1,80 @@ +/* + * Copyright © 2019 Mark Raynsford http://io7m.com + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR + * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + + +package com.io7m.blackthorne.api; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +import java.util.Objects; + +/** + * A convenient handler dealing with elements that do not have children. + * + * @param The type of returned values + */ + +public final class BTLeafElementHandler + implements BTElementHandlerType +{ + private final BTQualifiedName name; + private final BTLeafElementHandlerType handler; + private S result; + + /** + * Construct a handler. + * + * @param inName The name of elements handled by this handler + * @param inHandler The element handler + */ + + public BTLeafElementHandler( + final BTQualifiedName inName, + final BTLeafElementHandlerType inHandler) + { + this.name = + Objects.requireNonNull(inName, "name"); + this.handler = + Objects.requireNonNull(inHandler, "handler"); + } + + @Override + public String name() + { + return this.name.localName(); + } + + @Override + public void onElementStart( + final BTElementParsingContextType context, + final Attributes attributes) + throws SAXException + { + try { + this.result = this.handler.onElement(context, attributes); + } catch (final Exception e) { + throw context.parseException(e); + } + } + + @Override + public S onElementFinished( + final BTElementParsingContextType context) + { + return this.result; + } +} diff --git a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTLeafElementHandlerType.java b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTLeafElementHandlerType.java new file mode 100644 index 0000000..c15f070 --- /dev/null +++ b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTLeafElementHandlerType.java @@ -0,0 +1,45 @@ +/* + * Copyright © 2020 Mark Raynsford http://io7m.com + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR + * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +package com.io7m.blackthorne.api; + +import org.xml.sax.Attributes; + +/** + * An element handler that takes the attributes of a single element and + * produces an output value. + * + * @param The type of returned values + */ + +public interface BTLeafElementHandlerType +{ + /** + * Process the attributes of an element. + * + * @param context The parse context + * @param attributes The element attributes + * + * @return A value of {@code S} + * + * @throws Exception On errors + */ + + S onElement( + BTElementParsingContextType context, + Attributes attributes) + throws Exception; +} diff --git a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/package-info.java b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/package-info.java index f894c3c..81fbddc 100644 --- a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/package-info.java +++ b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/package-info.java @@ -19,7 +19,7 @@ */ @Export -@Version("1.0.0") +@Version("1.1.0") package com.io7m.blackthorne.api; import org.osgi.annotation.bundle.Export; diff --git a/com.io7m.blackthorne.jxe/pom.xml b/com.io7m.blackthorne.jxe/pom.xml index 0020339..71bcf35 100644 --- a/com.io7m.blackthorne.jxe/pom.xml +++ b/com.io7m.blackthorne.jxe/pom.xml @@ -8,7 +8,7 @@ com.io7m.blackthorne com.io7m.blackthorne - 1.0.1-SNAPSHOT + 1.1.0-SNAPSHOT com.io7m.blackthorne.jxe diff --git a/com.io7m.blackthorne.tests/pom.xml b/com.io7m.blackthorne.tests/pom.xml index c5f732b..2719293 100644 --- a/com.io7m.blackthorne.tests/pom.xml +++ b/com.io7m.blackthorne.tests/pom.xml @@ -8,7 +8,7 @@ com.io7m.blackthorne com.io7m.blackthorne - 1.0.1-SNAPSHOT + 1.1.0-SNAPSHOT com.io7m.blackthorne.tests diff --git a/com.io7m.blackthorne.tests/src/test/java/com/io7m/blackthorne/tests/BlackthorneTest.java b/com.io7m.blackthorne.tests/src/test/java/com/io7m/blackthorne/tests/BlackthorneTest.java index 89f7b10..c86a932 100644 --- a/com.io7m.blackthorne.tests/src/test/java/com/io7m/blackthorne/tests/BlackthorneTest.java +++ b/com.io7m.blackthorne.tests/src/test/java/com/io7m/blackthorne/tests/BlackthorneTest.java @@ -22,6 +22,7 @@ import com.io7m.blackthorne.api.BTElementParsingContextType; import com.io7m.blackthorne.api.BTException; import com.io7m.blackthorne.api.BTIgnoreUnrecognizedElements; +import com.io7m.blackthorne.api.BTLeafElementHandler; import com.io7m.blackthorne.api.BTParseError; import com.io7m.blackthorne.api.BTQualifiedName; import com.io7m.blackthorne.api.Blackthorne; @@ -1246,4 +1247,35 @@ public void testConvenience1() Assertions.assertEquals(SAXParseException.class, ex.getCause().getClass()); Assertions.assertEquals(2, ex.errors().size()); } + + /** + * Leaf element handlers work. + * + * @throws Exception On errors + */ + + @Test + public void testLeafIntegerAttr0() + throws Exception + { + final var intAttr = + new BTLeafElementHandler<>( + BTQualifiedName.of("urn:tests", "intA"), + BlackthorneTest::parseIntAttribute + ); + + final var handler = + BTContentHandler.builder() + .addHandler("urn:tests", "intA", context -> intAttr) + .build(URI.create("urn:text"), this::logError); + + final var reader = createReader(); + reader.setContentHandler(handler); + reader.setErrorHandler(handler); + reader.parse(resource("intA.xml")); + + Assertions.assertFalse(handler.failed()); + Assertions.assertEquals(0, this.errors.size()); + Assertions.assertEquals(BigInteger.valueOf(23L), handler.result().get()); + } } diff --git a/pom.xml b/pom.xml index 47f91b3..9304ac8 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.io7m.blackthorne com.io7m.blackthorne - 1.0.1-SNAPSHOT + 1.1.0-SNAPSHOT pom com.io7m.blackthorne @@ -33,7 +33,7 @@ 2.7.5 5.7.0 1.0.0 - 0.0.1-SNAPSHOT + 1.0.0 From 43a61dabdaf3983baf2a012770d10510d9a4c40b Mon Sep 17 00:00:00 2001 From: Mark Raynsford Date: Sat, 24 Oct 2020 20:31:45 +0000 Subject: [PATCH 3/5] Handlers may throw raw exceptions This adjusts the API to allow handlers to throw raw Exception values. The Exception values will be caught and a useful parse error will result (with the correct line/column numbers). This also removes the recent leaf element handler as similar functionality already existed. Affects: https://github.com/io7m/blackthorne/issues/2 --- .../api/BTAttributesHandlerType.java | 5 +- .../api/BTCharacterHandlerType.java | 6 +- .../blackthorne/api/BTContentHandler.java | 52 +++++++----- .../api/BTContentHandlerBuilderType.java | 4 +- .../api/BTElementHandlerConstructorType.java | 6 +- .../blackthorne/api/BTElementHandlerType.java | 17 ++-- .../com/io7m/blackthorne/api/BTException.java | 18 ++--- .../blackthorne/api/BTFunctorHandler.java | 9 +-- .../blackthorne/api/BTLeafElementHandler.java | 80 ------------------- .../api/BTLeafElementHandlerType.java | 45 ----------- .../api/BTScalarAttributeHandler.java | 3 +- .../api/BTScalarElementHandler.java | 4 +- .../io7m/blackthorne/api/BTStackHandler.java | 22 ++--- .../blackthorne/tests/BlackthorneTest.java | 4 +- 14 files changed, 78 insertions(+), 197 deletions(-) delete mode 100644 com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTLeafElementHandler.java delete mode 100644 com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTLeafElementHandlerType.java diff --git a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTAttributesHandlerType.java b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTAttributesHandlerType.java index 1aa1307..98aaec3 100644 --- a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTAttributesHandlerType.java +++ b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTAttributesHandlerType.java @@ -18,7 +18,6 @@ package com.io7m.blackthorne.api; import org.xml.sax.Attributes; -import org.xml.sax.SAXException; /** * A function that, given a set of attributes, returns a {@code T}. @@ -36,11 +35,11 @@ public interface BTAttributesHandlerType * * @return A value of {@code T} * - * @throws SAXException On errors + * @throws Exception On errors */ T parse( BTElementParsingContextType context, Attributes attributes) - throws SAXException; + throws Exception; } diff --git a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTCharacterHandlerType.java b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTCharacterHandlerType.java index 059cfc2..81820d3 100644 --- a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTCharacterHandlerType.java +++ b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTCharacterHandlerType.java @@ -17,8 +17,6 @@ package com.io7m.blackthorne.api; -import org.xml.sax.SAXException; - /** * A function that, given a string, returns a {@code T}. * @@ -37,7 +35,7 @@ public interface BTCharacterHandlerType * * @return A value of {@code T} * - * @throws SAXException On errors + * @throws Exception On errors */ T parse( @@ -45,5 +43,5 @@ T parse( char[] characters, int offset, int length) - throws SAXException; + throws Exception; } diff --git a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTContentHandler.java b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTContentHandler.java index fcb99f5..58b54bb 100644 --- a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTContentHandler.java +++ b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTContentHandler.java @@ -17,12 +17,6 @@ package com.io7m.blackthorne.api; import com.io7m.jlexing.core.LexicalPosition; -import java.net.URI; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Consumer; import org.xml.sax.Attributes; import org.xml.sax.Locator; import org.xml.sax.SAXException; @@ -30,6 +24,13 @@ import org.xml.sax.ext.DefaultHandler2; import org.xml.sax.ext.Locator2; +import java.net.URI; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.function.Consumer; + /** * A dispatching handler that produces values of type {@code T}. The handler is responsible for * instantiating a content handler based on the received document namespace URI. @@ -95,6 +96,18 @@ public static BTContentHandlerBuilderType builder( return new Builder<>(); } + private static String messageOrException( + final Exception e) + { + final var messageOrNull = e.getMessage(); + if (messageOrNull == null) { + return String.format( + "No error message provided for exception %s", + e.getClass().getName()); + } + return messageOrNull; + } + @Override public void setDocumentLocator( final Locator in_locator) @@ -109,12 +122,13 @@ public void startElement( final String localName, final String qualifiedName, final Attributes attributes) - throws SAXException { try { this.stackHandler.onElementStarted(namespaceURI, localName, attributes); } catch (final SAXParseException e) { this.error(e); + } catch (final Exception e) { + this.error(this.saxParseExceptionOf(e)); } } @@ -123,12 +137,13 @@ public void endElement( final String namespaceURI, final String localName, final String qualifiedName) - throws SAXException { try { this.stackHandler.onElementFinished(namespaceURI, localName); } catch (final SAXParseException e) { this.error(e); + } catch (final Exception e) { + this.error(this.saxParseExceptionOf(e)); } } @@ -137,12 +152,13 @@ public void characters( final char[] ch, final int start, final int length) - throws SAXException { try { this.stackHandler.onCharacters(ch, start, length); } catch (final SAXParseException e) { this.error(e); + } catch (final Exception e) { + this.error(this.saxParseExceptionOf(e)); } } @@ -189,18 +205,6 @@ public void fatalError( throw e; } - private static String messageOrException( - final Exception e) - { - final var messageOrNull = e.getMessage(); - if (messageOrNull == null) { - return String.format( - "No error message provided for exception %s", - e.getClass().getName()); - } - return messageOrNull; - } - private LexicalPosition currentLexical() { final LexicalPosition lexicalPosition; @@ -223,6 +227,12 @@ private LexicalPosition currentLexical() return lexicalPosition; } + private SAXParseException saxParseExceptionOf( + final Exception e) + { + return new SAXParseException(e.getLocalizedMessage(), this.locator, e); + } + /** * @return The parsed value */ diff --git a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTContentHandlerBuilderType.java b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTContentHandlerBuilderType.java index f5e08ee..82d7f2e 100644 --- a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTContentHandlerBuilderType.java +++ b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTContentHandlerBuilderType.java @@ -55,7 +55,9 @@ default BTContentHandlerBuilderType addHandler( final String localName, final BTElementHandlerConstructorType constructor) { - return this.addHandler(BTQualifiedName.of(namespaceURI, localName), constructor); + return this.addHandler( + BTQualifiedName.of(namespaceURI, localName), + constructor); } /** diff --git a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTElementHandlerConstructorType.java b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTElementHandlerConstructorType.java index fe77823..7ab2e40 100644 --- a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTElementHandlerConstructorType.java +++ b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTElementHandlerConstructorType.java @@ -16,8 +16,6 @@ package com.io7m.blackthorne.api; -import org.xml.sax.SAXException; - /** * A content handler constructor that produces handlers that produce values of type {@code A} * @@ -34,11 +32,11 @@ public interface BTElementHandlerConstructorType * * @return A new content handler * - * @throws SAXException If required + * @throws Exception If required * @see BTElementParsingContextType#parseException(Exception) */ BTElementHandlerType create( BTElementParsingContextType context) - throws SAXException; + throws Exception; } diff --git a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTElementHandlerType.java b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTElementHandlerType.java index a72f659..7d5c724 100644 --- a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTElementHandlerType.java +++ b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTElementHandlerType.java @@ -18,7 +18,6 @@ package com.io7m.blackthorne.api; import org.xml.sax.Attributes; -import org.xml.sax.SAXException; import java.util.Map; import java.util.function.Function; @@ -82,13 +81,13 @@ default BTIgnoreUnrecognizedElements onShouldIgnoreUnrecognizedElements( * @param context The parsing context * @param attributes The element's attributes * - * @throws SAXException On parse errors + * @throws Exception On parse errors */ default void onElementStart( final BTElementParsingContextType context, final Attributes attributes) - throws SAXException + throws Exception { } @@ -101,11 +100,11 @@ default void onElementStart( * * @return The value produced by all of the data received up to this point * - * @throws SAXException On parse errors + * @throws Exception On parse errors */ RT onElementFinished(BTElementParsingContextType context) - throws SAXException; + throws Exception; /** * A child element has been parsed successfully and produced a result. @@ -113,13 +112,13 @@ RT onElementFinished(BTElementParsingContextType context) * @param context The parsing context * @param result The value produced by the child element * - * @throws SAXException On parse errors + * @throws Exception On parse errors */ default void onChildValueProduced( final BTElementParsingContextType context, final CT result) - throws SAXException + throws Exception { } @@ -132,7 +131,7 @@ default void onChildValueProduced( * @param offset The start of the data within {@code data} * @param length The length of the data within {@code data} * - * @throws SAXException On parse errors + * @throws Exception On parse errors */ default void onCharacters( @@ -140,7 +139,7 @@ default void onCharacters( final char[] data, final int offset, final int length) - throws SAXException + throws Exception { } diff --git a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTException.java b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTException.java index 413539c..011ad71 100644 --- a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTException.java +++ b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTException.java @@ -27,15 +27,6 @@ public final class BTException extends Exception { private final List errors; - /** - * @return The parse errors encountered during parsing - */ - - public List errors() - { - return this.errors; - } - /** * Construct an exception. * @@ -84,4 +75,13 @@ public BTException( super(Objects.requireNonNull(inCause, "cause")); this.errors = Objects.requireNonNull(inErrors, "errors"); } + + /** + * @return The parse errors encountered during parsing + */ + + public List errors() + { + return this.errors; + } } diff --git a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTFunctorHandler.java b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTFunctorHandler.java index edeb756..30337cc 100644 --- a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTFunctorHandler.java +++ b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTFunctorHandler.java @@ -18,7 +18,6 @@ package com.io7m.blackthorne.api; import org.xml.sax.Attributes; -import org.xml.sax.SAXException; import java.util.Map; import java.util.Objects; @@ -76,7 +75,7 @@ public BTIgnoreUnrecognizedElements onShouldIgnoreUnrecognizedElements( public void onElementStart( final BTElementParsingContextType context, final Attributes attributes) - throws SAXException + throws Exception { this.handler.onElementStart(context, attributes); } @@ -85,7 +84,7 @@ public void onElementStart( public void onChildValueProduced( final BTElementParsingContextType context, final A result) - throws SAXException + throws Exception { this.handler.onChildValueProduced(context, result); } @@ -96,14 +95,14 @@ public void onCharacters( final char[] data, final int offset, final int length) - throws SAXException + throws Exception { this.handler.onCharacters(context, data, offset, length); } @Override public C onElementFinished(final BTElementParsingContextType context) - throws SAXException + throws Exception { return this.function.apply(this.handler.onElementFinished(context)); } diff --git a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTLeafElementHandler.java b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTLeafElementHandler.java deleted file mode 100644 index 42265ce..0000000 --- a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTLeafElementHandler.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright © 2019 Mark Raynsford http://io7m.com - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR - * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - - -package com.io7m.blackthorne.api; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -import java.util.Objects; - -/** - * A convenient handler dealing with elements that do not have children. - * - * @param The type of returned values - */ - -public final class BTLeafElementHandler - implements BTElementHandlerType -{ - private final BTQualifiedName name; - private final BTLeafElementHandlerType handler; - private S result; - - /** - * Construct a handler. - * - * @param inName The name of elements handled by this handler - * @param inHandler The element handler - */ - - public BTLeafElementHandler( - final BTQualifiedName inName, - final BTLeafElementHandlerType inHandler) - { - this.name = - Objects.requireNonNull(inName, "name"); - this.handler = - Objects.requireNonNull(inHandler, "handler"); - } - - @Override - public String name() - { - return this.name.localName(); - } - - @Override - public void onElementStart( - final BTElementParsingContextType context, - final Attributes attributes) - throws SAXException - { - try { - this.result = this.handler.onElement(context, attributes); - } catch (final Exception e) { - throw context.parseException(e); - } - } - - @Override - public S onElementFinished( - final BTElementParsingContextType context) - { - return this.result; - } -} diff --git a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTLeafElementHandlerType.java b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTLeafElementHandlerType.java deleted file mode 100644 index c15f070..0000000 --- a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTLeafElementHandlerType.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright © 2020 Mark Raynsford http://io7m.com - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR - * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -package com.io7m.blackthorne.api; - -import org.xml.sax.Attributes; - -/** - * An element handler that takes the attributes of a single element and - * produces an output value. - * - * @param The type of returned values - */ - -public interface BTLeafElementHandlerType -{ - /** - * Process the attributes of an element. - * - * @param context The parse context - * @param attributes The element attributes - * - * @return A value of {@code S} - * - * @throws Exception On errors - */ - - S onElement( - BTElementParsingContextType context, - Attributes attributes) - throws Exception; -} diff --git a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTScalarAttributeHandler.java b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTScalarAttributeHandler.java index c10c969..3096ece 100644 --- a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTScalarAttributeHandler.java +++ b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTScalarAttributeHandler.java @@ -18,7 +18,6 @@ package com.io7m.blackthorne.api; import org.xml.sax.Attributes; -import org.xml.sax.SAXException; import java.util.Objects; @@ -59,7 +58,7 @@ public String name() public void onElementStart( final BTElementParsingContextType context, final Attributes attributes) - throws SAXException + throws Exception { this.result = this.handler.parse(context, attributes); } diff --git a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTScalarElementHandler.java b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTScalarElementHandler.java index dca9a8b..ac98b08 100644 --- a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTScalarElementHandler.java +++ b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTScalarElementHandler.java @@ -17,8 +17,6 @@ package com.io7m.blackthorne.api; -import org.xml.sax.SAXException; - import java.util.Objects; /** @@ -60,7 +58,7 @@ public void onCharacters( final char[] data, final int offset, final int length) - throws SAXException + throws Exception { this.result = this.handler.parse(context, data, offset, length); } diff --git a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTStackHandler.java b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTStackHandler.java index 11ed3f0..3cc4577 100644 --- a/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTStackHandler.java +++ b/com.io7m.blackthorne.api/src/main/java/com/io7m/blackthorne/api/BTStackHandler.java @@ -21,7 +21,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.Attributes; -import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.xml.sax.ext.Locator2; @@ -115,14 +114,14 @@ private void trace( * @param localName The local element name * @param attributes The element attributes * - * @throws SAXException On parse errors + * @throws Exception On parse errors */ public void onElementStarted( final String namespaceURI, final String localName, final Attributes attributes) - throws SAXException + throws Exception { try { Objects.requireNonNull(namespaceURI, "namespaceURI"); @@ -150,7 +149,10 @@ public void onElementStarted( final var rootHandlerConstructor = this.rootHandlers.get(qualifiedName); if (rootHandlerConstructor == null) { throw new SAXParseException( - BTMessages.format("errorRootElementNotAllowed", localName, namespaceURI), + BTMessages.format( + "errorRootElementNotAllowed", + localName, + namespaceURI), this.context.documentLocator()); } @@ -215,7 +217,9 @@ public void onElementStarted( */ final var newHandler = - Objects.requireNonNull(childHandlerConstructor, "childHandlerConstructor") + Objects.requireNonNull( + childHandlerConstructor, + "childHandlerConstructor") .create(this.context); Objects.requireNonNull(newHandler, "newHandler"); @@ -235,14 +239,14 @@ public void onElementStarted( * @param offset The starting offset into {@code data} * @param length The length of the data in {@code data} * - * @throws SAXException On parse errors + * @throws Exception On parse errors */ public void onCharacters( final char[] data, final int offset, final int length) - throws SAXException + throws Exception { try { Objects.requireNonNull(data, "data"); @@ -277,13 +281,13 @@ public void onCharacters( * @param namespaceURI The namespace URI * @param localName The local element name * - * @throws SAXException On parse errors + * @throws Exception On parse errors */ public void onElementFinished( final String namespaceURI, final String localName) - throws SAXException + throws Exception { try { Objects.requireNonNull(namespaceURI, "namespaceURI"); diff --git a/com.io7m.blackthorne.tests/src/test/java/com/io7m/blackthorne/tests/BlackthorneTest.java b/com.io7m.blackthorne.tests/src/test/java/com/io7m/blackthorne/tests/BlackthorneTest.java index c86a932..1580929 100644 --- a/com.io7m.blackthorne.tests/src/test/java/com/io7m/blackthorne/tests/BlackthorneTest.java +++ b/com.io7m.blackthorne.tests/src/test/java/com/io7m/blackthorne/tests/BlackthorneTest.java @@ -22,9 +22,9 @@ import com.io7m.blackthorne.api.BTElementParsingContextType; import com.io7m.blackthorne.api.BTException; import com.io7m.blackthorne.api.BTIgnoreUnrecognizedElements; -import com.io7m.blackthorne.api.BTLeafElementHandler; import com.io7m.blackthorne.api.BTParseError; import com.io7m.blackthorne.api.BTQualifiedName; +import com.io7m.blackthorne.api.BTScalarAttributeHandler; import com.io7m.blackthorne.api.Blackthorne; import com.io7m.blackthorne.jxe.BlackthorneJXE; import com.io7m.jxe.core.JXEHardenedSAXParsers; @@ -1259,7 +1259,7 @@ public void testLeafIntegerAttr0() throws Exception { final var intAttr = - new BTLeafElementHandler<>( + new BTScalarAttributeHandler<>( BTQualifiedName.of("urn:tests", "intA"), BlackthorneTest::parseIntAttribute ); From acb1c6d217bf9233ee2e1f3ce31b0afdf2852b08 Mon Sep 17 00:00:00 2001 From: Mark Raynsford Date: Sat, 24 Oct 2020 20:32:42 +0000 Subject: [PATCH 4/5] Update changelog --- README-CHANGES.xml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README-CHANGES.xml b/README-CHANGES.xml index fa73da4..a613072 100644 --- a/README-CHANGES.xml +++ b/README-CHANGES.xml @@ -1,9 +1,18 @@ - + + + + + + + + + + From 83e820bd6972224f92c965649b7abe83dcdbbfab Mon Sep 17 00:00:00 2001 From: Mark Raynsford Date: Sat, 24 Oct 2020 20:36:56 +0000 Subject: [PATCH 5/5] Mark 1.1.0 --- com.io7m.blackthorne.api/pom.xml | 2 +- com.io7m.blackthorne.jxe/pom.xml | 2 +- com.io7m.blackthorne.tests/pom.xml | 2 +- pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/com.io7m.blackthorne.api/pom.xml b/com.io7m.blackthorne.api/pom.xml index bb7bd3a..87a87c0 100644 --- a/com.io7m.blackthorne.api/pom.xml +++ b/com.io7m.blackthorne.api/pom.xml @@ -8,7 +8,7 @@ com.io7m.blackthorne com.io7m.blackthorne - 1.1.0-SNAPSHOT + 1.1.0 com.io7m.blackthorne.api diff --git a/com.io7m.blackthorne.jxe/pom.xml b/com.io7m.blackthorne.jxe/pom.xml index 71bcf35..8de1de3 100644 --- a/com.io7m.blackthorne.jxe/pom.xml +++ b/com.io7m.blackthorne.jxe/pom.xml @@ -8,7 +8,7 @@ com.io7m.blackthorne com.io7m.blackthorne - 1.1.0-SNAPSHOT + 1.1.0 com.io7m.blackthorne.jxe diff --git a/com.io7m.blackthorne.tests/pom.xml b/com.io7m.blackthorne.tests/pom.xml index 2719293..fb694a6 100644 --- a/com.io7m.blackthorne.tests/pom.xml +++ b/com.io7m.blackthorne.tests/pom.xml @@ -8,7 +8,7 @@ com.io7m.blackthorne com.io7m.blackthorne - 1.1.0-SNAPSHOT + 1.1.0 com.io7m.blackthorne.tests diff --git a/pom.xml b/pom.xml index 9304ac8..8162b27 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.io7m.blackthorne com.io7m.blackthorne - 1.1.0-SNAPSHOT + 1.1.0 pom com.io7m.blackthorne