我正在使用WIFEJava 库将消息解析SWIFT为JSON格式。
对于“Output from Swift”的消息,它在headerfor{1:..}和中包含重复的块{4..}中包含重复的块,作为确认的一部分。解析消息时,没有抛出任何输出/错误。这该如何处理呢?
另外,如果我使用相应类的库函数(MT比如字段 50k for )MT103并调用函数(比如getcomponent1()or ),它会为带有重复和块的getName&Address1()消息返回正确的值吗?14
示例MT103粘贴如下:
{1:F21XXXXXXBBAXXX9735415014}{4:{177:1410291057}{451:0}}{1:F01XXXXXXNBBAXXX9735415014}{2:O1031057141029XXXXXNBBAXXX16235602381410291057U}{4:
:20:2039TT20W4407225
:23B:信用
:32A:141029AUD844,00
:33B:AUD844,00
:50K:/XXXXXXXXXXXX XXXXXXX
ABC 律师事务所有限公司
摩尔街19号
车工
:52A:XXXXINBBXXX
:53A:NATAAU33
:57A:XXXXXNBBXXX
:59:/200006547541
ABC 技术解决方案 PVT LT
泛西亚公司 1 区 2 楼
帕克卡卡纳德
:70:只有收款银行获得授权
兑换货币
:71A:我们的
:72:/REC/DAG29102014117
//指令目的CO不完整
//扣除20澳元费用
-}{5:{MAC:00000000}{CHK:8A860CBABFFD}}{S:{SAC:}{COP:S}}
您所看到的行为是设计使然的。
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);
Run Code Online (Sandbox Code Playgroud)
之后,您可以检查
Integer unparsedSize = sm.getUnparsedTextsSize();
Run Code Online (Sandbox Code Playgroud)
你有一条未解析的消息,你可以用它做任何你想做的事。在您的情况下,您可以像这样检索未解析的部分:
String unparsedInput = sm.getUnparsedTexts().getText(0);
SwiftMessage sm2 = ics.getMessageFromFIN(unparsedInput);
Run Code Online (Sandbox Code Playgroud)
现在,您正在寻找的真正的sm2SWIFT 消息是以
{1:F01XXXXXNBBAXXX9735415014}{2:O103...
用它做你想做的事,并将其视为与 中的消息不同的单独消息sm。
现在您知道如何正确解析所有内容,您不必担心其余的问题。