SWIFT MT消息使用WIFE Java库进行解析

时间:2015-02-26 10:49:43

标签: java swift-mt

我正在使用WIFE Java库将SWIFT条消息解析为JSON格式。

对于"来自Swift"的输出,它包含header{1:..}{4..}的重复块作为确认的一部分。解析消息时,不会抛出输出/错误。怎么办呢?

另外,如果我使用相应MT类的库函数作为MT103的字段50k并调用函数说getcomponent1()getName&Address1(),它是否会返回重复14阻止此消息的正确值?

下面粘贴的示例MT103

  

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

     

:20:2039TT20W4407225

     

:23B:CRED

     

:32A:141029AUD844,00

     

:33B:AUD844,00

     

:50K:/ XXXXXXXXXXXX XXXXXXXX

     

ABC LAW FIRM PTY LTD

     

19 MOORE STREET

     

TURNER

     

:52A:XXXXINBBXXX

     

:53A:NATAAU33

     

:57A:XXXXXNBBXXX

     

:59:/ 200006547541

     

ABC技术解决方案PVT LT

     

LEVEL 2 BLOCK 1 TRANSASIA CORPORATE

     

PARK KAKKANAD

     

:70:只有受益银行授权

     

转换货币

     

:71A:OUR

     

:72:/ REC / DAG29102014117

     

//不完整的指示目的CO

     

// DE收费20澳元DEDUCTED

     

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

2 个答案:

答案 0 :(得分:3)

您所看到的行为是设计性的。

WIFE库将尝试尽可能多地解析您的输入,直到它检测到其余输入不再是单个有效SWIFT消息的一部分。

在你的情况下,

  

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

是一个有效的SWIFT消息。之后的所有内容都是另一个有效的SWIFT消息,但是WIFE解析器不会打扰它,因为它检测到块4之后没有SWIFT块5(根据SWIFT标准),所以它只是将邮件的其余部分视为未解析的文本。

假设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是您正在使用的真实的 SWIFT消息,以

开头的消息
  

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

使用它执行您想要的操作,并将其视为与sm中的消息分开的单独消息。

既然您知道如何正确解析所有内容,那么您不必担心其余的问题。

答案 1 :(得分: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());
        }