back Changelog for Core - Latest Version

Version 7.8.9 - May 2017 - LTS maintenance version for current SRU (2016)

  • Yearly revision of deprecation phase Deprecation Policy
  • Added convenient isType(int) to SwiftMessage
  • Fixed amounts() in AmountContainer fields

Version 7.8.8 - March 2017

New API

  • 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

Fixes

  • 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

Enhancements

  • 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)
  • Removed invalid generated code for internal loops (non-sequence) in MTs: 110, 201, 360, 361, 559, 604, 605, 609, 824, 920, 935, 940, 942, 971, 973
  • Enhanced from() and to() methods in BusinessHeader to catch more options

Version 7.8.7 - December 2016

Fixed MT schemes

  • 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

Enhancements

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

Version 7.8.6 - November 2016

Fixes

  • 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

Enhancements

  • 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

New API

  • 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

Fixes

  • Fixed parser for field 98H
  • 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

Enhancements

  • 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.msgtype[.mug|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 SUB-6
  • Added SwiftParserConfiguration to encapsulate several parsing options, allowing fast parsing of AbstractMT by reading the text block in raw format
top