JPOS ISO 8583拆箱中的问题拆箱字段44

时间:2019-01-14 08:22:39

标签: 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是我没有传递给打包程序的标头。

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 :(得分:2)

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

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