SWIFT MT TXT для преобразования XML в MT - PullRequest
0 голосов
/ 21 сентября 2018

Мне нужно преобразовать указанный ниже текстовый файл MT (образец 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)

Может кто-нибудь подсказать, если входной файл имеет правильный формат?Если было бы здорово, если бы кто-нибудь смог предоставить мне пример рабочего входного файла.

1 Ответ

0 голосов
/ 22 сентября 2018

Ваш пример сообщения неверен.Тип сообщения в блоке 2 относится к MT011, который является системным сообщением, а не ожидаемым MT760.

Блок 2 для входящего MT760 должен выглядеть следующим образом:

{2: O 760 1155081106BBBBUS00DGST08298565620811060655N}

Вы можете поместить фиктивные данные в дату, время и код BIC, но вы должны сохранить тип сообщения.

Структура заголовка приложения (блок2) во входящем сообщении выглядит следующим образом:

  • O = Выход
  • Тип сообщения
  • Время ввода по отношению к отправителю
  • Ссылка на ввод сообщения (MIR), включая дату ввода, с адресом отправителя.
  • Дата и время вывода по отношению к получателю
  • Приоритет сообщения

Вы можете найтибольше информации на https://www.prowidesoftware.com/resources/SWIFT И, кстати, я один из авторов библиотеки с открытым исходным кодом Prowide Core, которая включает в себя конвертацию MT в XML.Это не тот же XML, что используется SWIFT SDK, но проприетарный от Prowide.Основное отличие состоит в том, что для преобразования XML SWIFT SDK требуется, чтобы входное сообщение было действительным, по крайней мере, с точки зрения структуры, в то время как Prowide Core XML может преобразовывать туда и обратно любой MT, действительный или недействительный.

PD: FullMT760 sample

{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] - возврат каретки и перевод строки

...