Este es un paquete central y provee las clases para contener la estructura de todos los mensajes SWIFT.
El modelo central de los mensajes se realiza con la clase SwiftMessage. La misma está conformada básicmaente una jerarquía de tres niveles representando los elementos principales de un mensaje SWIFT; el mensaje en si mismo, sus bloques, y los campos dentro de cada bloque. El modelo es genérico y desacomplado de estructuras de mensajes pariculares, por lo tanto tiene mínimos requerimientos para la construcción de mensajes. Clases específicas por MT se proveen como wrappers de objetos SwiftMessage.
SwiftMessage El objeto padre de la jerarquía es SwiftMessage, y posee atributos para contener hasta cinco objetos SwiftBlock y opcionalmente un numero arbitrario de SwiftBlockUser (ver debajo).
SwiftBlock Cada tipo de bloque de un mensaje es una subclase de SwiftBlock. Hay una pequeña jerarquía para los distintos tipos de bloque, agrupado por su estructura de campos. Por ejemplo, en los mensajes FIN el bloque 1 tiene un tamaño fijo, en cambio el bloque 4 posee una lista variable de campos. Una jerarquía de clases abstractas modela esta taxonomía de bloques y existen clases concretas para cada uno de los cinco posibles bloques de un mensaje.
SwiftValueBlock En la jerarquía de bloques SwiftValueBlock es el contenedor para bloques cuyo valor es un string de tamaño fijo. Las subclases de este particionan el valor en campos especificos. Para bloque 1 por ejemplo existen getters y setters for serviceId, applicationId, etc..
SwiftTagListBlock Un SwiftTagListBlock es un contenedor para bloques conformados como una lista ordenada de Tag. Un tag o campo, es básicamente una dupla de nombre (por ejemplo; "59", "13C", "23E") y valor. Se proveen métodos getters genéricos para obtener campos puntuales o grupos de campos con diversos criterios.
SwiftBlockUser SwiftBlockUser no es parte del estándard SWIFT, pero es una práctica bastante común adosar bloques de uso local como anotación sobre los mensajes. Mediante estos bloques se puede realizar de una forma compatible con el parser y el modelo. El contenido de este bloque es opaco para WIFE, pero es preservado tal cual como se lo encuentra para que este disponible desde las aplicaciones luego de procesar con WIFE sus mensajes.
El siguiente diagrama muestra la jerarquía de bloques mencionada:

UnparsedTextList El atributo UnparsedTextList attributed presente en un mensaje, bloque o campo, es un contenedor para porciones especiales de ciertos mensajes, principalmente mensajes de sistema y servicio, donde un mensaje aparece como adjunto de otro. Por ejemplo, el mensaje original confirmado en un mensaje de ACK , el retrieved message adjunto al bloque 4 en un MT 021 (Retrieval Response), el mensaje adosado al campo 270 en un MT 056 (LT History Report). El siguente diagrama muestra la jerarquía de clases completa, incluyendo los UnparsedTextList y algunos atributos relevantes:

Notar que para WIFE todos los campos son simplemene pares de nombre y valor colocados en un objeto Tag. Si necesita parsear y obtener los componentes internos dentro de un campo especifico puede utilizar las clases específicas para MTs y campos:
String fin = "{1:F01BANKDEFMAXXX2039063581..."; IConversionService srv = new ConversionService(); SwiftMessage m = srv.getMessageFromFIN(fin); Field32A f = new Field32A(m.getBlock4().getTagValue("32A")); Calendar date = f.getComponent1AsCalendar(); BigDecimal amount = new BigDecimal(f.getComponent3AsNumber().doubleValue());
O utilizandouna clase especifica del MT (si esta disponible):
String fin = "{1:F01BANKDEFMAXXX2039063581..."; IConversionService srv = new ConversionService(); MT202 mt202 = new MT202(srv.getMessageFromFIN(fin)); Field32A f = mt202.getField32A(); Calendar date = f.getComponent1AsCalendar(); BigDecimal amount = new BigDecimal(f.getComponent3AsNumber().doubleValue());
|