我正在使用 WIFE
Java 库将 SWIFT
消息解析为 JSON
格式。
对于“从 Swift 输出”的消息,它在 header
中包含 {1:..}
和 {4..} 的重复 block
作为确认的一部分。解析消息时,不会抛出任何输出/错误。如何处理?
此外,如果我为 MT103
的 say 字段 50k 使用相应 MT
类的库函数并调用函数 say getcomponent1()
或 getName&Address1()
,它会通过重复的 1
和 4
block 返回此消息的正确值吗?
示例 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 TECHNOLOGY SOLUTIONS PVT LT
LEVEL 2 BLOCK 1 TRANSASIA CORPORATE
PARK KAKKANAD
:70:ONLY BENEFICIARY BANK IS AUTHORIZED
TO CONVERT THE CURRENCY
:71A:OUR
:72:/REC/DAG29102014117
//INCOMPLETE INSTRUCTION PURPOSE CO
//DE CHARGES AUD 20 DEDUCTED
-}{5:{MAC:00000000}{CHK:8A860CBABFFD}}{S:{SAC:}{COP:S}}
最佳答案
您看到的行为是设计使然。
WIFE 库将尝试尽可能多地解析您的输入,直到它检测到输入的其余部分不再是单个有效 SWIFT 消息的一部分。
在你的情况下,
{1:F21XXXXXXBBAXXX9735415014}{4:{177:1410291057}{451:0}}
是一个有效的 SWIFT 消息。之后的所有内容都是另一个有效的 SWIFT 消息,但 WIFE 解析器不会理会它,因为它检测到 block 4 之后没有 SWIFT block 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
中的消息分开的消息。
既然您知道如何正确解析所有内容,您就不必担心其余的问题。
关于java - 使用 WIFE Java 库的 SWIFT MT 消息解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28740417/