我正在从客户端向服务器发送以下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打包程序的定义如下:
我遇到以下错误:
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();
}
请帮助我如何解决此错误?
答案 0 :(得分:2)
您正尝试使用String来解压缩二进制图像,在该字符串中调用其getBytes()
方法。请注意,根据您的编码,它可能默认为UTF-8二进制数据,很容易损坏。请将byte[]
用于图像。另外,您显示的转储没有十六进制转储,并且可能不包含不可打印的字符。
看看http://jpos.org/blog/2014/09/message-hex-dump/以获得有关转储的更多信息。