0

j8583メッセージを解析するためのライブラリとして評価していISO8583ます。ほとんどすべてのフィールドで期待どおりに機能しますが、フィールド 33 の正しい値を取得するのに問題があります。

次の単体テストを作成しました。

@Test
public void testDecode() throws IOException, ParseException {
    MessageFactory<IsoMessage> messageFactory = ConfigParser.createFromClasspathConfig("j8583.xml");
    messageFactory.setUseBinaryMessages(true);

    String testData = "0100000000018000000006560103095900000360";
    IsoMessage isoMessage = messageFactory.parseMessage(HexCodec.hexDecode(testData), 0);

    assertEquals("560103", isoMessage.getField(32).toString());
    assertEquals("590000036", isoMessage.getField(33).toString());

}

そして、ここに私の設定があります

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE j8583-config PUBLIC "-//J8583//DTD CONFIG 1.0//EN" "http://j8583.sourceforge.net/j8583.dtd">

<j8583-config>

    <parse type="0100">
        <field num="32" type="LLBCDBIN" length="11"/>
        <field num="33" type="LLBCDBIN" length="11"/>
    </parse>

</j8583-config>

単体テストを実行すると、フィールド 32 は正しく解析されますが、33 は失敗します。フィールド 33 の値は 900000360 です

どちらも同じように構成されており、データも同じように見えるため ( 06 560103 09 5900000360)、これが正しく解析されない理由がわかりません

4

1 に答える 1

0

長さが奇数の場合、値は右ではなく左に埋め込まれます。したがって、最後のニブルではなく、最初のニブルが無視されます。

申し訳ありませんが、ドキュメントでは明確ではありません。これを明記するように修正します。

于 2020-08-06T00:58:38.320 に答える