From fbcb346ad8a1bea495e013c39f8adcfcd92cb13e Mon Sep 17 00:00:00 2001 From: Michael Edgar Date: Fri, 18 Jun 2021 20:05:50 -0400 Subject: [PATCH] Add Java 16 to CI build action and fix test on JDK 16+ --- .github/workflows/build.yml | 2 +- .../stream/StaEDIXMLStreamReaderTest.java | 17 +++++++++++++---- .../java/io/xlate/edi/test/StaEDITestUtil.java | 5 +++++ 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 43d3a776..bf596be5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java: [8, 11] + java: [8, 11, 16] name: Build with JDK ${{matrix.java}} steps: diff --git a/src/test/java/io/xlate/edi/internal/stream/StaEDIXMLStreamReaderTest.java b/src/test/java/io/xlate/edi/internal/stream/StaEDIXMLStreamReaderTest.java index 28d39e8b..1ebd0b9c 100644 --- a/src/test/java/io/xlate/edi/internal/stream/StaEDIXMLStreamReaderTest.java +++ b/src/test/java/io/xlate/edi/internal/stream/StaEDIXMLStreamReaderTest.java @@ -43,6 +43,7 @@ import java.util.logging.Logger; import javax.xml.namespace.NamespaceContext; +import javax.xml.stream.StreamFilter; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; @@ -76,6 +77,7 @@ import io.xlate.edi.stream.EDIStreamValidationError; import io.xlate.edi.stream.EDIStreamWriter; import io.xlate.edi.stream.Location; +import io.xlate.edi.test.StaEDITestUtil; @SuppressWarnings("resource") class StaEDIXMLStreamReaderTest { @@ -903,11 +905,18 @@ void testInvalidInput() throws Exception { InputStream stream = new ByteArrayInputStream("{}".getBytes()); ediReader = factory.createEDIStreamReader(stream); XMLStreamReader xmlReader = factory.createXMLStreamReader(ediReader); - XMLStreamReader filtered = XMLInputFactory.newFactory().createFilteredReader(xmlReader, - reader -> reader.getEventType() == XMLStreamConstants.START_ELEMENT && - reader.getLocalName().equals("TRANSACTION")); + StreamFilter xmlFilter = reader -> reader.getEventType() == XMLStreamConstants.START_ELEMENT && + reader.getLocalName().equals("TRANSACTION"); + XMLStreamException thrown; + + if (Integer.parseInt(StaEDITestUtil.getJavaVersion()[0]) >= 16) { + // See fix for JDK-8255918: https://github.com/openjdk/jdk/pull/1209 + thrown = assertThrows(XMLStreamException.class, () -> XMLInputFactory.newFactory().createFilteredReader(xmlReader, xmlFilter)); + } else { + XMLStreamReader filtered = XMLInputFactory.newFactory().createFilteredReader(xmlReader, xmlFilter); + thrown = assertThrows(XMLStreamException.class, () -> filtered.hasNext()); + } - XMLStreamException thrown = assertThrows(XMLStreamException.class, () -> filtered.hasNext()); assertTrue(thrown.getCause() instanceof EDIStreamException); String message = thrown.getCause().getMessage(); assertTrue(message.contains("EDIE003")); diff --git a/src/test/java/io/xlate/edi/test/StaEDITestUtil.java b/src/test/java/io/xlate/edi/test/StaEDITestUtil.java index bc7b0e6f..800928d1 100644 --- a/src/test/java/io/xlate/edi/test/StaEDITestUtil.java +++ b/src/test/java/io/xlate/edi/test/StaEDITestUtil.java @@ -50,4 +50,9 @@ public boolean accept(EDIStreamReader reader) { }; return factory.createFilteredReader(reader, filter); } + + public static String[] getJavaVersion() { + String versionString = System.getProperty("java.version"); + return versionString.split("[\\._]"); + } }