Skip to content

SRU2025 #162

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Prowide ISO 20022 - CHANGELOG

#### 10.3.0 - SNAPSHOT
* SWIFT Standard release update 2025 (live 22 November 2025)
* Yearly revision of deprecation phase (see https://dev.prowidesoftware.com/SRU2024/getting-started/deprecation/)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Update deprecation documentation URL

The URL for the deprecation documentation still references SRU2024, but this PR is for SRU2025.

Check if an updated URL for SRU2025 deprecation documentation exists, and update the reference accordingly if available.


🌐 Web query:

Does Prowide have an SRU2025 deprecation documentation page?

💡 Result:

Based on the search results, there is no explicit mention of an SRU2025 deprecation documentation page for Prowide. The search results contain information about Prowide's deprecation policy in general and references to documentation pages for previous SRU (SWIFT Release Update) versions such as SRU2024, SRU2023, and earlier releases.

The deprecation policy is documented at "https://dev.prowidesoftware.com/latest/getting-started/deprecation/" which explains Prowide's approach to API deprecation in phases[6]. This general policy document dates back to April 2016 and outlines a four-phase deprecation process that spans at least 4 years from the initial deprecation mark to deletion.

When discussing specific SRU versions, the search results show that Prowide typically includes a "yearly revision of deprecation phase" in their release notes, with references to the deprecation policy page. For example, in the changelog for SRU2024 (version 10.2.0), they mention "Yearly revision of deprecation phase (see https://dev.prowidesoftware.com/SRU2024/getting-started/deprecation/)"[7][9].

While there is mention of SRU2025 in the context of hybrid addresses support (starting by the end of November 2025)[4], there is no specific mention of an SRU2025 deprecation documentation page in the provided search results.

Citations:


Update deprecation documentation URL to use the generic “latest” page

Please update the SRU2024‐specific link in CHANGELOG.md to point at the general deprecation policy, as there is no SRU2025‐specific page:

  • File: CHANGELOG.md (around line 5)
- * Yearly revision of deprecation phase (see https://dev.prowidesoftware.com/SRU2024/getting-started/deprecation/)
+ * Yearly revision of deprecation phase (see https://dev.prowidesoftware.com/latest/getting-started/deprecation/)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
* Yearly revision of deprecation phase (see https://dev.prowidesoftware.com/SRU2024/getting-started/deprecation/)
* Yearly revision of deprecation phase (see https://dev.prowidesoftware.com/latest/getting-started/deprecation/)
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

5-5: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


5-5: Bare URL used
null

(MD034, no-bare-urls)

🤖 Prompt for AI Agents (early access)
In CHANGELOG.md at line 5, the URL for the deprecation documentation currently points to the SRU2024-specific page. Since there is no SRU2025-specific page, update the URL to the generic deprecation policy page at https://dev.prowidesoftware.com/latest/getting-started/deprecation/ to ensure the link remains accurate and relevant.

* Dependency update: commons-lang3 -> 3.17.0
* Dependency update: gson -> 2.13.1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Fix markdown formatting issues for better consistency

The changelog entry has several formatting issues according to markdown best practices:

  1. Heading level should be h2 instead of h4 (use ## instead of ####)
  2. Missing blank lines around the heading and list
  3. List items should be at indentation level 0
  4. Bare URL should be enclosed in angle brackets
-#### 10.3.0 - SNAPSHOT
-  * SWIFT Standard release update 2025 (live 22 November 2025)
-  * Yearly revision of deprecation phase (see https://dev.prowidesoftware.com/SRU2024/getting-started/deprecation/)
-  * Dependency update: commons-lang3 -> 3.17.0
-  * Dependency update: gson -> 2.13.1
+## 10.3.0 - SNAPSHOT
+
+* SWIFT Standard release update 2025 (live 22 November 2025)
+* Yearly revision of deprecation phase (see <https://dev.prowidesoftware.com/SRU2024/getting-started/deprecation/>)
+* Dependency update: commons-lang3 -> 3.17.0
+* Dependency update: gson -> 2.13.1
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
#### 10.3.0 - SNAPSHOT
* SWIFT Standard release update 2025 (live 22 November 2025)
* Yearly revision of deprecation phase (see https://dev.prowidesoftware.com/SRU2024/getting-started/deprecation/)
* Dependency update: commons-lang3 -> 3.17.0
* Dependency update: gson -> 2.13.1
## 10.3.0 - SNAPSHOT
* SWIFT Standard release update 2025 (live 22 November 2025)
* Yearly revision of deprecation phase (see <https://dev.prowidesoftware.com/SRU2024/getting-started/deprecation/>)
* Dependency update: commons-lang3 -> 3.17.0
* Dependency update: gson -> 2.13.1
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

3-3: Heading levels should only increment by one level at a time
Expected: h2; Actual: h4

(MD001, heading-increment)


3-3: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


4-4: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


4-4: Lists should be surrounded by blank lines
null

(MD032, blanks-around-lists)


5-5: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


5-5: Bare URL used
null

(MD034, no-bare-urls)


6-6: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)


7-7: Unordered list indentation
Expected: 0; Actual: 2

(MD007, ul-indent)

🤖 Prompt for AI Agents (early access)
In CHANGELOG.md around lines 3 to 7, fix markdown formatting by changing the heading from h4 (####) to h2 (##), add blank lines before and after the heading and the list, ensure list items have no indentation, and enclose the bare URL in angle brackets to follow markdown best practices.


#### 10.2.7 - April 2025
* Enhanced the MX parser log verbosity when parsing malformed content
* Added new logic to MxNode to removing all leaves with empty attributes and empty content
Expand Down
37 changes: 21 additions & 16 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ buildscript {
}
dependencies {
classpath 'ru.vyarus:gradle-quality-plugin:5.0.0'
classpath 'pl.allegro.tech.build:axion-release-plugin:1.15.1'
classpath 'pl.allegro.tech.build:axion-release-plugin:1.18.18'
classpath 'io.github.gradle-nexus:publish-plugin:2.0.0'
classpath 'com.diffplug.spotless:spotless-plugin-gradle:6.23.3'
classpath 'com.diffplug.spotless:spotless-plugin-gradle:7.0.3'
}
}
apply plugin: 'pl.allegro.tech.build.axion-release'
Expand All @@ -23,8 +23,12 @@ archivesBaseName = 'pw-iso20022'
group 'com.prowidesoftware'

project.ext {
SRU = 'SRU2024'
prowideCoreVersion = 'SRU2024-10.2.6'
SRU = 'SRU2025'
prowideCoreVersion = 'SRU2025-10.3.0-SNAPSHOT'
commonsLangVersion = '3.17.0'
gsonVersion = '2.13.1'
jaxbVersion = '4.0.5'
jakartaPersistenceVersion = '3.1.0' // jakarta 3.1 is Jakarta EE 10, jakarta 3.2 would imply migration to Jakarta EE 11
}

scmVersion {
Expand All @@ -34,6 +38,7 @@ scmVersion {
}
}
project.version = "${SRU}-${scmVersion.version}"
project.version = "SRU2025-10.3.0-SNAPSHOT"

allprojects {

Expand Down Expand Up @@ -101,9 +106,9 @@ subprojects {
version = rootProject.version

dependencies {
implementation 'org.apache.commons:commons-lang3:3.17.0'
implementation 'com.google.code.gson:gson:2.11.0'
implementation 'com.sun.xml.bind:jaxb-impl:4.0.5'
implementation "org.apache.commons:commons-lang3:${commonsLangVersion}"
implementation "com.google.code.gson:gson:${gsonVersion}"
implementation "com.sun.xml.bind:jaxb-impl:${jaxbVersion}"
// bind-api is included transitively by jaxb-impl
// implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.2'
}
Expand All @@ -127,14 +132,14 @@ configure(subprojects.findAll {it.name.endsWith('-mx')}) {
api project(':iso20022-core')
implementation project(specificTypesProject)

implementation 'org.apache.commons:commons-lang3:3.17.0'
implementation 'com.google.code.gson:gson:2.11.0'
implementation "org.apache.commons:commons-lang3:${commonsLangVersion}"
implementation "com.google.code.gson:gson:${gsonVersion}"

implementation 'com.sun.xml.bind:jaxb-impl:4.0.5'
implementation "com.sun.xml.bind:jaxb-impl:${jaxbVersion}"
// bind-api is included transitively by jaxb-impl
// implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.2'

compileOnly 'javax.persistence:javax.persistence-api:2.2'
compileOnly "jakarta.persistence:jakarta.persistence-api:${jakartaPersistenceVersion}"
}
}

Expand All @@ -150,13 +155,13 @@ project(':iso20022-core') {
// included build
api "com.prowidesoftware:pw-swift-core:${prowideCoreVersion}"

implementation 'org.apache.commons:commons-lang3:3.17.0'
implementation 'com.google.code.gson:gson:2.11.0'
implementation "org.apache.commons:commons-lang3:${commonsLangVersion}"
implementation "com.google.code.gson:gson:${gsonVersion}"

compileOnly 'jakarta.persistence:jakarta.persistence-api:3.1.0'
compileOnly 'jakarta.validation:jakarta.validation-api:3.0.2'
compileOnly "jakarta.persistence:jakarta.persistence-api:${jakartaPersistenceVersion}"
compileOnly 'jakarta.validation:jakarta.validation-api:3.1.0'

testImplementation 'jakarta.persistence:jakarta.persistence-api:3.1.0'
testImplementation "jakarta.persistence:jakarta.persistence-api:${jakartaPersistenceVersion}"
testImplementation 'org.junit.jupiter:junit-jupiter:5.11.4'
testImplementation 'com.google.guava:guava:33.4.0-jre'
testImplementation 'org.assertj:assertj-core:3.27.2'
Expand Down
3 changes: 2 additions & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,6 @@
*/
package com.prowidesoftware.swift.model;

import com.prowidesoftware.deprecation.ProwideDeprecated;
import com.prowidesoftware.deprecation.TargetYear;

/**
* SWIFT business process classification for MX messages.
*
Expand Down Expand Up @@ -57,14 +54,6 @@ public enum MxBusinessProcess {
setr("Securities Trade"),
supl("Supplementary Data"),
trck("Payments Tracker"),

/**
* @deprecated Obsolete to be withdrawn (non-ISO)
*/
@ProwideDeprecated(phase4 = TargetYear.SRU2025)
@Deprecated
trea("Treasury"),

tsin("Trade Services Initiation"),
tsmt("Trade Services Management"),
tsrv("Trade Services"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.prowidesoftware.JsonSerializable;
import com.prowidesoftware.deprecation.DeprecationUtils;
import com.prowidesoftware.deprecation.ProwideDeprecated;
import com.prowidesoftware.deprecation.TargetYear;
import com.prowidesoftware.swift.model.AbstractMessage;
Expand All @@ -27,11 +26,9 @@
import com.prowidesoftware.swift.model.mt.AbstractMT;
import com.prowidesoftware.swift.model.mx.adapters.*;
import com.prowidesoftware.swift.model.mx.adapters.v9.V9DateTimeJsonAdapter;
import com.prowidesoftware.swift.utils.Lib;
import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.annotation.XmlTransient;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.io.StringReader;
import java.time.*;
import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -73,7 +70,7 @@ public abstract class AbstractMX extends AbstractMessage implements JsonSerializ
* @deprecated the default root element for the custom envelope is now defined in {@link EnvelopeType#CUSTOM}
*/
@Deprecated
@ProwideDeprecated(phase2 = TargetYear.SRU2025)
@ProwideDeprecated(phase3 = TargetYear.SRU2026)
public static String DEFAULT_ROOT_ELEMENT = "RequestPayload";

/**
Expand Down Expand Up @@ -129,17 +126,6 @@ public static AbstractMX parse(final String xml, MxId id) {
return MxReadImpl.parse(xml, id, new MxReadParams());
}

/**
* @deprecated use Lib.readFile(file) and any parse from String method
*/
@Deprecated
@ProwideDeprecated(phase4 = TargetYear.SRU2025)
public static AbstractMX parse(final File file, MxId id) throws IOException {
DeprecationUtils.phase3(
AbstractMX.class, "parse(File, MxId)", "Use Lib.readFile(file) and any parse from String method");
return MxReadImpl.parse(Lib.readFile(file), id, new MxReadParams());
}

/**
* Parses the XML Element into a specific MX object.
* The Mx to create is detected from the namespace.
Expand Down Expand Up @@ -412,21 +398,6 @@ public String document() {
return document(params);
}

/**
* @deprecated use {@link #document(MxWriteParams)} instead
*/
@Deprecated
@ProwideDeprecated(phase4 = TargetYear.SRU2025)
public String document(final String prefix, boolean includeXMLDeclaration, EscapeHandler escapeHandler) {
DeprecationUtils.phase3(
AbstractMX.class, "document(String, boolean, EscapeHandler)", "Use document(MxWriteParams) instead");
MxWriteParams params = new MxWriteParams();
params.prefix = prefix;
params.includeXMLDeclaration = includeXMLDeclaration;
params.escapeHandler = escapeHandler;
return document(params);
}

/**
* Convenience method to get this message XML as javax.xml.transform.Source.
*
Expand Down Expand Up @@ -460,34 +431,6 @@ public String message() {
return message(new MxWriteConfiguration());
}

/**
* @deprecated use {@link #message(MxWriteConfiguration)} and handle write from String to file with plain Java API
*/
@Deprecated
@ProwideDeprecated(phase4 = TargetYear.SRU2025)
public void write(final File file) throws IOException {
DeprecationUtils.phase3(AbstractMX.class, "write(File)", "Use message(MxWriteConfiguration) instead");
Objects.requireNonNull(file, "the file to write cannot be null");
boolean created = file.createNewFile();
if (created) {
log.fine("new file created: " + file.getAbsolutePath());
}
final FileOutputStream stream = new FileOutputStream(file.getAbsoluteFile());
write(stream);
stream.close();
}

/**
* @deprecated use {@link #message(MxWriteConfiguration)} and handle write from String to stream with plain Java API
*/
@Deprecated
@ProwideDeprecated(phase4 = TargetYear.SRU2025)
public void write(final OutputStream stream) throws IOException {
DeprecationUtils.phase3(AbstractMX.class, "write(OutputStream)", "Use message(MxWriteConfiguration) instead");
Objects.requireNonNull(stream, "the stream to write cannot be null");
stream.write(message().getBytes(StandardCharsets.UTF_8));
}

/**
* @return the business header or null if not set
* @since 9.0.1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,7 @@
*/
package com.prowidesoftware.swift.model.mx;

import com.prowidesoftware.deprecation.DeprecationUtils;
import com.prowidesoftware.deprecation.ProwideDeprecated;
import com.prowidesoftware.deprecation.TargetYear;
import java.time.OffsetDateTime;
import java.util.Objects;
import org.w3c.dom.Element;

/**
Expand Down Expand Up @@ -106,13 +102,6 @@ public interface AppHdr {
*/
void setCreationDate(boolean overwrite);

/*
* ver MX Headers/stdsmx_usgi.pdf
* doc 3.2.3 Correspondence between the ISO Business Application Header and the Application Header
* de ahi sintentizar los atributos aca.
* replicar metodos unificados segun el mapeo de la seccion 3.2.3
*/

/**
* Get this header as an XML string.
* <p>The implementation uses {@link #xml(MxWriteParams)} with no prefix and no XML declaration.
Expand All @@ -123,35 +112,14 @@ default String xml() {
return xml(new MxWriteParams());
}

/**
* @deprecated use {@link #xml(MxWriteParams)} instead
*/
@Deprecated
@ProwideDeprecated(phase4 = TargetYear.SRU2025)
String xml(final String prefix, boolean includeXMLDeclaration);

/**
* @deprecated use {@link #xml(MxWriteParams)} instead
*/
@Deprecated
@ProwideDeprecated(phase4 = TargetYear.SRU2025)
default String xml(final String prefix, boolean includeXMLDeclaration, EscapeHandler escapeHandler) {
DeprecationUtils.phase3(
AbstractMX.class, "xml(String, boolean, EscapeHandler)", "Use xml(MxWriteParams) instead");
return xml(prefix, includeXMLDeclaration);
}

/**
* Get this header as an XML string.
*
* @param params not null marshalling parameters
* @return header serialized into XML string or null in case of unexpected error
* @since 9.2.6
*/
default String xml(MxWriteParams params) {
Objects.requireNonNull(params, "The marshalling params cannot be null");
return xml(params.prefix, params.includeXMLDeclaration);
}
String xml(MxWriteParams params);

/**
* Gets the header as an Element object.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,7 @@ public static Optional<AppHdr> parse(final String xml, MxReadParams params) {

Optional<String> namespace = NamespaceReader.findAppHdrNamespace(xml);

boolean headerIsPresent =
namespace.isPresent() || NamespaceReader.elementExists(xml, AppHdr.HEADER_LOCALNAME);
boolean headerIsPresent = namespace.isPresent() || MxParseUtils.elementExists(xml, AppHdr.HEADER_LOCALNAME);

if (headerIsPresent) {
AppHdr parsedHeader = parseHeaderFromSAXSource(xml, namespace.orElse(null), params);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@
package com.prowidesoftware.swift.model.mx;

import com.prowidesoftware.ProwideException;
import com.prowidesoftware.deprecation.DeprecationUtils;
import com.prowidesoftware.deprecation.ProwideDeprecated;
import com.prowidesoftware.deprecation.TargetYear;
import com.prowidesoftware.swift.model.mx.adapters.IsoDateTimeAdapter;
import com.prowidesoftware.swift.model.mx.adapters.ZuluOffsetDateTimeAdapter;
import com.prowidesoftware.swift.model.mx.dic.BusinessApplicationHeaderV01Impl;
Expand Down Expand Up @@ -188,36 +185,6 @@ public void setCreationDate(boolean overwrite) {
}
}

/**
* @deprecated use {@link #xml(MxWriteParams)} instead
*/
@Deprecated
@ProwideDeprecated(phase4 = TargetYear.SRU2025)
@Override
public String xml(final String prefix, boolean includeXMLDeclaration) {
DeprecationUtils.phase3(AbstractMX.class, "xml(String, boolean)", "Use xml(MxWriteParams) instead");
MxWriteParams params = new MxWriteParams();
params.prefix = prefix;
params.includeXMLDeclaration = includeXMLDeclaration;
return xml(params);
}

/**
* @deprecated use {@link #xml(MxWriteParams)} instead
*/
@Deprecated
@ProwideDeprecated(phase4 = TargetYear.SRU2025)
@Override
public String xml(String prefix, boolean includeXMLDeclaration, EscapeHandler escapeHandler) {
DeprecationUtils.phase3(
AbstractMX.class, "xml(String, boolean, EscapeHandler) ", "Use xml(MxWriteParams) instead");
MxWriteParams params = new MxWriteParams();
params.prefix = prefix;
params.includeXMLDeclaration = includeXMLDeclaration;
params.escapeHandler = escapeHandler;
return xml(params);
}

@Override
public String xml(MxWriteParams params) {
try {
Expand Down
Loading