Проблема с распаковкой поля 44 при распаковке JPOS ISO 8583 - PullRequest
0 голосов
/ 14 января 2019

Я отправляю следующее сообщение ISO с клиента на сервер. Я пытаюсь распаковать это сообщение.

A4M080000200F638669128B0A00800000000064000A016434184******00330
300000000000000000000000000000011407380151599213291101146011050
051000091D000000000692900132434184******0033=2707201********000
00001355008NRBGUL01NRBB                          DHAKA
                000050HEAD OFFICE                   9999
                                                 00120190114NRB
B      NRBB                         00000000000000001 050840NRB
BNRBB      1330110800680080810101001000000000000000000000000000
0007013157800000000001***
   004TC=5

A4M08000 в начале сообщения - это заголовок, который я не передаю упаковщику.

Упаковщик ISO определяется следующим образом:

https://pastebin.com/DaEZrzk8

Я сталкиваюсь со следующей ошибкой:

org.jpos.iso.ISOException: org.jpos.iso.IFA_LLCHAR: Problem unpacking field 44 (java.lang.NegativeArraySizeException) unpacking field=44, consumed=429
    at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:334)
    at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:467)
    at com.era.atm.UnpackISOMessage.parseISOMessage(UnpackISOMessage.java:36)
    at com.era.socket.Processor.doProcessing(Processor.java:79)
    at com.era.socket.Processor.run(Processor.java:43)
    at java.lang.Thread.run(Thread.java:745)
    at com.era.socket.Server.run(Server.java:64)
    at java.lang.Thread.run(Thread.java:745)

Код выглядит следующим образом:

try {    

            InputStream is = UnpackISOMessage.class.getResourceAsStream("fields.xml") ;
            GenericPackager packager = new GenericPackager(is);

            ISOMsg isoMsg = new ISOMsg();
            isoMsg.setPackager(packager);
            isoMsg.unpack(message.getBytes());
            return isoMsg;
        } catch (ISOException ex) {
            Logger.getLogger(UnpackISOMessage.class.getName()).log(Level.SEVERE, null, ex);
            ex.printStackTrace();
        }

Пожалуйста, помогите мне, как я могу решить эту ошибку?

1 Ответ

0 голосов
/ 14 января 2019

Вы пытаетесь распаковать двоичное изображение, используя строку, где вы вызываете метод getBytes(). Помните, что в зависимости от вашей кодировки, которая, вероятно, по умолчанию использует UTF-8, двоичные данные могут быть легко повреждены. Вместо этого используйте byte[] с изображением. Кроме того, показанный вами дамп не содержит hexdump и, вероятно, не содержит непечатаемых символов.

Посмотрите на http://jpos.org/blog/2014/09/message-hex-dump/ для получения дополнительной информации о свалках.

...