Changelog for Prowide Core (WIFE) - Older Versions

Version 7.4 - March 2014


  • In BIC added subtype attribute and getBranch method
  • ReaderIterator to read a file from a classpath resource and split its content by the '$' symbol
  • In SwiftMessage new API to check and get linkages sequences
  • In AbstractSwiftMessage new constructor using MTSwiftMessage as parameter
  • In MTSwiftMessage updateFromModel and updateFromFIN using internal attributes
  • Several helper methods to parse field content using SwiftParseUtils
  • Field classes implementation for fields belonging to System and Service Messages (i.e. 451)
  • Resource bundle labels for System and Service Messages fields
  • MOR class to represent the message output reference (inherited from the MIR)
  • SwiftParseUtils: getTokenSecond and getTokenSecondLast with prefix
  • getAll(SwiftMessage) in every FieldNN class
  • getAll(SwiftTagListBlock) in every FieldNN class
  • New constant in Field suitable for import static
  • SwiftTagListBlock#constructors made public
  • SwiftTagListBlock#filterByNameOrdered(String ...)
  • SwiftTagListBlock#getFieldsByNumber(int)
  • SwiftTagListBlock#removeSubBlock(String)
  • SwiftTagListBlock#countByName(String)
  • SwiftTagListBlock#countAll()
  • SwiftTagListBlock#containsAllOf(String...)


  • Improved toString in SwiftTagListBlock and Tag
  • Javadoc improvements


  • Fixed SwiftBlock1 constructor to allow LTs missing the optional A, B or C identifier (11 characters length); ex. FOOOAR22XXX
  • Fixed getStatusInfo and getPreviousStatus in messages base class that was causing IOB exceptions
  • Issue 39: missing trimToEmpty in getComponent2 in 50H
  • MT207: fixed maximum repetitions of sequence B from 1 to unlimited

Version 7.3 - January 2014

  • removed
  • Added com.prowidesoftware.swift.model.field.Field.isAnyOf(String...)
  • Added many methods in SwiftTagListBlock in resemblance to String manipulation API
  • Added SwiftTagListBlock#getTagsByNumber(int) and SwiftTagListBlock#removeAfterFirst(String, boolean)
  • Added Tag#startsWith and Tag#contains
  • Added PPCFileReader iterator to read and split pc connect files

Version 7.2 - September 2013


  • Field.letterOption
  • SwiftTagListBlock.getSubBlockBeforeFirst
  • SwiftTagListBlock.filterByName


  • Field.appendInLines that was causing the getValue of several fields (ex 35B) to start with unexpected EOL
  • NPE in XMLParser with null value in tags
  • Avoid usage of double in amount resolver

Version 7.0 - August 2013


  • Enhanced messages model with base support for MX messages.
  • New messages meta-data model to handle additional information: Status history, User notes, Properties list.
  • Useful API to SwiftMessage to get: direction, PDE, PDM, UUID, MIR, MUR and getTypeInt
  • Complete FieldNN implementation classes
  • Complete MT helper classes, covering all message types
  • Added model and API to handle Sequences at MT classes, covering all sequences based on 16R/16S boundaries.
  • New API to handle sub blocks: SwiftTagListBlock#removeUntilFirst and SwiftTagListBlock#containsAnyOf
  • Ensuring of SWIFT EOL at ConversionService.getFIN


  • Fixed getValue of several fields to prevent printing of null
  • Fixed getValue of several fields with missing slash separator on optional components
  • Added missing field getters for MT classes with fieldsets: for example 93B at MT564.
  • getValue for Field35B. Thanks to Raghu
  • getCalendar bug related to unused format parameter
  • Changed Field26C parser and subfields structure to split the string before the VAR-SEQU into independent components


  • Removed deprecated net.sourceforge classes
  • Removed unimplemented method amounts() in AmountContainer

Version 6.4 - March 2013

  • Added visitor API on tag list block
  • New interface to identify and use generic fields (notice DSS methods are not part of non-generic fields)
  • Added API on MT classes to simplify messages creation
  • Comprehensive getters and setter API for field classes using functional names
  • Added PatternContainer interface and implemented in field
  • Better CurrencyContainer API
  • Added API to SwiftFormatUtils to get String components from Calendar using different SWIFT date/time formats
  • Implemented API for CurrencyContainer for all Fields
  • Added MT helper classes for MTs: 518, 549, 800, 801, 802, 824, 600, 601, 604, 605, 606, 607, 608, 609
  • Added Field implementations for 33G, 35U, 86B, 68A, 68B, 68C, 94C, 31F, 37a, 34J, 35H, 31X
  • Added API to simplify messages creation; defaults for header blocks attributes, addField to Block4, setSender at Block1

