使用 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 消息解析的主要内容,如果未能解决你的问题,请参考以下文章