我正在从客户端向服务器发送以下 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 打包器定义如下:
我遇到以下错误:
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/