iso8583 java_java – 发送ISO8583请求时发生NullPointerException

我正在尝试使用以下代码向终端发送ISO8583请求:

try {

XMLParser packager = new XMLParser(this.xmlFile);

final ISOMsg isoMsg = new ISOMsg();

isoMsg.setPackager(packager);

isoMsg.setMTI("0800");

isoMsg.set(3, "xxxxxx");

isoMsg.set(7, "xxxxxxxxxx"); //MMDDhhmmss

isoMsg.set(11, "xxxxxx");

isoMsg.set(12, "084500"); //Time of the message HHmmss

isoMsg.set(13, "0621"); //Date MMDD

isoMsg.set(41, "xxxxxxxx");

isoMsg.set(62,"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

isoMsg.set(63,"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

BaseChannel channel = new BaseChannel() {};

channel.setLogger(logger, "server-request-channel");

channel.setHeader(isoMsg.pack());

channel.setHost("xx.xx.xx.xx", xxxxx);

ISOMUX isoMux = new ISOMUX(channel) {

@Override

protected String getKey(ISOMsg m) throws ISOException {

return super.getKey(m);

}

};

isoMux.setLogger(logger, "server-request-mux");

new Thread(isoMux).start();

ISORequest req = new ISORequest(isoMsg);

isoMux.queue(req);

req.setLogger(logger, "server-request-logger");

ISOMsg response = req.getResponse(50 * 1000);

if (response != null) {

System.out.println("Req ["+ new String(isoMsg.pack()) + "]");

System.out.println("Res ["+ new String(response.pack()) + "]");

}else{

System.out.println("Timeout");

}

}catch (Exception e) {

e.printStackTrace();

}

}

执行代码后,我得到以下异常:

java.lang.NullPointerException

at org.jpos.iso.BaseChannel.createISOMsg(BaseChannel.java:561)

at org.jpos.iso.BaseChannel.createMsg(BaseChannel.java:558)

at org.jpos.iso.BaseChannel.receive(BaseChannel.java:585)

at org.jpos.iso.ISOMUX$Receiver.run(ISOMUX.java:263)

at java.lang.Thread.run(Thread.java:856)

我添加了断点,以找出导致异常的行,并发现每当遇到语句时都会发生异常:

ISORequest req = new ISORequest(isoMsg);

我是ISO8583 jpos金融编程的新手,我想在android平台上构建一个应用程序.

我如何克服这个例外?

最佳答案 您无法创建BaseChannel的实例 – 它是一个抽象类(

see it on GitHub).

如果您只想将XML格式的ISO-8583消息发送到端点并等待响应,您可以执行以下操作:

XMLPackager packager = new XMLPackager();

XMLChannel channel = new XMLChannel("localhost", 11000, packager);

channel.setPackager(packager);

channel.setTimeout(30000);

channel.connect();

Date now = new Date();

ISOMsg m = new ISOMsg();

m.setMTI("2100");

m.set("3", "000000");

m.set(new ISOAmount(4, 840, new BigDecimal(10.00)));

m.set("7", ISODate.formatDate(now, "MMddHHmmss"));

m.set("11", "1111");

m.set("12", ISODate.formatDate(now, "yyyyMMddHHmmss"));

m.set("22", "KEY.UNK.ECO.APP");

m.set("26", "5999");

m.set("27", "00100000000000001000000000000000");

m.set("32", "00000000001");

m.set("41", "59991515");

m.set("42", "888000003518");

m.set("43.2", "Shegda Electronics");

m.set("43.4", "Richardson");

m.set("43.5", "TX");

m.set("43.6", "63105");

m.set("43.7", "USA");

m.set("49.1", "1");

m.set("49.3", "121 First Street");

m.set("49.4", "85284");

m.set("104.4", "1");

channel.send(m);

ISOMsg resp = channel.receive();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值