java - 解包 JPOS ISO 8583 时解包字段 44 时出现问题

标签 java iso iso8583 jpos

我正在从客户端向服务器发送以下 ISO 消息。我正在尝试解开这条消息。

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

消息开头的 A4M08000 是一个 header ,我不会将其传递给打包程序。

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();
        }

请帮我解决这个错误?

最佳答案

您正在尝试使用 String 来解压二进制图像,并在其中调用其 getBytes() 方法。请注意,根据您的编码(可能默认为 UTF-8 二进制数据)很容易被损坏。使用 byte[] 代替图像。此外,您显示的转储不是十六进制转储,并且它可能不包含不可打印的字符。

看看http://jpos.org/blog/2014/09/message-hex-dump/有关转储的更多信息。

关于java - 解包 JPOS ISO 8583 时解包字段 44 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54177866/

相关文章:

java - 解析格式错误的 json 字符串

iso8583 - POS 输入模式之间的区别(字段 22)

java - 如何在 ISO8583 消息请求中设置子元素

java - 使用 RotationModifier 的 AndEngine 人像失真

java - 丰富的 :autocomplete ‘label’ and ‘value’ of suggestion list?

java - "Hello World"程序产生异常

android - 有没有一种简单的方法来检索 ISO 3166-1 数字国家代码

nsdate - 将 ISO 8601 时间戳转换为 NSDate : How does one deal with the UTC time offset?

iso8583 - 将消息从 ASCII 转换为 HEX ISO8583.net