Как исправить ошибку сокета Java ISO8583: ОШИБКА ПЕРЕДАЧИ

Я работаю над проектом, и эта ошибка вызывает у меня головную боль. Я использую библиотеку Java J8583 для создания сообщения ISO8583 и отправки на удаленный сервер. Ответ сервера представляет собой шестнадцатеричное значение: 5452414E53414354494F4E204552524F52, которое при преобразовании в ASCII: ОШИБКА ПЕРЕДАЧИ.

// function to construct Message
public IsoMessage createLoadRequest(String tag) {
IsoMessage nManagementMsg = messageFactory.newMessage(0x0800);
Date date = new Date();

String terminalID = new Utils().retrieveTerminalID(); 


nManagementMsg.setField(3, new IsoValue<Object>(IsoType.ALPHA, tag, 6));
nManagementMsg.setField(7, new IsoValue<Object>(IsoType.NUMERIC, utcTime.format(date), 10));
lastTransactionAuditCode = Utils.randomAlphaNumeric(6);
nManagementMsg.setField(11, new IsoValue<Object>(IsoType.NUMERIC, lastTransactionAuditCode, 6)); // System Trace Audit Number
nManagementMsg.setField(12, new IsoValue<>(IsoType.NUMERIC, localTime.format(date), 6));
nManagementMsg.setField(13, new IsoValue<>(IsoType.DATE_EXP, localDate.format(date), 4));
nManagementMsg.setField(41, new IsoValue<Object>(IsoType.ALPHA, terminalID, 8));

return nManagementMsg;
}

//function to make send Message to server
public boolean retrieveData() throws UnsupportedEncodingException {

IsoMessage networkManagementMsg = this.createLoadRequest("567YUY");

String strToSend = new String(networkManagementMsg.writeData());

if (!start()) {
    return false;
}

try {

        logger.info(strToSend);

    outputStream.writeUTF(strToSend);
    IsoMessage response = readMessage();
    final String result = response.getAt(39).toString();

    if (!result.equals("00")) {
        logger.log(Level.WARNING, "Network Management Response contains a non-zero result code {0}", result);
        return false;
    }

    // parse and get required data
    String value = response.getAt(62).toString();
    System.out.println(value);


    return true;
 } catch (Exception ex) {
    logger.severe("Exception while loading terminal info");
    ex.printStackTrace();
    return false;
} finally {
    stop();
}
}

Я ожидал, что ISOMessage вернется с ошибкой:

INFO: 08002238000000800000567YUY0515135835Q56U46135835051520390013

INFO: Received response: 5452414E53414354494F4E204552524F52

INFO: IsoMessage: null

java.io.IOException: Failed to parse iso message string: 

5452414E53414354494F4E204552524F52

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
195
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Трудно сказать без более широкого контекста вашего проекта и значений каждого поля, которое вы хотите упаковать, но ваш запрос выглядит странно. STAN (поле 11) должен был быть числовым, но содержит альфа. Кроме того, вы должны проверить кодировку идентификатора терминала (поле 41), так как он может быть 8 байтов, как вы его построили, но в некоторых системах я видел 16 байтов с использованием шестнадцатеричной кодировки.

Спасибо за ответ. Мне удалось исправить проблему, узнав больше о пакетах сообщений ISO8583. Указанные Вами ошибки были исправлены.

steinacoz 28.08.2019 12:50

Другие вопросы по теме