2015-02-26 5 views
1

Я использую библиотеку Java WIFE для анализа SWIFT сообщений в формате JSON.Анализ сообщений SWIFT MT с использованием библиотеки Java WIFE

Для сообщений, которые являются «Output from Swift», он содержит повторяющиеся блоки в header для {1:..} и {4..} как часть подтверждения. При разборе сообщения нет выхода/ошибки. Как это можно решить?

Кроме того, если я использую функцию библиотеки для соответствующего MT класса для поля скажем 50к для MT103 и вызова функции говорят getcomponent1() или getName&Address1(), он будет возвращать правильное значение для этого сообщения с повторяющимися 1 и 4 блоков?

Образец MT103 вставлен ниже:

{1: F21XXXXXXBBAXXX9735415014} {4: {177: 1410291057} {451: 0}} {1: F01XXXXXNBBAXXX9735415014} {2: O1031057141029XXXXXNBBAXXX16235602381410291057U} {4:

: 20: 2039TT20W4407225

: 23B: КРЭД

: 32A: 141029AUD844,00

: 33B: AUD844,00

: 50К:/ХХХХХХХХХХХХ XXXXXXXX

АВС ЮРИДИЧЕСКАЯ ФИРМА Pty Ltd

19 МУР УЛИЦА

ТЕРНЕР

: 52A: XXXXINBBXXX

: 53A: NATAAU33

: 57A: XXXXXNBBXXX

: 59:/200006547541

АВС ТЕХНОЛОГИЯ РЕШЕНИЯ ПВТ LT

УРОВЕНЬ 2 БЛОК 1 Transasia КОРПОРАТИВНОЕ

ПАК KAKKANAD

: 70: ТОЛЬКО БЕНЕФИЦИАР БАНК УПОЛНОМОЧЕННЫЙ

К КОНВЕРТИРОВАНИЮ ВАЛЮТЫ

: 71A: OUR

: 72:/ЗАПИСИ/DAG29102014117

// НЕПОЛНОЙ ИНСТРУКЦИЯ ПО НАЗНАЧЕНИЕ СО

// DE CHARGES 20 AUD вычитается

-} {5: {MAC: 00000000} {CHK: 8A860CBABFFD}} {S: {SAC:} {COP: S}}

ответ

3

Поведение, которое вы видите, по дизайну.

Библиотека WIFE попытается проанализировать как можно больше вашего ввода, пока не обнаружит, что остальная часть ввода больше не является частью одного действительного сообщения SWIFT.

В вашем случае,

{1: F21XXXXXXBBAXXX9735415014} {4: {177: 1410291057} {451: 0}}

одно действительное сообщение СВИФТ.Все после этого другое действительное сообщение SWIFT, но парсер WIFE не будет беспокоиться об этом, потому что он обнаруживает, что нет блока SWIFT 5 после блока 4 (согласно стандарту SWIFT), поэтому он просто обрабатывает остальную часть сообщение как unparsed текст.

Предполагая, что input вся ваша строка ввода, вы должны иметь код, подобный этому:

IConversionService ics = new ConversionService(); 
SwiftMessage sm = ics.getMessageFromFIN(input); 

После этого, вы можете проверить с

Integer unparsedSize = sm.getUnparsedTextsSize(); 

, что у вас есть один неанализируемый сообщение, и вы можете сделать что бы вы ни хотели с этим. В вашем случае, вы можете извлечь в неанализируемую части так:

String unparsedInput = sm.getUnparsedTexts().getText(0); 
SwiftMessage sm2 = ics.getMessageFromFIN(unparsedInput); 

Теперь sm2 является реальной свифтовки вы после этого, тот, который начинается с

{1: F01XXXXXNBBAXXX9735415014 } {2: O103 ...

Выполняйте то, что вы хотите, и относитесь к нему как к отдельному сообщению от sm.

Теперь, когда вы знаете, как правильно разобрать все, вам не нужно беспокоиться о других вопросах.

0

Другой пример того же:

final String fin = "{1:F21FOOLHKH0AXXX0304009999}{4:{177:1608140809}{451:0}}{1:F01FOOLHKH0AXXX0304009999}{2:O9401609160814FOOLHKH0AXXX03040027341608141609N}{4:\n"+ 
      ":20:USD940NO1\n"+ 
      (...) 
      "-}{5:{CHK:0FEC1E4AEC53}{TNG:}}{S:{COP:S}}"; 

     final SwiftParser parser = new SwiftParser(); 
     SwiftMessage sm = parser.parse(fin); 
     if (StringUtils.equals(sm.getBlock1().getServiceId(), "21") && sm.getUnparsedTextsSize() > 0) { 
      sm = sm.getUnparsedTexts().getTextAsMessage(0); 
     } 

     System.out.println("Message Type: "+ sm.getType()); 
     if (sm.isType(940)) { 
      /* 
      * Specialize the message to its specific model representation 
      */ 
      MT940 mt = new MT940(sm); 

      /* 
      * Print details of a specific field 
      */ 
      System.out.println("Reference: "+mt.getField20().getValue()); 
     } 
Смежные вопросы