使用 WIFE Java 库的 SWIFT MT 消息解析

Posted

技术标签:

【中文标题】使用 WIFE Java 库的 SWIFT MT 消息解析【英文标题】:SWIFT MT Message Parsing using WIFE Java library 【发布时间】:2015-04-28 17:02:15 【问题描述】:

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

对于“从 Swift 输出”的消息,它在 header 中包含重复的块,用于 1:..4.. 作为确认的一部分。解析消息时,没有抛出输出/错误。怎么处理?

另外,如果我将库函数用于各自的 MT 类,例如字段 50k 用于 MT103,并调用函数说 getcomponent1()getName&Address1(),它会返回此消息的正确值并重复 @ 987654331@ 和 4 块?

示例MT103粘贴在下面:

1:F21XXXXXXBBAXXX97354150144:177:1410291057451:01:F01XXXXXNBBAXXX97354150142:O1031057141029XXXXXNBBAXXX16235602381410291057U4:

:20:2039TT20W4407225

:23B:CRED

:32A:141029AUD844,00

:33B:AUD844,00

:50K:/XXXXXXXXXXXX XXXXXXXX

ABC 律师事务所有限公司

摩尔街 19 号

特纳

:52A:XXXXINBBXXX

:53A:NATAAU33

:57A:XXXXNBBXXX

:59:/200006547541

ABC 技术解决方案 PVT LT

2 级 1 区 TRANSASIA 公司

公园卡卡纳德

:70:只授权收款银行

兑换货币

:71A:我们的

:72:/REC/DAG29102014117

//不完整的指令目的CO

//DE ​​费用扣除 20 澳元

-5:MAC:00000000CHK:8A860CBABFFDS:SAC:COP:S

【问题讨论】:

【参考方案1】:

您看到的行为是设计使然。

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

在你的情况下,

1:F21XXXXXXBBAXXX97354150144:177:1410291057451: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:F01XXXXXNBBAXXX97354150142:O103...

用它做你想做的事,并将其视为与sm 中的消息不同的消息。

既然您知道如何正确解析所有内容,您就不必担心其他问题了。

【讨论】:

【参考方案2】:

另一个例子:

final String fin = "1:F21FOOLHKH0AXXX03040099994:177:1608140809451:01:F01FOOLHKH0AXXX03040099992:O9401609160814FOOLHKH0AXXX03040027341608141609N4:\n"+
            ":20:USD940NO1\n"+
            (...)
            "-5:CHK:0FEC1E4AEC53TNG: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());
        

【讨论】:

以上是关于使用 WIFE Java 库的 SWIFT MT 消息解析的主要内容,如果未能解决你的问题,请参考以下文章

SWIFT ACK 消息解析

SWIFT电文类型及格式

SWIFT报文升级系列专题 ※ MT700(上)

小米路由器proac2600是wifi6吗

linux下的boost库的安装方法是啥?

如何设置路由器wife的用户黑名单?(使别人不能连接你家wife)