5

I am trying to send an ISO8583 request to a terminal using the following code:

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

After executing the code, I get the following exception:

<log realm="server-request-mux" at="Fri Aug 14 00:26:43 WAT 2015.995">
    <muxreceiver>
        <exception name="null">
            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)
        </exception>
    </muxreceiver>
</log>

I added break point so as to find out the line causing the exception and discovered that the exception occurs whenever it encounters the statement:

ISORequest req = new ISORequest(isoMsg);

I am relatively new to ISO8583 jpos financial programming and I want to building an app on android platform.

How do I get over this exception?

dvelopp
  • 4,095
  • 3
  • 31
  • 57
Sunday Okpokor
  • 721
  • 6
  • 18

2 Answers2

3

You cannot create an instance of BaseChannel -- it is an abstract class (see it on GitHub).

If all you wanna do is send an XML-formatted ISO-8583 message out to an endpoint and wait for a response, you could do something like this:

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();
  • Thank you Federico. I tried your suggestion but I got the following exceptions at the line: channel.send(m) W/System.err﹕ android.os.NetworkOnMainThreadException W/System.err﹕ at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118) – Sunday Okpokor Aug 14 '15 at 09:16
  • Okay, I added a separate thread to the code above and added a logger to XMLChannel. From the logger, I can see that message was going to the terminal, but I get a "peer disconnect" message from the terminal – Sunday Okpokor Aug 14 '15 at 09:54
  • @jade, is the message making it to the server? Does the 'disconnect' occur after 30 seconds (which is the client timeout)? – Federico González Aug 14 '15 at 12:40
  • the 'disconnect' does not happen after 30 seconds, so I think the message is getting to the server. – Sunday Okpokor Aug 14 '15 at 13:00
0

You have to use this file https://github.com/Iso8583user/iso8583, I have used it. and working for VISA and Matercard.

  • While this link may answer the question, it is better to include the essential parts of the answer here and provide the link for reference. Link-only answers can become invalid if the linked page changes. - [From Review](/review/late-answers/32916805) – André Walker Oct 16 '22 at 19:57