Version 6.3 - October 2012

  • Added MT helper classes for MTs: 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 565
  • Fixed getAsCalendar for year component of field 77H
  • Fixed parsing of field 50F
  • Added field class for: 26C
  • Support to identify which sequence a tag belongs to
  • Added API to FieldNN classes to get the DSS field
  • Added API to FieldNN classes to get the qualifier and conditional qualifier components
  • Added API to FieldNN classes to determine if field is generic or non generic
  • Field class made abstract
  • FieldNN isOptional: method to check if a given component is optional for the field
  • Field getLabel: support for label exceptions per mt and sequence
  • SwiftParser changes to distinguish the presence of brackets when they are block boundaries or part of an invalid field value
  • Improved parsing of Field35B, first and second components are set only if "ISIN " is present
  • SR2012 update: deprecated fields 23C, 23F. Updated MT300, MT304, MT305 with field changes.
  • Added serialization for: 20E, 29G, 31G, 36E, 50G, 50H, 69B, 69D, 69F, 77H, 90F, 90J, 90K, 92D, 92L, 92M, 92N, 94D, 94G, 95T, 98F
  • Fixed serialization of field 59A

Version 6.2 - June 2012

  • Purged and some tunning of parser log
  • Added getField
  • API con block4
  • Added Tag API: public boolean contains(String ... values)
  • Added more API to get subblocks based on tag number boundaries regardless of letter options
  • Fixed Tag.isNumber to consider the whole number and not just the prefix, isNumber(58) returns true to 58A but not to 5
  • Added Tag.getNumber() API
  • Fixed build to include MTs and FieldNN source codes in the package
  • Fixed parser for fields: 94D, 50H, 50G and 52G
  • Added MT helper classes for MTs: 567, 900, 910, 920, 935, 941, 970, 971, 972, 973, 985, 986
  • Added API for getLabel at Field objects, to retrieve business oriented names from resource bundles

Version 6.1 - March 2012

  • Added BICContainer interface
  • Added MT helper classes for MTs: 360, 361, 362, 364, 365, 381, n90, n92, n95, n96, n98, 420, 422, 430, 450, 455, 456, 701, 705, 711, 720, 721, 732, 734, 740, 742, 747, 750, 752, 754, 756, 768
  • Added getValue for Field13E
  • Fixed getValue for Field31R (2nd component is optional)

Version 6.0 - February 2012

  • Merged patches from Walter Birch
  • SwiftParser: fix for parse error with malformed tag 72
  • Implemented getValue for Fields: 19B, 31D, 31P, 31R, 39P, 40B, 41D, 92F, 93B, 98E and others with the same parser pattern
  • Changed packages in Hibernate mappings from sourceforge to prowidesoftware
  • Added SwiftMessageUtils class
  • Added date container interface to Fields to better support higher level model expressions
  • Added currency container interface to Fields to better support higher level model expressions
  • SWIFT standard update (Nov 2011)
  • Fixed field parser for 35B
  • Changed SwiftParser log level
  • Build system modifications: in all wife.jar, standard -sources and -javadocs jar files, consistent and explicit release name in all three jars, default release name is current date (not hardocoded value), include dependent jars in standard lib directory in release bundle
  • API to create FieldNN objects from Tag objects
  • Fixed field parser for 35B when first component is an ISIN number
  • Added DATE1 support for fields parser (fixes Field61)
  • SwiftMessage API to get sender and receiver addresses from message headers
  • Added MT helper classes for MTs: 101, 104, 105, 107, 110, 111, 112, 200, 201, 204, 205, 205COV, 207, 256, 300, 305, 306, 307, 330, 340, 341, 350, 540, 541, 542, 543, 564, 566
  • MT helper classes 102_not_STP and 103_not_STP with inheritance from defaults MT103 and MT102 classes
  • Added Field implementations for 36E, 69B, 69D, 69F, 90F, 90J, 93B, 93C, 94G, 95T, 95S, 98E, 98F, 98L, 67A, 77J, 92E, 98D, 95S, 50G, 50H, 52G, 31G, 77H
  • TIME3 implementation to format utils
  • Suppress warnings for unused imports in eclipse

Version 6.0-RC5 - August 2011

  • Fixed parser for Field20E
  • Added Field implementations for 90K, 92D, 92L, 92M, 92N

Version 6.0-RC4 - July 2011

  • Added MT helper classes for MTs (SCORE): 798<743>, 798<745>, 798<760>, 798<761>, 798<762>, 798<763>, 798<764>, 798<766>, 798<767>, 798<769>, 798<779>, 798<788>, 798<789>, 798<790>, 798<791>, 798<793>, 798<794>, 798<799>
  • Added MT helper classes for MTs: 191, 291, 391, 399, 491, 535, 591, 691, 699, 707, 760, 767, 769, 790, 791, 891, 991, 999
  • Added Field implementations for 13E, 20E, 22L, 23X, 24E, 27A, 29D, 29G, 29S, 31R, 39D, 39P, 49H, 49J, 50M, 72C, 77C, 77E, 78B

Version 6.0-RC3 - April 2011

  • Added MT helper classes for MTs: 304, 320, 321, 210, 599
  • Added Field implementations for 19B, 32H, 32R, 34E, 37G, 37M, 37R, 38J, 92F, 62A, 62B

