Как создать собственный канал для BASE24Channel JPOS — ISO8583

позвольте мне задать свои вопросы об iso8583 с Java, поэтому у меня возникли проблемы при создании сообщения ISO8583 с новой системой с JPOS Java (система, которую я разрабатываю), поэтому я пытаюсь сопоставить сгенерированное сообщение iso8583 старой системой, и когда я попытался сравнить сообщение iso8583, сгенерированное новой системой, с помощью сетевого анализатора (wireshark), оно не соответствует сообщению.

Шестнадцатеричный дамп старой системы

00000000  65                                                 e
00000001  49 53 4f 30 30 36 30 30  30 30 36 30 30 38 30 30   ISO00600 00600800
00000011  38 32 32 30 30 30 30 30  30 30 30 30 30 30 30 30   82200000 00000000
00000021  30 34 30 30 30 30 30 30  30 30 30 30 30 30 30 30   04000000 00000000
00000031  30 34 31 38 30 37 34 32  31 37 30 30 30 30 30 31   04180742 17000001
00000041  30 30 31 03                                        001.

Новый системный шестнадцатеричный дамп

00000000  49 53 4f 30 30 36 30 30  30 30 31 30 30 38 30 30   ISO00600 00100800
00000010  38 32 32 30 30 30 30 30  30 30 30 30 30 30 30 30   82200000 00000000
00000020  30 34 30 30 30 30 30 30  30 30 30 30 30 30 30 30   04000000 00000000
00000030  30 34 31 38 31 30 30 31  33 39 31 37 30 31 33 39   04181001 39170139
00000040  31 36 31 03                                        161.

Как мы видим, я пытаюсь отправить сообщение 0800 на тот же сервер ISO, но у меня другой результат байтового сообщения, также я пытался использовать другой канал, кажется, что BASE24Channel из библиотеки JPOS имеет самое близкое совпадение, но он все еще отсутствует первый байт (перед частью заголовка ISO), кто-нибудь может мне помочь? Я полагаю, мне нужно разработать собственный класс каналов? поправьте меня, если я ошибаюсь, и спасибо за помощь: D

Тот e вроде и есть длина, в новом дампе длины нет, можете показать код который пишет тот дамп?

Andrés Alcarraz 18.04.2023 17:58

Привет @AndrésAlcarraz, вот в чем вопрос, как мне сгенерировать e (первое байтовое сообщение) в моем новом системном коде, в моей новой системе я использую BASE24Channel по умолчанию по ссылке JPOS Lib для создания дампа (без e )

mc ser 19.04.2023 04:27

И мой вопрос к вам был таков: как узнать, какое значение должен иметь этот префикс, всегда будет e? Зависит от других факторов и т. д., Также я упомянул, что второй дамп не показывает длину, и что e кажется длиной или ее частью, пожалуйста, предоставьте больше информации, чтобы мы могли вам помочь.

Andrés Alcarraz 19.04.2023 14:28

Допустим, мы предполагаем, что префикс всегда был фиксированным значением, которое равно e или, может быть, длине сообщения, как я могу сделать свой второй дамп для создания e перед заголовком?

mc ser 20.04.2023 03:12

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

Andrés Alcarraz 20.04.2023 04:28

хм, e будет работать, если я добавлю его в заголовок, но что, если это длина сообщения? также что вы имеете в виду полностью показать дамп? это полный дамп новой системы, он не показывает длину, потому что это BASE24Channel из Jpos, у него нет префикса длины

mc ser 20.04.2023 04:37

В том то и дело, я не думаю, что вы должны в заголовке канала, я думаю, что это часть заголовка, но вы не показываете префикс с длиной для нового дампа системы, так что ваше сравнение между системами кажется неправильным , тха e кажется длиной, потому что длина старого дампа системы составляет 67. Если это длина, кажется, вам не хватает байта в этом дампе, потому что я сомневаюсь, что максимальная длина может быть 255.

Andrés Alcarraz 20.04.2023 04:48

Пожалуйста, покажите полный журнал и полные дампы, включая часть длины во втором дампе.

Andrés Alcarraz 20.04.2023 04:49

это уже полный дамп, но позвольте мне дать вам файл pcap ссылка на файл

mc ser 20.04.2023 04:57

Ой извините, канал Base24 не отправляет длину

Andrés Alcarraz 20.04.2023 04:59

да, я использовал BASE24Channel от JPOS исходный код библиотеки

mc ser 20.04.2023 05:01

Вам нужно будет переопределить длину сообщения отправки и длину сообщения получения, если это e действительно длина сообщения, если нет, оно идет в заголовке, но если вы не знаете, где оно находится, я не могу сказать вам, как лучше всего чтобы создать его и потреблять его

Andrés Alcarraz 20.04.2023 05:05

Кажется, что e - это длина в BCD, но она отличается на два байта (короткие 2 байта), и, вероятно, есть предыдущий байт, равный 0, который также является частью сообщения.

Andrés Alcarraz 20.04.2023 05:08

Да, в этом проблема, у меня нет опыта работы с байтами, есть ли какое-нибудь руководство о том, как манипулировать сообщением?

mc ser 20.04.2023 05:09

Я мог бы добавить ответ завтра с этим.

Andrés Alcarraz 20.04.2023 05:09

Хорошо, спасибо за помощь @AndrésAlcarraz, я буду ждать вашего руководства

mc ser 20.04.2023 05:13

Я только что опубликовал то, что должно помочь :) непроверенный, но чтобы вы начали.

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

Ответы 1

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

У меня нет времени проверять это, но чтобы вы поняли, вам нужно расширить BCDChannel, чтобы прочитать и отправить длину сообщения в BCD. И добавьте код для генерации и использования дополнительного байта (0x03), например:

public class MyCustomChannel extends BCDChannel {
    protected void sendMessageTrailler(ISOMsg m, int len) throws IOException {
        serverOut.write(0x03); //write the extra trailer byte (0x03)
    }
    protected void getMessageTrailer() throws IOException {
        serverIn.read(); //read the extra trailer byte (0x03).
    }
}

Затем настройте XML-код канала для использования собственного класса.

Возможно, вам придется переопределить sendMessageLength и getMessageLength, если вам нужно добавить или вычесть 2.

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