How do I unpack an ISO 8583 message?

The code snippet below will show you how to unpack ISO 8583 message.

package org.kodejava.example.jpos;

import org.jpos.iso.ISOException;
import org.jpos.iso.ISOMsg;
import org.jpos.iso.packager.GenericPackager;

import java.io.InputStream;

public class UnpackISOMessage {
    public static void main(String[] args) {
        UnpackISOMessage iso = new UnpackISOMessage();
        try {
            ISOMsg isoMsg = iso.parseISOMessage();
            iso.printISOMessage(isoMsg);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private ISOMsg parseISOMessage() throws Exception {
        String message = "02003220000000808000000010000000001500120604120000000112340001840";
        System.out.printf("Message = %s%n", message);
        try {
            // Load package from resources directory.
            InputStream is = getClass().getResourceAsStream("/fields.xml");
            GenericPackager packager = new GenericPackager(is);
            ISOMsg isoMsg = new ISOMsg();
            isoMsg.setPackager(packager);
            isoMsg.unpack(message.getBytes());
            return isoMsg;
        } catch (ISOException e) {
            throw new Exception(e);
        }
    }

    private void printISOMessage(ISOMsg isoMsg) {
        try {
            System.out.printf("MTI = %s%n", isoMsg.getMTI());
            for (int i = 1; i <= isoMsg.getMaxField(); i++) {
                if (isoMsg.hasField(i)) {
                    System.out.printf("Field (%s) = %s%n", i, isoMsg.getString(i));
                }
            }
        } catch (ISOException e) {
            e.printStackTrace();
        }
    }
}

When you run the program you’ll get the following output:

Message = 02003220000000808000000010000000001500120604120000000112340001840
MTI = 0200
Field (3) = 000010
Field (4) = 000000001500
Field (7) = 1206041200
Field (11) = 000001
Field (41) = 12340001
Field (49) = 840

The xml packager (fields.xml) can be downloaded from the following link: fields.xml.

Maven Dependency

<!-- http://repo1.maven.org/maven2/org/jpos/jpos/2.0.10/jpos-2.0.10.jar -->
<dependency>
    <groupId>org.jpos</groupId>
    <artifactId>jpos</artifactId>
    <version>2.0.10</version>
</dependency>

Wayan Saryada

Programmer, runner, recreational diver, currently living in the island of Bali, Indonesia. Mostly programming in Java, creating web based application with Spring Framework, Hibernate / JPA.

9 Comments

  1. Hi Pavan, was the error caused by the fields.xml could not be found? Instead of loading the packager file using getResourceAsStream() you can just pass the full path of the fields.xml to create an instance of GenericPackager.

    Change the following code:

    InputStream is = getClass().getResourceAsStream("/fields.xml");
    GenericPackager packager = new GenericPackager(is);
    

    To:

    String filename = "D:/jpos/fields.xml";
    GenericPackager packager = new GenericPackager(filename);
    
    Reply
  2. Hello Mr. I have the same error of malformed URL even when using the whole path. I wonder if there is any other dependency besides the jpos one? Thank you!

    Reply

Leave a Reply