(PW-2541) Updated the narrative resolver, format field 70 (used in field 70), to allow multiple lines and using // as codeword separator (/CODEWORD1/text///CODEWORD2/text)
10.2.8 - June 2025
Fix: Enhanced the DefaultMtMetadataStrategy to prevent NPE when the message headers are malformed
10.2.7 - May 2025
(PW-2055) Fixed the default message metadata extraction for ACK/NAK to set the service message block 1 BIC as receiver, not as sender
(PW-2055) Enhanced the SwiftMessageUtils extractors to support the service 21 message type (ACK/NAK)
10.2.6 - April 2025
(CU-86b49rvw4) Updated label for Fields 14[P,Q,R]/16W/29[Q,W]
(PW-2239) BIC Branch check for all upper and lower case
(PW-2239) Notify Test and Training BIC usage in DN.
10.2.5 - December 2024
Update apache-commons-lang3 from 3.14.0 to 3.17.0 fixing derived apache-text dependency vulnerabilities
Minor thread safety fix in the PropertyLoaded class, used by the SafeXmlUtils
Gradle wrapper update to 8.12
10.2.4 - November 2024
Rolling back SHA-256 checksum algorithm to MD5 in the MT message model
10.2.3 - November 2024
(PW-2040) Updated the BBAN validation data file to the IBAN REGISTRY Jul 2024 release
(PW-2006) Fixed getMUR and setMUR in SwiftMessage to prioritize field 108 in block 4 over block 3 for system messages (category 0)
Added new MtSequenceEnum with all the available inner sequences of specific MT schemas
Added isSystemMessage() to SwiftMessage to check if the message is a category 0 message (010. 011, etc...)
10.2.2 - October 2024
Added new FieldEnum with all the available field names
Code security improvements as per CodeQL recommendations
10.2.1 - June 2024
(PW-1913) Added IBAN validation for Egypt local account structure
Restore deprecated method in MT210 class
10.2.0 - May 2024
SWIFT Standard release update 2024 (live 16 November 2025)
Yearly revision of deprecation phase (see https://dev.prowidesoftware.com/SRU2024/getting-started/deprecation/)
Dependency update: commons-lang3 -> 3.14.0
Dependency update: gson -> 2.11.0
10.1.15 - May 2024
(PW-1862) Added NarrativeFragment class for detailed line information in StructuredNarrative fragments
Fixed SwiftMessage getPDE(): return empty value instead of null when codeword exists and has no value
Added isPercentage() helper method to field 37K
10.1.14 - March 2024
(PW-1812) Updated the narrative resolver, format 2 (used in field 72 for example), to allow empty values as part of the narrative fragment
Updated validators for BIC, country, and currency constraints to utilize keywords for i18n-compatible messages
Deprecated unnecessary methods in the SafeXmlUtils class
10.1.13 - December 2023
(PW-1718) Changed the getComponentLabel(component) in Field59F to be dynamic based on the line identifiers (similar to existing API in Field50F)
10.1.12 - November 2023
(PW-1697) Fixed validation/parse pattern in field 29O
(PW-1697) MT306 changes in field 30I
Added DistinguishedName with Builder in order to encapsulate the BIC branch name logic
10.1.11 - November 2023
(PW-1697) Fixed validation pattern in fields 14[H,K,L,M,N,O] and 29J
10.1.10 - November 2023
(PW-1695) Fixed a stack overflow in the fields fromJson implementation when a malformed JSON input contains empty field names
(PW-1688) Added missing field labels for SRU2023 changes in the pw_swift_*.properties file
10.1.9 - October 2023
(PW-1675) update to Field 31R to support also two date components as requested by SCORE messages
Added 36B and 36D getters to MT543
10.1.8 - October 2023
(PW-1659) Field 24G deprecated Name and Address for Narrative
10.1.7 - October 2023
Added default methods for sender, receiver, and identifier extraction to the MessageExtractionStrategy
Added JSON to the FileFormat enumeration
10.1.6 - September 2023
(PW-1478) Fixed Field 44J parse and getValue to enable proper data preservation when the field contains multiline content
10.1.5 - September 2023
Added support for an optional pw-swift-core.properties to customize the behavior of the SafeXmlUtils class
10.1.4 - September 2023
(PW-1478) Field 44J parse and getValue fix
10.1.3 - August 2023
(PW-1478) Field 44J format fixed to allow multiline
10.1.2 - August 2023
(PW-1461) Remove deprecation of field 31R model since is it used back in SRU2023
(PW-1405) Trim original String payload when creating an AbstractSwiftMessage
10.1.1 - July 2023
(GH-163) Remove unnecessary padding in sender and receiver in AbstractMT#creeate(number, sender, receiver) method
(PW-1323) Fixing getValue method for pattern issue in Field44J
10.1.0 - June 2023
Migration to Java 11
Migration to Jakarta EE 10
(PW-1323) Fixing getValue method for pattern issue in Field44J
(PW-1323) Fixing missing pattern issue in Field44J
9.4.0 - May 2023
SWIFT Standard release update 2023 (live 19 November 2023)
Yearly revision of deprecation phase (see https://dev.prowidesoftware.com/SRU2022/getting-started/deprecation/)
9.3.15 - May 2023
(PW-1341) Avoid log pollution with exception stacktrace in Field#formatAccount method
(PW-1264) Added distinguishedName(boolean includeDefaultBranch) method to BIC in order to return default branch name
9.3.14 - March 2023
(PW-1182) Fixed MT internal Loops API, when strategy is GENERATED_FIXED_WITH_OPTIONAL_TAIL and the tail part contains repetitive fields, such as MT920
(PW-1241) Added addUnstructuredStrict method to Narrative in order to strictly wrap unstructured input
9.3.13 - March 2023
Deprecated all fields that are only used in SCORE messages and not in the general MT standard as they will eventually be removed from the library
9.3.12 - February 2023
(PW-1109) Changed Narrative Resolver to validate minimum codeword length of 1 char
(GH-148) Fixed parser of Field61 amount component when number starts with the decimal comma (implicit zero in amount lower than 1)
Added getComponent(String componentName) to retrieve the component based on the name instead of the number
Added componentNameToNumber(String componentName) to retrieve the component number based on the component name
9.3.11 - January 2023
(PW-1152) Preserve line breaks when creating NarrativeContainer fields from JSON with legacy structure: narrative1, narrative2, etc...
Fixed duplicate elements when serializing NarrativeContainer fields into JSON
9.3.10 - January 2023
(PW-1150) Added field model class for 31M (required in SCORE MT798_753)
(PW-1150) Added field model class for 71E (required in SCORE MT798_755 and MT798_757)
9.3.9 - December 2022
(PW-1078) StructuredNarrative: Fixed parser to treat the optional [3!a13d] part as a unit block, both currency and amount present or missing
9.3.8 - November 2022
(GH-127) Enhanced field JSON serialization to include detailed structure when the field is a NarrativeContainer
9.3.7 - November 2022
(PW-1101) Fix field 35C labels to match the FIN xsd: Identification Of Instrument, Description Of Instrument
9.3.6 - November 2022
(PW-1086) Fixed typo in field 36D accessors
(PW-1078) StructuredNarrative: Added getBankCode() methods in order to allow direct access to data (used in SCORE messages)
(GH-88) Added missing constants for ISO 15022 codes
MT540 and MT548 added missing getter for Field99C
Added removeRepeatedBoundaries method in order to remove repeated tag boundaries
9.3.5 - October 2022
SRU2022 updates review: field 35C validation pattern changed to
9.3.4 - September 2022
Added getCADETL method for "CADETL" separator sequences
(GH-119) MT566: Fixed repetitions of sequence USECU/FIA that is not repetitive
Added sequence getters using the boundary field qualifier, for example getSequenceGENL() as equivalent to the existing getSequenceA()
9.3.3 - August 2022
(PW-1015) Added field model classes for 47E, 49D and 49F (required in SCORE MT798_774)
9.3.2 - July 2022
(PW-977) Changed the MT203 and MT210 inner structure from regular sequence to inner loop named Loop1
(PW-976) Added new MonetaryAmountContainer interface for fields having both an Amount and Currency
(PW-969) Modified field 12E, 12K and 12R labels
(PW-969) Added an optional narrative component to field 12R (required when the field is used in SCORE messages)
(PW-898) Changed the heuristic to retrieve sequence B1 from MT300 and MT304 to be more efficient even if the message structure is invalid
(PW-867) Enhanced the parsing of party fields A, B and D, to be more strict when splitting the /D/ or /C/ prefix from the account
Enhanced MtId constructor with regex matching
Added method namespaceURI() in the MtId class to return for example "urn:swift:xsd:fin.103.2021" for the MT103
9.3.0 - May 2022
SWIFT Standard release update 2022 (live 20 November 2022)
Yearly revision of deprecation phase (see http://www.prowidesoftware.com/resources/deprecation-policy)
Updated gson dependency to 2.9.0
9.2.13 - April 2022
(PW-892) Fixed AbstractMT#create when the message type number is less than 100
Added a convenient String message() method in the SwiftMessage object to get the FIN serialization of the message
Fixed error in Field 94G getValue
9.2.12 - March 2022
(GH-103) fixed invalid ConstraintValidator annotation on CurrencyValidator
(GH-95) patterns getters are now non-final to avoid overwriting; static constants have been deprecated
RJE and PPC readers, added a constructor with explicit charset (same in swift parser from input stream)
Validate.notNull -> Objects.requireNonNull
Spotbugs code review
9.2.11 - January 2022
Added LineWrapper (utils) to replace Apache's WordUtils.wrap and thus the commons-text dependency
Added convenient method in the envelop message MT798 to get the sub-message type as a SwiftMessage
Added a copy constructor to the Tag class
9.2.10 - January 2022
(PW-815) Fixed getValue in field 12H (SCORE) where narrative is optional
(GH-89) MT530: Fixed repetition of sequence C ADDINFO
Updated dependency: gson:2.8.8 -> gson:2.8.9
Java 11 and 17 compatibility updates
Added plugins for automatic versioning and code quality reporting
9.2.9 - December 2021
(GH-78) Fixed MT537#getSequenceBList where sequence B delimiter "STAT" overlaps with C3 and D1a1B1a delimiters
(GH-74) Fixed parser for Field48 and similar cases to avoid trimming content when the component contains also the slash separator as part of the value
(GH-62) Added com.prowidesoftware.core as automatic module name in the MANIFEST for JPMS support
Fields getComponentLabel is now public, returning the specific label for each field component
Fixed bug in PartyIdentifierUtils.getPartyIdentifier
Fixes in field component names and optional status
Fixes in field parsing
Incompatible change in field 71N (changed from 7 Narrative lines to Code + 6 Narrative lines)
Incompatible change for field 11T to have two lines (MT new-line DATE + TIME)
Fixed Structured Narrative parsing to return an empty Narrative object with null string values
9.2.8 - November 2021
(PW-764) Added new variant values (RFDD, ISLFIN)
(PW-703) Block 2 parser: lenient parser to avoid duplicate error when exception on invalid Input/Output indicator
(CR-23) Enhanced getValueDisplay for fields (no decimal separator for numbers that are not amounts)
9.2.7 - October 2021
Field 98D, 98E and 98G: removed invalid get{Component4|Sign}AsCurrency and set{Component4|Sign}(Currency) as no currency applies to these fields
Fields 94L and 85L: separated component 2 (Legal Entity Identifier) into two (Legal Entity Identifier Code and Legal Entity Identifier Number). Kept get/setLegalEntityIdentifier for backwards compatibility
Field 94H: second component now has get{name}AsBIC and set{name}(BIC) methods
Field 56B: now inherits from OptionBPartyField (to have get/setPartyIdentifier)
Field 26C: separated component 5 into 5 (Denomination) and 6 (Form) for compatibility with Swift. Kept get/setDenominationForm for backwards compatibility
Field 26A: now has 2 components (Number 1 and Number 2) for compatibility with Swift. get/setNumber is kept for backwards compatibility
Field 23: fixed getValue and parse to properly handle missing intermediate fields
Field 14S: has 4 new compatibility methods: getRateSource/setRateSource for Source and Number components and getTimeAndLocation/setTimeAndLocation for Time and Location components
Field 12: component is now of expected to have a numeric type
Code cleanup for Fields and Date|BIC|Amount|Currency Container
Added support for BigDecimal and Long component types (instead of just Number) in several fields
Fixed display text generation for fields having a date with pattern MMDD (only the month was included in the text)
OptionAPartyField: added set/getPartyIdentifier (for components 1 and 2) and renamed BIC to IdentifierCode. Affects fields 42A, 51A, 52A, 53A, 54A, 55A, 56A, 57A, 58A, 81A, 82A, 83A, 84A, 85A, 86A, 87A, 88A, 89A, 91A and 96A
Prepared Option A, B and D classes to support the PartyIdentifier interface with methods getPartyIdentifier and setPartyIdentifier
Enhanced Block2 creation by enriching Block Type to "O" or "I".
(PW-746) Fixed MT reference extraction for 20C in categories other than 5, and with MUR as fallback option
(CR-23) Added SwiftMessage#getMOR
Updated dependency: Apache Commons Lang 3.8.1 -> 3.12.0
Updated dependency: Apache Commons Text 1.6 -> 1.9
Updated dependency: Gson 2.8.2 -> 2.8.8
9.2.6 - October 2021
(GH-60) Enhanced parser for field 98C
(PW-703) Enhanced SwiftParser in order to validate "Input" or "Output" Block 2 type
Enhanced the MtId to automatically extract the variant from String identifiers such as "fin.103.STP" or "202.COV"
9.2.5 - September 2021
(PW-664) Parser enhancement to be lenient on LF before block identifier
9.2.4 - August 2021
MultiLineField: preserve starting component separator when getting lines with offset
9.2.3 - August 2021
Added user assigned country codes (example "XE") as valid codes in the IsoUtils country validation
Added field classes for SCORE messages: 11T, 12[S,R], 25G, 31[J,K,T], 34[D,K,L,M,S,T,U,X,V,W], 49[J,K,L] (to be used in the proprietary payload of the MT798 envelop)
MT564: Minor scheme fix, 92a TAXR and WITL can be repeated in CASHMOVE (E2)
9.2.2 - July 2021
(PW-627) fixed Narrative.builder() to compute "//" size in the lines wrapping
(PW-581) the MultiLineField API now preserves any starting and trailing spaces in field lines
MT565: fixed repetition of sequence B2 (multiple to single)
MT548: Minor scheme fix, added letter option "C" in field "98C:SCTS" in sequence "C1a1B1"
9.2.1 - June 2021
Added "ignore block 3" and "ignore priority" options to the SwiftMessageComparator
Added field classes for SCORE messages: 12[H,K,L], 20E, 25F, 29[D,F], 31R, 78B (to be used in the proprietary payload of the MT798 envelop)
Enhanced parser for LogicalTerminalAddress when the parameter has 9 characters
(PW-534) allowed null value for the Tag constructor
9.2.0 - May 2021
SWIFT Standard release update 2021 (live 21 November 2021)
Yearly revision of deprecation phase (see http://www.prowidesoftware.com/resources/deprecation-policy)
Fixed the getSequence API in MT classes when the sequence boundary field is repetitive, in some scenarios produced invalid results
(PW-519) Field92H: Added "Rate Status" accessors
(PW-519) Field92J: Replaced "Narrative" accessors by "Rate Status" accessors
9.1.4 - April 2021
Fixed getConditionalQualifier in fields 69C, 69D and 92H
Fixed field 41D isOptional(component) method
(PW-510) Fixed parser of field 90L
(PW-508) Fixed validator pattern in field 98K
Added MultiLineField interface implementation to fields: 45C, 45L and 49Z
Removed MultiLineField interface implementation to field 77H since its value is always a single line
(PW-501) Added getNarrative(deli), getNameAndAddress(deli) and similar getters in Field classes to get a concatenation of the relevant components with a specific delimiter
(PW-501) Fixed the getNarrative(), getNameAndAddress() and similar getters in Field classes to do a simple join of the relevant components, without CRLF and without components value trim
Added helper API SwiftTagListBlock#splitByTagName to get sub-blocks by field boundary
Fixed IOB exception in SwiftBlock2Output#setMIR in lenient mode
SwiftParser#tagStarts changed to protected to allow overwriting in custom parsers for non-compliant messages
Moved getMessageType from MtSwiftMessage to parent class AbstractSwiftMessage
Added getVariant and getMtId to MtSwiftMessage; added getMxId to MxSwiftMessage
Added setMUR in SwiftMessage
Added helper method in SwiftWriter to ensure break lines of any String has CRLF
Added setSignature and getSignature to SwiftMessage and AbstractMT to set and retrieve MDG tag in S block (LAU computation available in Prowide Integrator)
Added propertyValue to AbstractSwiftMessage to check if a property is set with a given value
Changed IsoUtils implementation to use Currency.getAvailableCurrencies() in the initialization
Deprecated AckSystemMessage in favor of ServiceMessage21
Fixed negative index bug in AbstractSwiftMessage#getPreviousStatusInfo when message has less than two statuses in the trail
Fixed getLines API in Fields that in some cases was trimming the first line starting slash from the result
Fixed eventual NPE produced in MxSwiftMessage#updateFromMessage() when creating MxSwiftMessage from XML document
Fixed column length for "variant" in MxSwiftMessage persistence mapping
Added a fields() method in SwiftTagListBlock to get all block Tag objects as Field objects
Added API to field 50F and 59F to get structured content for the line numbers
7.10.3 - October 2018
License changed from LGPL to the more permissive Apache License 2.0
Fixed serialization of field 48
Completed SwiftMessageUtils#currencyAmount for missing MTs
Fixed NPE in SwiftBlock4.removeEmptySequences with fields 15A as sequence boundary
Added JsonSerializable interface to all model classes implementing toJson()
Added toJson and fromJson to MT and Field classes
Added toJson and fromJson to the MtSwiftMessage and MxSwiftMessage model
Added field 434 in SwiftBlock3Builder
7.10.2 - May 2018
Revamped the JSON API implementation using Gson, added missing fromJson methods
7.10.1 - April 2018
FIN writer: reverted the trim in tag values introduced in 7.8.9
7.10.0 - April 2018
SWIFT Standard release update 2018
JRE requirement increased to Java 1.7
Dependencies: updated apache commons-lang from 2.6 to 3.7
Yearly revision of deprecation phase (see http://www.prowidesoftware.com/resources/deprecation-policy)
Added API in SwiftMessage for the SWIFT gpi service: getters and setters for the service type identifier and UETR
Added an automatically generated UETR when creating new MT instances for 103, 103 STP, 103 REMIT, 202, 202 COV, 205, or 205 COV
Added API in SwiftMessage to set the variant (STP, REMIT, COV)
New helper API for block 3 (SwiftBlock3Builder) to ensure only expected fields are added and in proper order
7.9.7 - April 2018
Dependencies: added gson 2.8.2
Added full IBAN validation including control digits and custom account numbers per country
Added SwiftCharset and SwiftCharsetUtils helper API to validate SWIFT related charsets.
Added SwiftTagListBlock#getFieldByQualifiers(name, qualifier, conditionalQualifier) to gather generic fields based on qualifiers content
Added addTag(index, tag) and setTag(index, tag) in SwiftTagListBlock to insert new field in specific positions
Added Field#is(String ...) to test component 1 of fields against a list of possible values
Added non-ISO country code XK (Kosovo) to IsoUtils
Added API in IsoUtils to add custom codes for countries and currencies
Added read-only properties in AbstractSwiftMessage for the message creation year, month and day of moth
Added support for custom split char in RJE reader/writer
Fixed missing repetitive 35B in MT549
Build migrated to Gradle
7.9.6 - December 2017
Fixed conversion to XML with compressed parameter true in ConversionService
7.9.5 - December 2017
Fixed getValueDisplay in field 50F to strip the starting slash in the account number
Added getLabelForLineNumber(String subfieldNumber) in Field50F to return the labels for the structured line identifiers
Enhanced getComponentLabel(final int number) in Field50F to return proper dynamic labels based on line number identifiers
Added getCorrespondentBIC to SwiftMessage and AbstractSwiftMessage
Expanded sender/receiver in MtSwiftMessage and MxSwiftMessage from BIC8 to BIC11 in order to keep branch information in those cached attributes
Added checksumBody to AbstractSwiftMessage for proprietary checksum calculated on the body only, as a complement to the existing checksum on the whole message
Fixed AbstractSwiftMessage#copyTo(msg) implementation to perform hard copy of list objects (similar to a copy constructor implementation)
Expanded precision in getValueDisplay for all numeric fields to preserve the decimal digits present in the original value
Implemented SwiftMessage#getUUID and added getUID(Calendar, Long)
Implemented SwiftMessageUtils#calculateChecksum as MD5 hash on whole FIN message content and added new checksum for the text block only
7.9.4 - November 2017
Internal code maintenance release
7.9.3 - October 2017
JRE requirement increased to Java 1.6
Added API in BIC to return the distinguished name (DN) for a BIC
Added equalsIgnoreCR in Tag to compare values regardless of carriage return character being present or not in new lines
Fixed MxParser#parseBusinessApplicationHeaderV01 (it was setting the FinInstnId/Nm as BIC)
Removed invalid component in field 86J
Fixed order of components in fields 98J and 98K
Completed the component labels for all fields
Changed field 22C structure into individual components for the function
Enhanced fields parse/serialization to preserve any whitespace in a component
7.9.2 - August 2017
Fixed FINWriterVisitor to prevent printing 'null' tag values
Deprecated custom resource properties for currency and country codes, in favor of Java nativa API in Currency and Locale
Removed package-info.class from target jar to avoid class modifier issue in Java8 runtime
Fixed serialization of field 50F to allow the first line without a starting forward slash
7.9.1 - June 2017
(Issue #5) Enhanced performance in SwiftParser
Removed sequence API for inner loops (non sequence) in MTs 306, 320, 340, 360, 361, 362, 410, 412, 420, 422, 450, 456
7.9.0 - May 2017
SWIFT Standard release update 2017 (live 19 November 2017 for MT and 18 November for MX)
(Issue #2) maven build issues
(Issue #3) Field61 component 5 treated as amount
(Issue #4) Field72 structure fixed to allow 6 components at most
Field99A implements AmountContainer
Field95L implements BICContainer
7.8.9 - May 2017
Yearly revision of deprecation phase (see http://www.prowidesoftware.com/resources/deprecation-policy)
Added convenient isType(int) to SwiftMessage
Fixed amounts() in AmountContainer fields
7.8.8 - March 2017
Added hashcode and equals to MxId
Added MUR generation in block 3
Added a multi-purpose SwiftMessageComparator for MT, as an abstraction of the existing AckMessageComparator
Added helper API to remove empty sequences in block 4
Added ACK/NAK identifier constants and API in AbstractSwiftMessage
Added getDateAsCalendar in MIR/MOR
Added MtCategory enum for MT message categories and convenient category API in SwiftMessage
Added support for system and service messages in metadata gathered from SwiftMesasge in MtSwiftMessage
Added isServiceMessage in SwiftMessage
Added static factory method parse to SwiftMessage
Added new fields in AbstractSwiftMessage to hold main currency and amount, automatically set for most MTs from fields 32a, 33a, 34a, 19a and 62a
Added conversion to and from LT address in SwiftFormatUtils
(CR #10) Added comprehensive implementation of MT and Field classes for system messages (category 0)
Added custom name for internal loop sequences in MTs 110, 360, 361, 604, 605, 609, 824, 920, 935, 940, 942, 971 and 973
Added more options to retrieve information from the status trail in AbstractSwiftMessage
Reduced visibility from public to protected for MTs inner sequence classes mutable fields; START, END, TAIL.
Fixed analyze and strip API in MxParser to support nested Document elements
Fixed MT500 removed invalid fields after GENL linkage sequence
Fixed AckMessageComparator to cover all fields in block 2 input and output
Fixed getSender and getReceiver for service messages in SwiftMessage
Fixed MT600, removed invalid fields 26F, 34G, 31C in sequence A
Fixed parse for DATE1 (MMDD) to handle properly leap years
Fixed RJEWriter to avoid writing the split character '$' and the end of the file, afterwards the last message
Expanded helper API in AckSystemMessage
TagListBlock tags field made private instead of package protected
Enabled mutability of LogicalTerminalAddress objects, allowing setting the branch from superclass BIC
Enhanced parser for fields 11R, 11S and 37H (NPE prevention)
Enhanced from() and to() methods in BusinessHeader to catch more options
7.8.7 - December 2016
Fixed getMessageType in MT103_STP, MT102_STP, MT103_REMIT, MT202COV and MT205COV to return the number without the validation flag (as expected per javadoc definition)
MT518 fixed fieldset for Field 70
MT330 fixed qualifier in Field 22
MT513 and MT514 Field 11 moved outside previous fieldset
MT541 to MT547 Field 90[A,B] changed to fieldset.
MT564 fixed fieldset items in Field93[B,C]
MT565 to MT567 Sequence D, fixed field 13
MT609 and MT798_763 fixed qualifiers in Field 29
When creating MT instances, the validation flag (STP, REMIT, COV) will be automatically created as block 3 field 119 when applies for the created MT
Log warning when creating MTnnn objects from invalid message types, for example calling MT103.parse(fin) and passing FIN content for an MT 202
Ignore validation flag (STP, REMIT, COV) if it is not valid for the message type, when creating MT object from SwiftMessage (to avoid ClassNotFoundException)
Enhanced semantic in AckMessageComparator when a blocks are null or empty (see javadoc for details on how blank blocks are handled in comparison)
7.8.6 - November 2016
MxParser; IOB exception prevention in strip methods when XML has empty header or document
Prevention for IOB exception in ensureEOLS when converting MT message from model into FIN text
Expanded API in SwiftParser with static parse methods for each MT block
Expanded API in SwiftWriter to serialize any MT block into its native SWIFT representation, also made visit API in SwiftMessage static
7.8.5 - October 2016
Added getSubBlockByTagNames and getSubBlocksByTagNames in SwiftTagListBlock to retrieve subblocks based on comprehensive list or tag names
Added API in BusinessHeader to create valid BAH from simple parameters
Added API in BIC to get the branch and institution
Added API to match message identifier by regex, for example fin.*STP
Added API to strip header and document portion of Mx message in XML format
Added analizeMessage in MxParser, lightweight API to retrieve structure information from an MX messages
Added enumerations for message priority and delivery monitoring in MT block 2
Added json() to AbstractMT
Added getComponentLabel(int) in Field classes
Added updateFrom AbstractMT to MtSwiftMessage
Added reference as class attribute in AbstractSwiftMessage (set by subclasses)
Added FileFormat attribute to AbstractSwiftMessage for clear identification of content in implementing subclasses
Added constructor of MxSwiftMessage from AbstracMX
Added API to get BIC codes from DN in Mx messages
Added MtId class, analogous to the existing MxId for MX messages
SwiftParser parsing of block 4 published as static public method
Added AbstractMessage as base class for specific MTnnn and MXmmm model hierarchy
Added MessageStandardType with MT and MX values and ServiceIdType for header service id values
Added nextSwiftMessage in RJE/PPC readers for system messages support
Added valuesNumeric to MT enumeration MtType
Added getValueDisplay with optional locale parameter to display formatted field and individual components values
Added MTVariant enum and getVariant API in swift messages
Added CONDITIONAL_QUALIFIER component number as static class field for all generic fields (fields implementing the GenericField interface)
Added BusinessHeader serialization into xml and Element objects
Added business header parse from Element object in MxParser
Added RJEReader and RJEWriter to create MT message files in RJE format
Added PPCWriter to create MT message files in DOS-PPC format (also enhanced API for the existing PPCFileReader)
Added path() API in MxNode
Added MtType, an enumeration of all available MTnnn implementations
Added parse to Field classes to update field components from full value
Added append lists of Tag or Field to TagListBlock
Added support for attributes in MxNode
Added generic setters for attributes in header blocks 1 and 2 using qualified names (#setField)
Added write XML method for MX business header
Added validName as static method in Field, to validate field names
Added getField static API in Field to create new instances with reflection given the field name and value
Added reference(msg) to SwiftMessageUtils to get the sender reference from messages that contain a reference field
Added SwiftMessageRevision to the swift messages model, to hold and track changes in swift messages
Fixed parser for field 98F
Fixed field 61 parse allowing EC and ED as credit/debit mark subfield
Fixed from() and to() methods in BusinessHeader to return the BIC code for both possible header types
FIxed serialization of component 1 in field 50F
Fixed parser and serialization in Field98F
Fixed SwiftMessage.toJson single quote to double quote in timestamp field
Fixed getLabel when used with the parameters combination of a valid mt and a null sequence
Fixed getValue in Field61,
Added proper implementation for isOptional(component) in Field61
Fixed components trim to null in parser for several fields when the component value is not present
Fixed separators trim in getLine API
Fixed setComponentN(Number) when component is not a SWIFT amount, Number is now serialized as an integer (without decimal separator)
Fixed MT parser to allow additional lines in a field start with colon ':'
Fixed field 32R second component changed from currency to string to allow codewords ’FOZ’, ’GOZ’, ’GRM’, ’KLO’, ‘LIT’, ’LOT’, ‘OTH’, ‘PND’, ’TAL’, ’TOL’, ‘TON’, ‘TOZ’, ’UNT’
Fixed field 33B first component changed from currency to string to allow codeword ’PCT’ used in MT601
Fixed API inconsistencies in MtSwiftMessage when updating from SwiftMessage objects.
Bugfix MT506 added mandatory field 28E
Added missing getters for Sequence E1 in MT300
Changed MX messages detection in MxParser to lighter implementation using Stax
Normalized Input/Output Outgoing/Incoming API in AbstractMT and SwiftMessage
SwiftMessage.toJson changed timestamp format to the recommended ISO 8601
MxSwiftMessage meta-data (sender, receiver, reference, identifier) read and set from raw XML content
Added support in XmlParser for the field version of Core proprietary XML format for MTs, the parser now reads both formats seamlessly
Better header API in MxSwiftMessage to support both ISO and SWIFT business headers
Elaborated identifier in MtSwiftMessage, using fin.type.variant instead of just the message type
Added comprehensive sequence names into pw_swift_label property files
Added translations of pw_swift_label property files to FR, DE and IT (complementing the existent EN, ES and RU files)
Completed pw_swift_label property files for all field + mt + sequence combinations
Complete application header parsing in MxParser
Better application header detection in MxParser based on namespaces
Added component labels for field 13K
Fields 11R and 11S component 3 split into two independent components.
In Field61, component 6 was splitted into two independent components to hold the "transaction type" and the "identification code" as stated in the standard definition for function
Added SwiftParserConfiguration to encapsulate several parsing options, allowing fast parsing of AbstractMT by reading the text block in raw format
7.7.0 - October 2015
valueDate in SwiftMessageUtils
isType(int...) in SwiftMessage
Enhanced the getSequence API in MT classes with support to nested sequences, allowing for ex: getSequenceE1(getSequenceEList().get(n))
getLine API for FieldNN classes based on semantic lines number identification
Copy constructors for FieldNN classes, performing a deep copy of the components' list
MxParser message detection
New generic XML model and API, as backbone for MX messages.
Headers Blocks: new generic getters in blocks 1 and 2 to retrieve attributes using full qualified names from enums; for example getField(SwiftBlock1Field.LogicalTerminal)
Static labels for subfields in FieldNN classes to allow for example getComponent(Field93B.BALANCE)
BIC: API to check for live and non-live bics
MxParser: parseApplicationHeader and constructors from several sources
Added missing labels' API to fields: 36E, 69A, 69C, 69D, 70C, 70D, 70G, 90F, 90J, 92D, 92L, 92M, 92N, 92R
Added the ApplicationHeader attribute to AbstractMX
Added API to search nodes or content by path or name in the MxNode tree returned by the MxParser
Added json() and xml() methods to MT classes
Added write to file and output streams to AbstractMT and AbstractMX
Added consistent constructors from String, File or InputStream to MTnnn classes
Added static parse methods to create MTnnn objects from String, File, InputStream or MtSwiftMessage
Added consistent constructors from String, File or InputStream to AbstractSwiftMessage and subclasses MtSwiftMessage and MxSwiftMessage
Added static parse methods to create MtSwiftMessage and MxSwiftMessage objects from String, File or InputStream
Lib: added read from input streams
NPE prevention in SwiftFormatUtils.getCurrency
Fixed getSender and getReceiver for MTxxx to return accurate information regardless the message being of type input or output (also to be consistent with analogous methods in SwiftMessage)
Added CR and LF to charset z and x at SwiftcharsetUtils
Fixed validation of fields 70F, 77S and 77T that unnecessary restricted the allowed amount of lines (not it is unlimited because charset Z allows CRLF).
Fixed OutOfBound exception at MxNode findFirst implementation when a node has multiple children
Fixed getDescription for Field35B, now returning component 3 instead of 2
Better API consistency between MT and MX implementations, with common ways to parse and build.
Changed sender and receiver attributes for MtSwiftMessage to hold BIC8 instead of full LT identifiers.
Deprecated the use of model message inside MtSwiftMessage
Simplified distribution zip with -sources and -javadoc jars
7.6.0 - October 2014
New BIC API: isTestAndTraining(), getLogicalTerminalIdentifier(), bic8() and bic11()
New model for LT addresses, and its related API in header classes
New SwiftMessage API: AbstractMT toMT()
New AbstractMT API: getSequence(name), getSequenceList(name)
Added builder API: constructors and append methods to add content with chaining support
Added missing getValue() implementations to field classes. Example: Field26C
Added annotations to MTNNN classes to identify sequence split strategy involved (more traceable code)
Moving to junit 4 - some new tests are being written with junit4, this should make testing some features singificantly easier.
Move size and isEmpty methods to subclasses.
Improved deprecated exception messages and javadoc.
Added useful getter for the MIR field in Block 2 output.
Added support for optional fields in Block 2 input.
Method specific to each block moved to each block class, when possible compatibility methods were left in old places, marked as deprecated to provide a smoother migration path.
Removed deprecated API in SwiftBlock.
Adapted parser to new model refactor.
More javadoc in parser.
Improved xml writer (more clean tabs and EOL).
Refactored and fixed XML parsing for blocks 3 and 5.
Fixed build.xml to include resources in generated jar files.
Improved javadoc and validations in fin writer.
Completed basic internal XML parsing.
Added more tests for XML conversion.
Implemented XML conversion parsing for all blocks (except 4).
Updated passing test in conversion service.
3.4.0 - March 2007
Added license header to source files.
Minor fixes in build system.
Enhanced IBAN validation routine.
Added numerous tests for IBAN validation.
Added JSValidationUnit backed by Rhino, to support easy extension of validations.
Made all loggers private static transient final.
Enhanced overview documentation.
Javadoc updates.
Code clean up.
Added many tag specific validation units targeting MT103 validation.
Removed ant junit fork since it broke in ant 1.7.
3.3.0 - January 2007
Initiated MT103 validation rule.
Validation framework core classes written.
Utility classes for validation.
Removed old and deprecated/replaces writer component.
Dependencies clean up, ant downloads less libs now.
Added Currency ISO Codes (needed for validations).
VF: implemented TagExists and ConditionalTagPresence validation units.
Started implementation of validation units.
Initial implementation of BIC validation.
Initial implementation of IBAN validation.
Added ISO Countries for IBAN validation.
Fixed issue in writer with block5 as mentioned in bug 1601122.
Fixed issue 1595631.
3.2.0 - 2006
Parser logging information cleanup.
Migrating to log4j 1.2.8 for better compatibility (issued with trace method on some servers).
Fixed build to properly include current timestamp in dist target when property release.name is not set.
Fixed bug in parser/writer integration which included double block number when using the writer with an object of a just parsed message(1595589).
Updated code to fix issue mentioned in https://sourceforge.net/forum/message.php?msg_id=4001538.
3.1.1 - 2006
Small fixes for java 1.4 compatibility.
3.1.0 - 2006
Fixes to compile for java 1.4 by default.
Fixed test for bug 1540294, typo in block number.
Use system EOL in XML writer.
Added compile timestamp to manifest in created jars.
3.0.0 - 2006
Build: Added release.name property to manifest.
Build: added selection of tests known to fail and those known to pass.
Fixed persistence mapping.
Improved build and added control to exclude tests that are know to fail.
Model simplification: SwiftBlockN classes are being removed in favor of base class SwiftBlock removed list of blocks in message which was confusing when not all blocks present.
SwiftBlock (base class) and subclasses are mapped and persisted ok, either the base class or the subclasses.
Added many tests for Hibernate persistence of SwiftMessage hierarchy.
Added XML Visitor to write a swift message to an XML representation.
Added ConversionService class which encapsulates many services conveniently.
2.0.0 - 2006
New parser component highly tested on production and unit tests.
Writer component usable. while it has many limitations, it can be used as it is now.
Work in progress swift message persistence mapping.
Work in progress swift expression <-> regular expression conversion.