使用Prowide解析含多个以$分隔的SWIFT MT940/MT950报文时输出不完整的问题求助
使用Prowide解析含多个以$分隔的SWIFT MT940/MT950报文时输出不完整的问题求助
大家好,我最近在处理旧的SWIFT报文,重点是解析MT940和MT950类型的报文。目前遇到一个棘手的问题:我的单个报文文件里可能包含多个不同类型的SWIFT报文,它们之间用$符号分隔,但用Prowide-core库解析时,输出的结果不完整,只获取到了第一个报文的部分内容;而用swift-parser-py工具解析同一个文件,却能正确得到完整的MT950报文数据。
下面是我的相关测试内容,麻烦各位帮忙分析一下问题所在:
测试用的sample.txt文件内容
{1:F21CITIUS33AGFX7239256290}{4:{177:2507150853}{451:0}}{1:F01CITIUS33AGFX7239256290}{2:O9500153250715SBOSUS3UFIMS13447057842507150853N}{4: :20:2507150000118899 :25:PFZM :28C:138/1 :60F:C250714USD53944,66 :61:2507130714CD2725,28NSALSCTRSC000004FWHL//25GFKBBPF0P /ISIN/US0001200901/SHS/12148, :62F:C250714USD56669,94 :64:C250714USD56669,94 -}{5:{CHK:F0FC1309E8AB}}{S:{COP:P}{MDG:B7D497E702BC8EE8EDBFBCBDACF30DB07A7352E76BE40274B87FC17253462868}}%
我编写的SwiftDemo.java代码
import com.prowidesoftware.swift.io.parser.SwiftParser; import com.prowidesoftware.swift.model.SwiftMessage; public class SwiftDemo { public static void main(String[] args) throws Exception { String path = "sample.txt"; String fin = java.nio.file.Files.readString(java.nio.file.Paths.get(path), java.nio.charset.StandardCharsets.UTF_8); SwiftParser parser = new SwiftParser(fin); SwiftMessage sm = parser.message(); System.out.println(sm.toJson()); } }
Prowide-core的解析结果
{ "timestamp": "2025-08-30T19:49:12Z", "version": 2, "data": { "block1": { "applicationId": "F", "serviceId": "21", "logicalTerminal": "CITIUS33AGFX", "sessionNumber": "7239", "sequenceNumber": "256290" }, "block4": { "tags": [ { "name": "177", "value": "2507150853" }, { "name": "451", "value": "0" } ] } } }
swift-parser-py的解析结果
{ "block1": { "block_id": 1, "content": "F01CITIUS33AGFX7239256290", "application_id": "F", "service_id": "01", "receiving_lt_id": "CITIUS33AGFX", "session_number": "7239", "sequence_number": "256290" }, "block4": { "name": "4", "content": [ "\n:20:2507150000118899\n:25:PFZM\n:28C:138/1\n:60F:C250714USD53944,66\n:61:2507130714CD2725,28NSALSCTRSC000004FWHL//25GFKBBPF0P\n/ISIN/US0001200901/SHS/12148,\n:62F:C250714USD56669,94\n:64:C250714USD56669,94\n-" ], "fields": [ { "type": "20", "option": "", "fieldValue": "2507150000118899", "content": ":20:2507150000118899", "ast": { "Reference Number": "2507150000118899" } }, { "type": "25", "option": "", "fieldValue": "PFZM", "content": ":25:PFZM", "ast": { "Account": "PFZM" } }, { "type": "28", "option": "C", "fieldValue": "138/1", "content": ":28C:138/1", "ast": { "Statement Number": "138", "Sequence Number": "1" } }, { "type": "60", "option": "F", "fieldValue": "C250714USD53944,66", "content": ":60F:C250714USD53944,66", "ast": { "D/C Mark": "C", "Date": "250714", "Currency": "USD", "Amount": "53944,66" } }, { "type": "61", "option": "", "fieldValue": ":2507130714CD2725,28NSALSCTRSC000004FWHL//25GFKBBPF0P\n/ISIN/US0001200901/SHS/12148,", "content": ":61::2507130714CD2725,28NSALSCTRSC000004FWHL//25GFKBBPF0P\n/ISIN/US0001200901/SHS/12148,", "ast": { "value": "2507130714CD2725,28NSALSCTRSC000004FWHL//25GFKBBPF0P\n/ISIN/US0001200901/SHS/12148," } }, { "type": "62", "option": "F", "fieldValue": "C250714USD56669,94", "content": ":62F:C250714USD56669,94", "ast": { "D/C Mark": "C", "Date": "250714", "Currency": "USD", "Amount": "56669,94" } }, { "type": "64", "option": "", "fieldValue": "C250714USD56669,94", "content": ":64:C250714USD56669,94", "ast": { "D/C Mark": "C", "Date": "250714", "Currency": "USD", "Amount": "56669,94" } } ] }, "block2": { "content": "O9500153250715SBOSUS3UFIMS13447057842507150853N" } }
可以看到,Prowide只解析到了第一个以{1:F21...}开头的报文片段,而后面的MT950报文完全没有被解析出来;但python工具却正确识别到了完整的MT950内容。我是不是在使用Prowide的时候遗漏了什么步骤?比如没有处理多报文分隔符$的逻辑?还是Prowide需要特定的配置才能支持多报文文件的解析?
麻烦各位大佬指点一下,谢谢!
内容来源于stack exchange
相关产品推荐
相关产品推荐

