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

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

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

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

示例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 律师事务所有限公司

摩尔街 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:00000000}{CHK:8A860CBABFFD}}{S:{SAC:}{COP:S}}

【问题讨论】:

    标签: java swift-mt


    【解决方案1】:

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

    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 中的消息不同的消息。

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

    【讨论】:

      【解决方案2】:

      另一个例子:

      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());
              }
      

      【讨论】:

        猜你喜欢
        • 2010-10-08
        • 2019-06-16
        • 2018-12-19
        • 2016-04-21
        • 2016-08-11
        • 1970-01-01
        • 2011-08-18
        • 2016-07-04
        • 1970-01-01
        相关资源
        最近更新 更多