Version 6.0-RC2 - February 2011

  • Added Field implementation for 15 (A,B,C,D,E,F,G,H,I,J,K,L,M,N)
  • Added MT helper classes for MTs: 300, 400, 410, 412, 416, 499, 544, 545, 546, 547, 548, 700, 710, 730, 799
  • Added Field implementations for 31D, 31P, 40B, 41A, 41D, 45A, 45B, 46A, 46B, 47A, 47B
  • field serialization from components values into SWIFT single string value
  • Removed from distribution jar
  • MTs API: fixed field mutiplicity when a field becomes repetitive being present on multiple sequences or at repetitive sequences.
  • Hibernate mappings: removed confusing/commented blocktype mappings at SwiftBlock.hbm.xml
  • Hibernate mappings: package rename

Version 6.0-RC1 - October 2010

  • normalization of linefeeds to CRLF at Tag creation from XML parsing
  • Removed deprecated API
  • Added new package io with subpackages parser and writer; added new package utils.
  • Renamed all packages to com.prowidesoftware (backward compatibility maintained with facades)
  • Migrated src code to java 1.5 (binary distribution is still 1.4 compatible by means of
  • Added implementation for MTs 102 not STP, 102 STP, 103 not STP, 103 STP, 195, 199, 202, 202COV, 203, 295, 299, 940, 942, 950
  • Added new SWIFT MT high level generated API, with classes for specific message types
  • New source package for generated swift model
  • Merged project "prowide SWIFT Fields" into "WIFE"
  • Added comparison options to AckMessageComparator
  • Removed old and incorrect charset validator class net.sourceforge.wife.swift.MessageValidator
  • BUGFIX in remove user block method, thanks to Herman's contribution and patience
  • Parser API for (new SwiftParser()).parse(messageToParse);
  • Replaced commons-lang-2.3 -> 2.4
  • Fixed message writer: system messages' block4 generated with inline tags
  • SwiftMessage API to check if it's Straight Through Processing (STP), based on the content of the User Header
  • SwiftMessage API to check if it's a cover payment (COV), based on the content of the User Header
  • SwiftTagListBlock API to check if contains a specific Tag
  • Java 1.4 compatibility changes
  • Removed unimplemented and confusing package net.sourceforge.wife.validation
  • Deprecated old and unused validation-related classes
  • Added AckMessageComparator which is useful of identify the ack of a given message.
  • SwiftTagListBlock API to get a sub block given its name or its starting and ending Tag
  • SwiftTagListBlock API to get tags by content, given its exact or partial value
  • Helper methods from Block4 moved to SwiftTagListBlock
  • SwiftTagListBlock is no longer abstract, so it can be used to create instances for subblocks
  • Required JVM upgrade to 1.5
  • Initial update of upload-sf target for release to sourceforge
  • .cvsignore update

Version 5.2 - February 2009

  • Added missing hashcode and equals
  • Javadocs improvements
  • Revised and tested hibernate mappings
  • Added getBlockType
  • Added length to unparsed text persistence mappings
  • Fixed persistence mapping for block2 inheritance
  • Updated hibernate libs to version 3.2.6
  • Added isOutput
  • isInput made concrete, not abstract
  • Added abstract isInput() method to SwiftBlock2 for safer casting subblocks when input/output is unknown

Version 5.1 - July 2007

  • Migrated logging to java logging api
  • Removed SwiftBlock's deprecated methods.
  • Moved some common methods in SwiftBlock2Input/SwiftBlock2Output to parent class SwiftBlock2.
  • Upgraded commons-lang to version 2.3
  • Improved persistence mapping.
  • Move persistence (helper) package to wife-test project.
  • Minor javadoc fixes.
  • Fixed some warnings.

Version 5.0 - June 2007

  • Improved Hibernate mapping for simplified and more efficient data base schema.
  • Added support for unparsed text to model, persistence mapping and conversion services (needed for some MT0xx for example).
  • XML to SwiftMessage parsing methods moved from ConversionService to XMLParser in "parser" package.
  • New package created for parser classes "net.sourceforge.wife.swift.parser".
  • Made abstract intermediate classes of blocks object hierarchy.
  • Added support for user custom blocks in model, persistence mapping and conversion services.
  • Improved overall test cases coverage and source/resources structure.
  • Fixed some warnings.
  • Swift Parser enhancements; don't throw exception on unrecognized data, but preserve an internal list of errors.
  • Added reference to current message in parser, so it can take decisions based on parsed data.
  • Added constant for possible values for application id to SwiftBlock1.
  • Updated dependency: hsqldb -> hsqldb
  • Updated dependency: hibernate 3.1.3 -> hibernate

Version 4.0 - April 2007

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

Version 3.4 - 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.

Version 3.3 - 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.

Version 3.2

  • 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 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

Version 3.1.1

  • Small fixes for java 1.4 compatibility.

Version 3.1

  • Fixed test for bug 1540294, typo in block number.
  • Use system EOL in XML writer.
  • Fixes to compile for java 1.4 by default.
  • Added compile timestamp to manifest in created jars.
  • Minor java 1.4 compatibility fixes.

Version 3.0-RC2

  • Build: Added property to manifest.

Version 3.0-RC1

  • 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 hiberante persistence of SwiftMessage hierarchy.
  • Added XML Visitor to write a swift message to an XML representation.
  • Added ConversionService class which encapsulates many services conveniently.

Version 2.0

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