(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.