簡體   English   中英

SWIFT MT txt到MT XML轉換

[英]SWIFT MT txt to MT XML conversion

我需要將以下MT txt文件(MT 760的示例)轉換為MT XML格式。 我正在使用SWIFT SDK MT2XML類進行轉換。 以下是樣本輸入文件,並引用了2018年的相應架構,即fin.760.2018.xsd

SampleMT760.txt(包含偽數據)

{1:F01AAAAAAAAAAAI1111111111}
{2:O111111111111XXXXXXXXXXXX111111111111111111111N}
{3:{108:T1A11111111111A111}}
{4:
:27:1/1
:20:123456123456ABCD
:23:ISSUE
:30:180813
:40C:URDG
:77C:SOME MESSAGE
:72:/PHONBEN/
-}
{5:{CHK:}{TNG:}}{S:{SAC:}{COP:P}{MAN:A2A11}}

TranslationSvc.java:用於翻譯的代碼段

public static void translate(String inputData) throws Exception { 

        // parse the XML schema for the entire MT message (block 1 to 5)
        final DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        builderFactory.setNamespaceAware(true);
        final DocumentBuilder builder = builderFactory.newDocumentBuilder();
        final Document schema = builder.parse(new File(SCHEMA_FILE)); 

        // create a ISchemaDocResolver which loads the correct schema by filename
        ISchemaDocResolver resolver = new ISchemaDocResolver() {
            public SchemaDoc resolveSchemaDoc(final String pNamespaceURI) {
                // the namespace which is passed here it the namespace of the
                // block 4 content
                if (pNamespaceURI.endsWith("fin.760.2018")) {
                    DocumentBuilder builder = null;
                    try {
                        builder = builderFactory.newDocumentBuilder();
                    } catch (ParserConfigurationException e) {
                        e.printStackTrace();
                    }
                    Document schema = null;
                    try {
                        schema = builder.parse(new File(SCHEMA_FILE));
                    } catch (SAXException | IOException e) {
                        e.printStackTrace();
                    }
                    return new SchemaDoc(schema);
                }
                return null;
            }
        };

            final SchemaDoc schemaDoc = new SchemaDoc(schema, resolver);
            final MT2Xml mt2xml = new MT2Xml(schemaDoc);

        // convert an entire MT message (block 1 to 5) to its corresponding XML format
        final Document result = builder.newDocument();
        mt2xml.convert(inputData, result);
    }

當我嘗試執行TranslationSvc時,我收到以下ConversionError:

Exception in thread "main" com.swift.converter.ErrorReportException: <ErrorReport>
<ConversionErrors>
<Error>
<Code>
TC00100
</Code>
<Message>
Unexpected field 1
</Message>
<Location>
<LineNumber>
0
</LineNumber>
</Location>
</Error>
</ConversionErrors>
</ErrorReport>

    at com.swift.converter.ReportErrorHandler.checkEnd(ReportErrorHandler.java:205)
    at com.swift.converter.MT2Xml.convert(MT2Xml.java:164)
    at com.swift.converter.MT2Xml.convert(MT2Xml.java:189)
    at TranslationSvc.translation(TranslationSvc.java:95)
    at TranslationSvc.main(TranslationSvc.java:47)

有人可以建議輸入文件的格式正確嗎? 如果有人可以為我提供示例工作輸入文件,那將是一個很好的選擇。

您的示例消息不正確。 塊2中的消息類型是MT011,它是系統消息,而不是您期望的MT760。

入站MT760的第2塊應類似於:

{2:O 760 1155081106BBBBUS00DGST08298565620811060655N}

您可以在日期,時間和BIC代碼中放入虛擬數據,但必須保留消息類型。

入站消息中的應用程序標頭(塊2)的結構如下:

  • O =輸出
  • 訊息類型
  • 相對於發件人的輸入時間
  • 消息輸入參考(MIR),包括輸入日期和發件人的地址。
  • 關於接收方的輸出日期和時間
  • 郵件優先級

您可以在https://www.prowidesoftware.com/resources/SWIFT上找到更多信息。順便說一下,我是開放源碼庫Prowide Core的作者之一,該庫包括MT到XML的轉換。 它與SWIFT SDK使用的XML不同,而是Prowide的專有。 關鍵區別在於SWIFT SDK XML轉換至少在結構上要求輸入消息有效,而Prowide Core XML可以來回轉換任何有效或無效的MT。

PD:完整的MT760樣本

{1:F01NWBKGB2LD36A6294534377}{2:O7601155081106BBBBUS00DGST08298565620811060655N}{4: [CRLF]
:27:1/1 [CRLF]
:20:123456123456ABCD [CRLF]
:23:ISSUE [CRLF]
:30:180813 [CRLF]
:40C:URDG [CRLF]
:77C:SOME MESSAGE [CRLF]
SECOND LINE [CRLF]
-}

其中[CRLF]是回車和換行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM