4

メッセージをフォーマットWIFEに解析するためにJavaライブラリを使用しています。SWIFTJSON

「Swift からの出力」であるメッセージの場合、確認応答の一部としてheader{1:..}繰り返しブロックが含まれています。{4..}メッセージの解析中に、出力/エラーがスローされません。これはどのように処理できますか?

MTまた、フィールド 50k のそれぞれのクラスにライブラリ関数を使用し、関数 sayまたはMT103を呼び出すと、このメッセージに対して正しい値が返され、ブロックが繰り返されますか?getcomponent1()getName&Address1()14

MT103以下に貼り付けたサンプル:

{1:F21XXXXXXBBAXXX9735415014}{4:{177:1410291057}{451:0}}{1:F01XXXXXXNBBAXXX9735415014}{2:O1031057141029XXXXXXNBBAXXX16235602381410291057U}{4:

:20:2039TT20W4407225

:23B:クレド

:32A:141029AUD844,00

:33B:AUD844,00

:50K:/XXXXXXXXXXXXXXXXXXXX

ABC法律事務所

19 ムーア ストリート

ターナー

:52A:XXXXINBBXXX

:53A:ナタアウ33

:57A:XXXXXXNBBXXX

:59:/200006547541

ABC テクノロジー ソリューションズ PVT LT

レベル 2 ブロック 1 トランスアジア コーポレート

パーク・カカナド

:70:受取銀行のみが承認されています

通貨を換算するには

:71A:私たちの

:72:/REC/DAG29102014117

//不完全な命令の目的 CO

//DE ​​CHARGES AUD 20 が差し引かれます

-}{5:{MAC:00000000}{CHK:8A860CBABFFD}}{S:{SAC:}{COP:S}}

4

2 に答える 2

3

表示されている動作は仕様によるものです。

WIFE ライブラリは、残りの入力が単一の有効な SWIFT メッセージの一部ではなくなったことを検出するまで、可能な限り多くの入力を解析しようとします。

あなたの場合、

{1:F21XXXXXXBBAXXX9735415014}{4:{177:1410291057}{451:0}}

有効な SWIFT メッセージの 1 つです。その後のすべては別の有効な SWIFT メッセージですが、ブロック 4 の後に SWIFT ブロック 5 がないことを (SWIFT 標準に従って) 検出するため、WIFE パーサーはそれを気にしません。未解析のテキスト。

input入力文字列全体であると仮定すると、次のようなコードが必要です。

IConversionService ics = new ConversionService();
SwiftMessage sm = ics.getMessageFromFIN(input);

その後、次の方法で確認できます

Integer unparsedSize = sm.getUnparsedTextsSize();

解析されていないメッセージが 1 つあり、それを使って好きなことを行うことができます。あなたの場合、次のように解析されていない部分を取得できます。

String unparsedInput = sm.getUnparsedTexts().getText(0);
SwiftMessage sm2 = ics.getMessageFromFIN(unparsedInput);

さて、あなたが求めsm2ている本当のSWIFTメッセージは、で始まるものです

{1:F01XXXXXNBBAXXX9735415014}{2:O103...

必要な処理を行い、 のメッセージとは別のメッセージとして扱いますsm

すべてを正しく解析する方法がわかったので、残りの質問について心配する必要はありません。

于 2015-05-22T10:32:12.947 に答える
0

同じことの別の例:

final String fin = "{1:F21FOOLHKH0AXXX0304009999}{4:{177:1608140809}{451:0}}{1:F01FOOLHKH0AXXX0304009999}{2:O9401609160814FOOLHKH0AXXX03040027341608141609N}{4:\n"+
            ":20:USD940NO1\n"+
            (...)
            "-}{5:{CHK:0FEC1E4AEC53}{TNG:}}{S:{COP:S}}";

        final SwiftParser parser = new SwiftParser();
        SwiftMessage sm = parser.parse(fin);
        if (StringUtils.equals(sm.getBlock1().getServiceId(), "21") && sm.getUnparsedTextsSize() > 0) {
            sm = sm.getUnparsedTexts().getTextAsMessage(0);
        }

        System.out.println("Message Type: "+ sm.getType());
        if (sm.isType(940)) {
            /*
             * Specialize the message to its specific model representation
             */
            MT940 mt = new MT940(sm);

            /*
             * Print details of a specific field
             */
            System.out.println("Reference: "+mt.getField20().getValue());
        }
于 2016-12-27T16:52:38.153 に答える