From 811e9be3fa6abc4c7fab11dee3ec7fdaf75a887b Mon Sep 17 00:00:00 2001 From: zubri Date: Fri, 3 Jan 2025 20:58:53 -0300 Subject: [PATCH 01/10] release --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4207b16d9..4ef1e5748 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Prowide ISO 20022 - CHANGELOG -#### 9.5.6 - SNAPSHOT +#### 9.5.6 - January 2025 * Changed the `MxParseUtils` findByTags and findByPath methods to return the element values instead of the XML stream object #### 9.5.5 - January 2025 From bcdd11bedae557f2aa7bd9734ed189c327858c32 Mon Sep 17 00:00:00 2001 From: zubri Date: Mon, 6 Jan 2025 21:52:28 -0300 Subject: [PATCH 02/10] gradle opts --- .github/workflows/gradle.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index c62467402..112e81975 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -41,6 +41,8 @@ jobs: uses: gradle/actions/setup-gradle@v4 - name: Build with Gradle Wrapper + env: + GRADLE_OPTS: "-Xmx4g -XX:+UseG1GC" run: ./gradlew build # This job generates and submits a dependency graph, enabling Dependabot Alerts for all project dependencies. From a2a797e2114cc2862cacae69c4dee6b35fde82b6 Mon Sep 17 00:00:00 2001 From: zubri Date: Mon, 6 Jan 2025 22:01:51 -0300 Subject: [PATCH 03/10] gradle opts --- .github/workflows/gradle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 112e81975..8daf5791d 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -42,7 +42,7 @@ jobs: - name: Build with Gradle Wrapper env: - GRADLE_OPTS: "-Xmx4g -XX:+UseG1GC" + GRADLE_OPTS: "-Xms512m -Xmx7g" run: ./gradlew build # This job generates and submits a dependency graph, enabling Dependabot Alerts for all project dependencies. From 329d62f30709feb19f2f9f736974aded3f5db4d6 Mon Sep 17 00:00:00 2001 From: zubri Date: Mon, 6 Jan 2025 22:06:05 -0300 Subject: [PATCH 04/10] github action, incremental compile --- .github/workflows/gradle.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 8daf5791d..1eb6e9070 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -40,6 +40,16 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@v4 + - name: Build with Gradle Wrapper + env: + GRADLE_OPTS: "-Xms512m -Xmx7g" + run: ./gradlew :model-common-types:compileJava + + - name: Build with Gradle Wrapper + env: + GRADLE_OPTS: "-Xms512m -Xmx7g" + run: ./gradlew compileJava + - name: Build with Gradle Wrapper env: GRADLE_OPTS: "-Xms512m -Xmx7g" From 045c7985777d8e299d8ad4309708cf2d6d396c62 Mon Sep 17 00:00:00 2001 From: zubri Date: Mon, 6 Jan 2025 22:24:18 -0300 Subject: [PATCH 05/10] GitHub action, gradlew with jvm args --- .github/workflows/gradle.yml | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 1eb6e9070..7c750b3ab 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -41,19 +41,7 @@ jobs: uses: gradle/actions/setup-gradle@v4 - name: Build with Gradle Wrapper - env: - GRADLE_OPTS: "-Xms512m -Xmx7g" - run: ./gradlew :model-common-types:compileJava - - - name: Build with Gradle Wrapper - env: - GRADLE_OPTS: "-Xms512m -Xmx7g" - run: ./gradlew compileJava - - - name: Build with Gradle Wrapper - env: - GRADLE_OPTS: "-Xms512m -Xmx7g" - run: ./gradlew build + run: ./gradlew -Dorg.gradle.jvmargs="-Xms512m -Xmx7g" build # This job generates and submits a dependency graph, enabling Dependabot Alerts for all project dependencies. # We only do it for the SRU2024_v10 branch to avoid spamming the Dependabot alerts for the legacy Java 8 code. From d8b7ecb54e503b7a1367174aeae5aaa7733e6e4f Mon Sep 17 00:00:00 2001 From: zubri Date: Mon, 6 Jan 2025 22:31:27 -0300 Subject: [PATCH 06/10] GitHub action, test with info --- .github/workflows/gradle.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 7c750b3ab..b568b175a 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -41,7 +41,10 @@ jobs: uses: gradle/actions/setup-gradle@v4 - name: Build with Gradle Wrapper - run: ./gradlew -Dorg.gradle.jvmargs="-Xms512m -Xmx7g" build + run: ./gradlew -Dorg.gradle.jvmargs="-Xms512m -Xmx7g" compileJava compileTestJava + + - name: Run test + run: ./gradlew test --INFO # This job generates and submits a dependency graph, enabling Dependabot Alerts for all project dependencies. # We only do it for the SRU2024_v10 branch to avoid spamming the Dependabot alerts for the legacy Java 8 code. From 714ef9f09b257b6e7d3ec1e5de21e64dcc31d229 Mon Sep 17 00:00:00 2001 From: zubri Date: Mon, 6 Jan 2025 22:34:05 -0300 Subject: [PATCH 07/10] GitHub action, test with info --- .github/workflows/gradle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index b568b175a..8c854e70f 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -44,7 +44,7 @@ jobs: run: ./gradlew -Dorg.gradle.jvmargs="-Xms512m -Xmx7g" compileJava compileTestJava - name: Run test - run: ./gradlew test --INFO + run: ./gradlew test --info # This job generates and submits a dependency graph, enabling Dependabot Alerts for all project dependencies. # We only do it for the SRU2024_v10 branch to avoid spamming the Dependabot alerts for the legacy Java 8 code. From ec567487a5b8b4eca4cd476fa6986c3d5963cf53 Mon Sep 17 00:00:00 2001 From: zubri Date: Tue, 7 Jan 2025 09:51:05 -0300 Subject: [PATCH 08/10] GitHub action, test dependencies --- build.gradle | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/build.gradle b/build.gradle index b159b0c25..19dc0580e 100644 --- a/build.gradle +++ b/build.gradle @@ -142,6 +142,12 @@ project(':iso20022-core') { compileOnly 'javax.persistence:javax.persistence-api:2.2' compileOnly 'javax.validation:validation-api:2.0.1.Final' + // to avoid potential differences in JAXB implementations when testing in different environments + testImplementation 'javax.xml.bind:jaxb-api:2.3.1' + testImplementation 'com.sun.xml.bind:jaxb-impl:2.3.3' + testImplementation 'com.sun.xml.bind:jaxb-core:2.3.0.1' + testImplementation 'javax.activation:activation:1.1.1' + testImplementation 'javax.persistence:javax.persistence-api:2.2' testImplementation 'org.junit.jupiter:junit-jupiter:5.11.4' testImplementation 'com.google.guava:guava:33.4.0-jre' From 2e247292436df761929bd131255a3e8205f4251a Mon Sep 17 00:00:00 2001 From: zubri Date: Tue, 7 Jan 2025 10:47:56 -0300 Subject: [PATCH 09/10] Enhanced the MX parser log verbosity when parsing malformed content --- CHANGELOG.md | 3 ++ .../swift/model/mx/MxReadImpl.java | 4 +++ .../model/mx/NamespaceAndElementFilter.java | 32 +++++++++++++++---- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ef1e5748..6b1ffdf3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Prowide ISO 20022 - CHANGELOG +#### 9.5.7 - SNAPSHOT + * Enhanced the MX parser log verbosity when parsing malformed content + #### 9.5.6 - January 2025 * Changed the `MxParseUtils` findByTags and findByPath methods to return the element values instead of the XML stream object diff --git a/iso20022-core/src/main/java/com/prowidesoftware/swift/model/mx/MxReadImpl.java b/iso20022-core/src/main/java/com/prowidesoftware/swift/model/mx/MxReadImpl.java index 1bef7c005..bb62cd3a4 100644 --- a/iso20022-core/src/main/java/com/prowidesoftware/swift/model/mx/MxReadImpl.java +++ b/iso20022-core/src/main/java/com/prowidesoftware/swift/model/mx/MxReadImpl.java @@ -93,6 +93,10 @@ public static AbstractMX parse( return mx.orElse(null); + } catch (AssertionError e) { + // depending on the jaxb implementation used, the assertion error can be thrown when the XML is not valid + log.log(Level.SEVERE, "Error parsing XML", e); + return null; } catch (final Exception e) { MxParseUtils.handleParseException(e); return null; diff --git a/iso20022-core/src/main/java/com/prowidesoftware/swift/model/mx/NamespaceAndElementFilter.java b/iso20022-core/src/main/java/com/prowidesoftware/swift/model/mx/NamespaceAndElementFilter.java index 99abb1704..3218cd301 100644 --- a/iso20022-core/src/main/java/com/prowidesoftware/swift/model/mx/NamespaceAndElementFilter.java +++ b/iso20022-core/src/main/java/com/prowidesoftware/swift/model/mx/NamespaceAndElementFilter.java @@ -45,14 +45,14 @@ * @since 9.2.1 */ public class NamespaceAndElementFilter extends XMLFilterImpl { - private static final transient Logger log = Logger.getLogger(NamespaceAndElementFilter.class.getName()); + private static final Logger log = Logger.getLogger(NamespaceAndElementFilter.class.getName()); private String mainNamespace; private boolean inElementToPropagate = false; - private String localNameToPropagate; + private final String localNameToPropagate; private boolean inInnerElementToSkip = false; private String localNameToSkip; - private boolean unbindNamespace; + private final boolean unbindNamespace; /** * @param localName the XML's element to propagate @@ -91,7 +91,10 @@ public void startElement(String namespace, String localName, String prefix, Attr try { super.startElement(namespaceToPropagate, localName, prefix, attributes); } catch (Exception e) { - log.log(Level.WARNING, "Error parsing " + localName + " [" + namespace + "] element", e); + log.warning("Error parsing " + localName + " [" + namespace + "] element: " + exceptionMessage(e)); + if (log.isLoggable(Level.FINEST)) { + log.log(Level.FINEST, "Error parsing " + localName + " [" + namespace + "] element", e); + } } } else { // we have found an element within the structure to propagate with a not recognized namespace @@ -150,7 +153,10 @@ public void endElement(String namespace, String localName, String prefix) throws try { super.endElement(namespaceToPropagate, localName, prefix); } catch (Exception e) { - log.log(Level.WARNING, "Error parsing " + localName + " [" + namespace + "] element", e); + log.warning("Error parsing " + localName + " [" + namespace + "] element: " + exceptionMessage(e)); + if (log.isLoggable(Level.FINEST)) { + log.log(Level.FINEST, "Error parsing " + localName + " [" + namespace + "] element", e); + } } } } @@ -169,9 +175,23 @@ public void startPrefixMapping(String prefix, String url) throws SAXException { try { super.startPrefixMapping(prefix, url); } catch (Exception e) { - log.log(Level.WARNING, "Error parsing " + prefix + " [" + url + "] prefix mapping", e); + log.warning("Error parsing " + prefix + " [" + url + "] prefix mapping: " + exceptionMessage(e)); + if (log.isLoggable(Level.FINEST)) { + log.log(Level.FINEST, "Error parsing " + prefix + " [" + url + "] prefix mapping", e); + } } } } } + + private static String exceptionMessage(Exception e) { + String message = e.getMessage(); + if (message == null && e.getCause() != null) { + message = e.getCause().getMessage(); + } + if (message == null) { + message = e.getClass().getSimpleName(); + } + return message; + } } From 645d5dd4854572d0f3f8aee1cfebe8a3269cb9e5 Mon Sep 17 00:00:00 2001 From: Sebastian Zubrinic Date: Tue, 7 Jan 2025 11:56:31 -0300 Subject: [PATCH 10/10] GitHub action test environment run fixes (#146) * test fix attempt * test fix attempt * Update iso20022-core/src/test/java/com/prowidesoftware/swift/model/mx/adapters/MxWriteWithAdaptersTest.java Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../mx/adapters/MxWriteWithAdaptersTest.java | 49 ++++++++----------- 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/iso20022-core/src/test/java/com/prowidesoftware/swift/model/mx/adapters/MxWriteWithAdaptersTest.java b/iso20022-core/src/test/java/com/prowidesoftware/swift/model/mx/adapters/MxWriteWithAdaptersTest.java index 18f6bc732..c71d5d494 100644 --- a/iso20022-core/src/test/java/com/prowidesoftware/swift/model/mx/adapters/MxWriteWithAdaptersTest.java +++ b/iso20022-core/src/test/java/com/prowidesoftware/swift/model/mx/adapters/MxWriteWithAdaptersTest.java @@ -25,9 +25,9 @@ import com.prowidesoftware.swift.model.mx.dic.SettlementTimeRequest2; import java.math.BigDecimal; import java.text.SimpleDateFormat; -import java.time.OffsetDateTime; import java.util.Calendar; import java.util.GregorianCalendar; +import java.util.TimeZone; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; @@ -37,16 +37,14 @@ public class MxWriteWithAdaptersTest { @Test public void testDocumentDateTime_DefaultAdapters_noFractionalSecond() throws DatatypeConfigurationException { - XMLGregorianCalendar noFractionalSecond = DatatypeFactory.newInstance() - .newXMLGregorianCalendar(new GregorianCalendar(2021, Calendar.OCTOBER, 19, 12, 13, 14)); + XMLGregorianCalendar noFractionalSecond = sampleGregorianCalendar(); MxPacs00800102 mx1 = sample(noFractionalSecond); final String xml = mx1.message(); // System.out.println(xml); - assertTrue(xml.contains( - "2021-10-19T12:13:14" + OffsetDateTime.now().getOffset() + "")); + assertTrue(xml.contains("2021-10-19T12:13:14+00:00")); assertTrue(xml.contains("2021-10-19")); - assertTrue(xml.contains("12:13:14" + OffsetDateTime.now().getOffset() + "")); + assertTrue(xml.contains("12:13:14+00:00")); final MxPacs00800102 mx2 = MxPacs00800102.parse(xml); // System.out.println(mx2.message()); @@ -88,9 +86,7 @@ public void testDocumentDateTime_DefaultAdapters_noFractionalSecond() throws Dat @Test public void testDocumentDateTime_DefaultAdapters_Z() throws DatatypeConfigurationException { - XMLGregorianCalendar utc = DatatypeFactory.newInstance() - .newXMLGregorianCalendar(new GregorianCalendar(2021, Calendar.OCTOBER, 19, 12, 13, 14)); - utc.setTimezone(0); + XMLGregorianCalendar utc = sampleGregorianCalendar(); MxPacs00800102 mx1 = sample(utc); final String xml = mx1.message(); @@ -139,18 +135,15 @@ public void testDocumentDateTime_DefaultAdapters_Z() throws DatatypeConfiguratio @Test public void testDocumentDateTime_DefaultAdapters_fractionalSecond() throws DatatypeConfigurationException { - XMLGregorianCalendar fractionalSecond = DatatypeFactory.newInstance() - .newXMLGregorianCalendar(new GregorianCalendar(2021, Calendar.OCTOBER, 19, 12, 13, 14)); + XMLGregorianCalendar fractionalSecond = sampleGregorianCalendar(); fractionalSecond.setFractionalSecond(new BigDecimal("0.123")); MxPacs00800102 mx1 = sample(fractionalSecond); final String xml = mx1.message(); // System.out.println(xml); - assertTrue(xml.contains( - "2021-10-19T12:13:14.123" + OffsetDateTime.now().getOffset() + "")); + assertTrue(xml.contains("2021-10-19T12:13:14.123+00:00")); assertTrue(xml.contains("2021-10-19")); - assertTrue( - xml.contains("12:13:14.123" + OffsetDateTime.now().getOffset() + "")); + assertTrue(xml.contains("12:13:14.123+00:00")); final MxPacs00800102 mx2 = MxPacs00800102.parse(xml); // System.out.println(mx2.message()); @@ -192,8 +185,8 @@ public void testDocumentDateTime_DefaultAdapters_fractionalSecond() throws Datat @Test public void testDocumentDateTime_CustomPattern() throws DatatypeConfigurationException { - XMLGregorianCalendar noFractionalSecond = DatatypeFactory.newInstance() - .newXMLGregorianCalendar(new GregorianCalendar(2021, Calendar.OCTOBER, 19, 12, 13, 14)); + GregorianCalendar calendar = new GregorianCalendar(2021, Calendar.OCTOBER, 19, 12, 13, 14); + XMLGregorianCalendar noFractionalSecond = DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar); MxPacs00800102 mx1 = sample(noFractionalSecond); MxWriteConfiguration conf = new MxWriteConfiguration(); @@ -242,8 +235,7 @@ public void testDocumentDateTime_CustomPattern() throws DatatypeConfigurationExc @Test public void testDocumentDateTime_CustomAdapter() throws DatatypeConfigurationException { - XMLGregorianCalendar noFractionalSecond = DatatypeFactory.newInstance() - .newXMLGregorianCalendar(new GregorianCalendar(2021, Calendar.OCTOBER, 19, 12, 13, 14)); + XMLGregorianCalendar noFractionalSecond = sampleGregorianCalendar(); MxPacs00800102 mx1 = sample(noFractionalSecond); MxWriteConfiguration conf = new MxWriteConfiguration(); @@ -263,12 +255,14 @@ public void testDocumentDateTime_CustomAdapter() throws DatatypeConfigurationExc @Test public void testAppHdrDateTime_DefaultAdapters() throws DatatypeConfigurationException { - AppHdr h1 = header(); + XMLGregorianCalendar gregorianCalendar = sampleGregorianCalendar(); + BusinessAppHdrV02 h1 = + AppHdrFactory.createBusinessAppHdrV02("AAAAUSXXXXX", "BBBBUSXXXXX", "ref", new MxId("pacs.008.001.08")); + h1.setCreDt(gregorianCalendar); final String xml = h1.xml(); // System.out.println(xml); - assertTrue( - xml.contains("2021-10-19T12:13:14" + OffsetDateTime.now().getOffset() + "")); + assertTrue(xml.contains("2021-10-19T12:13:14+00:00")); final BusinessAppHdrV02 h2 = (BusinessAppHdrV02) AppHdrParser.parse(xml).get(); // System.out.println(mx2.message()); @@ -288,12 +282,9 @@ private MxPacs00800102 sample(final XMLGregorianCalendar cal) { return mx; } - private AppHdr header() throws DatatypeConfigurationException { - final XMLGregorianCalendar cal = DatatypeFactory.newInstance() - .newXMLGregorianCalendar(new GregorianCalendar(2021, Calendar.OCTOBER, 19, 12, 13, 14)); - BusinessAppHdrV02 bah = - AppHdrFactory.createBusinessAppHdrV02("AAAAUSXXXXX", "BBBBUSXXXXX", "ref", new MxId("pacs.008.001.08")); - bah.setCreDt(cal); - return bah; + private XMLGregorianCalendar sampleGregorianCalendar() throws DatatypeConfigurationException { + GregorianCalendar calendar = new GregorianCalendar(2021, Calendar.OCTOBER, 19, 12, 13, 14); + calendar.setTimeZone(TimeZone.getTimeZone("UTC")); + return DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar); } }