Ошибки при разборе некоторых полей ISO8583 - PullRequest
0 голосов
/ 05 августа 2020

Я оцениваю 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), я не понимаю, почему это не разбирается правильно

1 Ответ

0 голосов
/ 06 августа 2020

Для нечетной длины значения дополняются слева, а не справа. Таким образом, игнорируется первый полубайт, а не последний.

Извините, это не ясно в документации. Я исправлю это, чтобы уточнить это.

...