Jimmy's Blog – ISO 8583 Tutorial – Build and Parse ISO Message using JPOS library

ISO 8583 Tutorial article

In the beginning

OK after my article about ISO 8583 let’s go deeper into programming using Java + JPOS library.

Quote from JPOS website:

jPOS is a Java® platform-based, mission-critical, ISO-8583 based financial transaction library/framework that can be customized and extended in order to implement financial interchanges.

So first thing to do is download JPOS from it website.

Then we setup our development environment by creating Java Project using your favorites IDE. Add to the project all jar in JPOS library.
Here’s my Eclipse  package explorer looks like.

package explorer

package explorer

Create Data Elements (DE) types XML

Like I said that ISO 8583 is a ‘standard’ which mean can be different between one implementation and another :D
To put it simple, although there’s a (some) standard for DE list sometime we need to change it.
Either way, we need to tell JPOS how our DE will be formatted or packaged.

Since in the complete XML there’s 128 DE, I’ll quote only the DE # we used. Full xml can be downloaded here (basic.xml)

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE isopackager SYSTEM "genericpackager.dtd">
<isopackager>
  <isofield
      id="0"
      length="4"
      name="MESSAGE TYPE INDICATOR"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="1"
      length="64"
      name="BIT MAP"
      class="org.jpos.iso.IFA_BITMAP"/>
  <isofield
      id="3"
      length="6"
      name="PROCESSING CODE"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="4"
      length="12"
      name="AMOUNT, TRANSACTION"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="7"
      length="10"
      name="TRANSMISSION DATE AND TIME"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="11"
      length="6"
      name="SYSTEM TRACE AUDIT NUMBER"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="44"
      length="25"
      name="ADITIONAL RESPONSE DATA"
      class="org.jpos.iso.IFA_LLCHAR"/>
  <isofield
      id="105"
      length="999"
      name="RESERVED ISO USE"
      class="org.jpos.iso.IFA_LLLCHAR"/>
</isopackager>

The XML should easily understand in each isofield tag we define:

  • id : the DE number
  • length : the max/fixed length of the DE
  • name : yes, it’s the name or description
  • class : this define the type of the DE, which in this case represent by the JPOS class. You can see the whole class list here. I only list some of it.
    • IFA_NUMERIC : Numeric – Left padder with zeros.
    • IFA_BITMAP : For ISO Bitmap
    • IFA_LLCHAR : ASCII variable len CHAR – 2 digit length info
    • IFA_LLLCHAR : ASCII variable len CHAR – 3 digit length info

So this XML will be used for build (pack) ISO Message or parse (unpack) ISO Message.

You will need the XML data schema (genericpackager.dtd) to be put on same directory with basic.xml

Build (pack) ISO Message

Below is the code. The code is quite straight forward, review it first and I’ll discuss a bit afterward.

package gnu.jimmod.iso8583.utility;
 
import java.io.IOException;
import org.jpos.iso.ISOException;
import org.jpos.iso.ISOMsg;
import org.jpos.iso.packager.GenericPackager;
 
public class BuildISOMessage {
 
	public static void main(String[] args) throws IOException, ISOException {
		// Create Packager based on XML that contain DE type
		GenericPackager packager = new GenericPackager("basic.xml");
 
		// Create ISO Message
		ISOMsg isoMsg = new ISOMsg();
		isoMsg.setPackager(packager);
		isoMsg.setMTI("0200");
		isoMsg.set(3, "201234");
		isoMsg.set(4, "10000");
		isoMsg.set(7, "110722180");
		isoMsg.set(11, "123456");
		isoMsg.set(44, "A5DFGR");
		isoMsg.set(105, "ABCDEFGHIJ 1234567890");
 
		// print the DE list
		logISOMsg(isoMsg);
 
		// Get and print the output result
		byte[] data = isoMsg.pack();
		System.out.println("RESULT : " + new String(data));
	}
 
	private static void logISOMsg(ISOMsg msg) {
		System.out.println("----ISO MESSAGE-----");
		try {
			System.out.println("  MTI : " + msg.getMTI());
			for (int i=1;i&lt;=msg.getMaxField();i++) {
				if (msg.hasField(i)) {
					System.out.println("    Field-"+i+" : "+msg.getString(i));
				}
			}
		} catch (ISOException e) {
			e.printStackTrace();
		} finally {
			System.out.println("--------------------");
		}
 
	}
 
}

The output:

----ISO MESSAGE-----
  MTI : 0200
    Field-3 : 201234
    Field-4 : 10000
    Field-7 : 110722180
    Field-11 : 123456
    Field-44 : A5DFGR
    Field-105 : ABCDEFGHIJ 1234567890
--------------------
RESULT : 0200B2200000001000000000000000800000201234000000010000011072218012345606A5DFGR021ABCDEFGHIJ 1234567890

The program flow:

  1. Create ISO packager based on the xml file.
  2. Set the DE values. I use the previous article examples.
  3. Print the DE values set.
  4. Pack the message.
  5. Print the formatted ISO message. As you can see the result is the same with the previous article examples.

Parse (unpack) ISO Message

On this case it’s reversed. We have the ISO Message, and we need to see the DE values of it.
Like the previous code this one also similar and should be easy to understand.

package gnu.jimmod.iso8583.utility;
 
import java.io.IOException;
import org.jpos.iso.ISOException;
import org.jpos.iso.ISOMsg;
import org.jpos.iso.packager.GenericPackager;
 
public class ParseISOMessage {
 
	public static void main(String[] args) throws IOException, ISOException {
		// Create Packager based on XML that contain DE type
		GenericPackager packager = new GenericPackager("basic.xml");
 
		// Print Input Data
		String data = "0200B2200000001000000000000000800000201234000000010000011072218012345606A5DFGR021ABCDEFGHIJ 1234567890";
		System.out.println("DATA : " + data);
 
		// Create ISO Message
		ISOMsg isoMsg = new ISOMsg();
		isoMsg.setPackager(packager);
		isoMsg.unpack(data.getBytes());
 
		// print the DE list
		logISOMsg(isoMsg);
	}
 
	private static void logISOMsg(ISOMsg msg) {
		System.out.println("----ISO MESSAGE-----");
		try {
			System.out.println("  MTI : " + msg.getMTI());
			for (int i=1;i&lt;=msg.getMaxField();i++) {
				if (msg.hasField(i)) {
					System.out.println("    Field-"+i+" : "+msg.getString(i));
				}
			}
		} catch (ISOException e) {
			e.printStackTrace();
		} finally {
			System.out.println("--------------------");
		}
 
	}
 
}

The output:

DATA : 0200B2200000001000000000000000800000201234000000010000011072218012345606A5DFGR021ABCDEFGHIJ 1234567890
----ISO MESSAGE-----
  MTI : 0200
    Field-3 : 201234
    Field-4 : 000000010000
    Field-7 : 0110722180
    Field-11 : 123456
    Field-44 : A5DFGR
    Field-105 : ABCDEFGHIJ 1234567890
--------------------

The program flow:

  1. Create ISO packager based on the xml file.
  2. Set ISO Message.
  3. Print the ISO Message.
  4. Unpack the message.
  5. Print the DE values. As you can see the result is correct, just like the DE set in first example.

In the end

Ok, like always I hope I make it clear for you.
This might not (yet) a tutorial to make you able the whole financial platform or a bank platform :)
But everyone need to start somewhere.

I see this code example as the implementation of my previous article (ISO 8583 introduction)

Just leave comment if you have questions.

78 comments

  1. hello!,I like your writing very much! percentage we keep in touch more approximately your post on AOL? I require an expert in this house to resolve my problem. Maybe that’s you! Looking forward to look you.

  2. hello,
    your article helps me alot to understand the iso 8583 format but i stuckd in problem during programme. it showing me that ISO packages you used there i m not able to find that. i am new in this field so please can u tell me how did u get that packages ISOEXception,Genericpackager ISOMsg.

  3. I have included the jars and everything is working fine.But my only concern was do i need to worry about what happens under pack and unpack functions?

  4. Jimmy:

    Greetings. I am only able to download the project from jpos.org.

    Is there a way to download the jar files?

    Thanks
    Krishna

  5. Sorry I was a bit busy lately in my new company..

    @Krishna:
    If you go through the download page it will direct you to https://github.com/jpos/jPOS/tags
    Based on the statement on the website, you’ll need to purchase commercial license.

    @Pritesh:
    I think JPOS is suitable for mbanking, although it’s not the only option I believe.

    @Aniket:
    What do you mean by under pack & unpack?

  6. @Jimmy:
    Thank you for this blogpost. I got the example to work in my computer.
    I got the jPOS in maven in via git. And then did the maven compile and package and got the jar file. I was in the user forum for jPOS and they helped me with the compile.
    My special thanks to you for getting me started through your blog.
    Following are the steps suggested by one of users in the jpos-users@goolgegroups.com and I followed it and everything worked out. Got git installed in my computer (http://git-scm.com/) and added it to the PATH before proceeding with the following steps.Used JDK 1.6 Ver 30.
    /*************************
    Create a new directory with:
    mkdir mynewdir
    Then change to that directory:
    cd mynewdir
    You should now be in THAT directory, now type:
    git clone https://github.com/jpos/jPOS.git
    After a bit, you should have a pristine copy of the jPOS repository in that directory.
    You can now type:
    mvn compile
    mvn package
    ************************************/

    And then used your code and got it to work. I had to get the other libraries such as JDOM.

    Thanks a lot.
    Please keep up the good work.

    Krishna

  7. @jimmy:As we can see IsoMsg class has two methods pack and unpack.So while creating any MTI,bitmap do i need to worry about what goes under these two methods?and can u tell me more about subfields may be sample just like one above?

  8. Jimmy:
    Thanks for the reply. I am looking forward to use this in an android application.
    Thanks, for the blogpost and all the resources. this has really been a great help..!!

    Thanks a lot.

  9. Hi jimmy,

    Your post really helpful for us.I used it in my code.But i am getting error while unpacking the data with subfields.
    E.g. In my DE 114,i have used subfields. Subfield 3 is name.
    While packing it does not give any error. But while unpacking,it gives error like below–>
    org.jpos.iso.IFB_LLLBINARY: Problem unpacking field 0 (java.lang.ArrayIndexOutOfBoundsException) unpacking field=114, consumed=36

    Can you please guide what might be the problem here?

    Thanks

  10. I’ve been busy so sorry for my late replies.

    @aniket:
    As long you have configure packager (xml) correctly, we can assume the pack & unpack work properly.

    @Omkar:
    Can you post the data string, print out it before unpack it. And the xml (especially about DE-114)
    From the error it seems the data is to short, so it’s throwing index out of bound when try to read DE-114

  11. Hi!
    I am using this example it worked so fine. But now when I try to use for my own example I get this error:

    Exception in thread "main" java.lang.NullPointerException
    at org.jpos.iso.ISOBasePackager.pack(ISOBasePackager.java:102)
    at org.jpos.iso.ISOMsg.pack(ISOMsg.java:333)
    at gnu.quijada.Iso8583.MyISOMSG.main(MyISOMSG.java:64)

    i did my own basic.xml with my fields, i use this template

    ISO 8583 0200 S
    F2 Primary Acc. Num 5422********6290
    F3 Processing Code 003000
    F4 Amount of Transaction 125.00
    F11 System Trace 000081
    F14 Expiration date 1109
    F18 Merchant Category 5411
    F22 POS Entry Mode 012
    F24 Network International ID 006
    F25 POS condition code 08
    F41 Terminal ID 12776859
    F42 Card acceptor or Merchant # 349000000000
    F49 Transaction Currency code 214
    F62 Invoice/ECR Ref # 000001

    We can use the same basic.xml for parse and build the message ?
    I use the same xml but I added all fields that I need for both messages ?

    I need to create different xml ?

    The bitmap field is mandatory ?
    This message doesnt use bitmap .

    Thks for you help!!
    SO good tutorial!!!

  12. Answer myself….The XML basic needs the definition of field 1 for bitmap even you dont need it!!!

    I add the field 1, bitmap, and this eliminated the error

    Thks!!

  13. Hi Jimmy… amazing article.. i am very new to iso8583. following your tutorial… i am trying to write balance inquiry for some account number… so i do like this,

    I am also reading some jpos documentation to set those fields…

    isoMsg.setMTI(“0100″);
    isoMsg.setPackager(packager);
    isoMsg.set(2, “0000209″);
    isoMsg.set(3, “3010″); // (30 – bal inquiry 10 – savings)

    i am not sure if i did correct or wrong.. let me know..

  14. @Edwin:
    I’m not sure about BCD with JPOS, do you have any particular reason why you want to send the data in BCD?

    @Sanjay:
    For balance inquiry you will need to decide :
    - Account number (#2)
    - Processing code (#3)
    - PIN (#52)
    So I think you just need to add #52
    Some other non mandatory usually:
    - Date/time (#7)
    - STAN (#11)
    - etc

  15. thanks Jimmy…. again – would this jpos library work in android? coz i was trying and getting No Class found exception… org.apache.crimson.parser.XMLReaderImpl in loader dalvik.system.PathClassLoader … anybody got that too?

  16. i could make it work in Android… DVM will not have org.apache parser in it…. so i have used SAX parser to do the same job… so made it worked.. however i am trying to build the response for the request i have sent 01006000000000000000070000209003010 ….

  17. Jimmy, i have generated a response.. not sure if it is correct.. can you check once?
    ISOMsg isoMsg = new ISOMsg();
    isoMsg.setMTI(“0110″); // response
    isoMsg.setPackager(packager);
    isoMsg.set(4, amount);
    01101000000000000000000000005000

  18. @Edwin – i was searching for your BCD stuff — i think you can send BCD in header.. there is a utility in JPOS called ISOUtil.str2bcd(header, false) .. you can have a look..

  19. Please let me know the below info are sufficient enough for Balance Query request and response..

    ISO 8583 Format for the Balance Query Request
    —-ISO MESSAGE—–
    MTI : 0100
    Field-2 : 070116123456789
    Field-3 : 301000
    Field-11 : 000001
    RESULT: 0100602000000000000015070116123456789301000000001

    ISO 8583 Format for the Balance Query Successful Response
    —-ISO MESSAGE—–
    MTI : 0110
    Field-2 : 070116123456789
    Field-3 : 301000
    Field-4 : 5000
    Field-11 : 000001
    Field-12 : 024100
    Field-13 : 0411
    Field-39 : 00
    ——————–
    RESULT : 0110703800000200000015070116123456789301000000000005000000001024100041100

  20. Thank you for sharing superb informations. Your website is so cool. I’m impressed by the details that you’ve on this site. It reveals how nicely you perceive this subject. Bookmarked this website page, will come back for extra articles. You, my friend, ROCK! I found simply the info I already searched everywhere and just could not come across. What an ideal web site.

  21. Hi Jimmy,

    Great article it is very use full…thanks for your article and can you put the entire code in your blog instead of independent code…

    regards
    Jagan Reddy.

  22. Hi Jimmy,

    I mean for downloading the entire code as a single file.

    Thanks for your time…

    Regards
    Jagan Reddy

  23. 0067 ISO123456789 0800 82200000000000000400000000000000 0516124927 000001 301…
    Can anyone tell me what does 0067 specifies over here..

  24. Hi jimmy,

    Good article, but i need your advice here :
    - How do i parse the sub data element ?
    - do you have iso8583:2003 packager ?, or can i modify the xml packager v 1993/1987 ?

    Regards,
    aji

  25. @jaganreddy:
    You can download it using git from bitbucket : https://bitbucket.org/jimmod/blog_iso8583_parser/changeset/43e0ad9628b7

    @Gaurav:
    I’m not sure but it seem the first 2 sections (0067 ISO123456789) not really following ISO8583 standard format, may it’s custom implementation?

    @aji:
    You mean with JPos? I’m was not using JPos for a while so I’m a bit forgot – need to refresh my memory first.
    You can use the same xml, what important is you need to match the elements.

  26. Hi Jimmy,
    Thanks for the beginner’s tutorial. It’s a great introduction!
    Just one thing in your bitmap sample. You say
    “You can see that in this bitmap it explain that data element in the message is 1, 3, 4, 7, 11.”
    You’re missing the 44, also in the complete bitmap. :)

  27. Hello, jimmy thanks you for this post. but i have but a have a problem during execution. this is my error

    —-ISO MESSAGE—–
    MTI : 0200
    Field-3 : 201234
    Field-4 : 10000
    Field-7 : 1107221830
    Field-11 : 123456
    Field-44 : A5DFGR
    Field-105 : ABCDEFGHIJ 1234567890
    ——————–
    Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 1
    at org.jpos.q2.Q2.getRevision(Q2.java:749)
    at org.jpos.q2.Q2.getVersionString(Q2.java:521)
    at org.jpos.util.Logger.log(Logger.java:79)
    at org.jpos.iso.ISOBasePackager.pack(ISOBasePackager.java:175)
    at org.jpos.iso.ISOMsg.pack(ISOMsg.java:405)
    at build.main(build.java:49)

    thanks in advance

  28. How do i get the value of BITMAP field .
    Please request you to provide me the solution as soon as possible.

    Regards,
    Sampath.

  29. Hello jimmy,
    How do I add to ISOMessage fields like 47 and 59?
    For example the field 59has the following tags: DF20, DF0D, DF15, DF2E, DF11, DF18.
    I think method set() isn’t good.
    Can you give me an example of code?
    Thanks in advance

    Dino

  30. ClassNotFoundException: org.jpos.iso.IFA_NUMERIC

    i am new to both java and iso..

    also i am trying to start with your example

    but i get this error:
    ClassNotFoundException: org.jpos.iso.IFA_NUMERIC
    when i try to run the program

  31. ClassNotFoundException: org.jpos.iso.IFA_NUMERIC

    i am new to both java and iso..

    also i am trying to start with your example

    but i get this error:
    ClassNotFoundException: org.jpos.iso.IFA_NUMERIC
    when i try to run the program

    Please Guide

  32. I need to implement this application in android. I got error.

    org.jpos.iso.ISOException: java.lang.ClassNotFoundException: org.apache.crimson.parser.XMLReaderImpl in loader dalvik.system.PathClassLoader[/data/app/com.sample.androidisomessage-1.apk] (java.lang.ClassNotFoundException: org.apache.crimson.parser.XMLReaderImpl in loader dalvik.system.PathClassLoader[/data/app/com.sample.androidisomessage-1.apk])

    Please help me.

    @Sanjay did you get solution. Please guide me

  33. @Piraba I have the soultion too. Just mail me and I’ll send you the code.If you want to do it yourself override Generic packager with your own class that implements SAX Parser instead of default Crimson parser.

  34. Hi,
    I have a one small doubt i need to send a message to iso server like u show in the above. Can u assist me how to connect the server using ip and port number.

    Thanks in Advance
    praveenkumar

  35. client = new Socket(serverName, port);
    if(client.isConnected())
    {
    System.out.println(“Connected T0″
    + client.getRemoteSocketAddress());
    OutputStream outToServer = client.getOutputStream();
    DataOutputStream out = new DataOutputStream(outToServer);

    out.writeUTF(new String(JPOS_PACKET));

    InputStream inFromServer = client.getInputStream();
    DataInputStream in =
    new DataInputStream(inFromServer);
    response = in.readUTF();

    //Print Response
    System.out.println(“Server says ” + response);
    client.close();

  36. Please provide sample example for Cash withdrawal partial reversal(Message type 400). Also let me know the significance of the field 95 in ISO 8583.

    Thanks in advance.

  37. please tell me what all is required to make an ATM device work ( including client application interface with all programming modules, ISO 8583 message implementation, encrypting user’s input at the terminal and connection to bank switches )

  38. also tell me that once the client establishes connection to its own bank switch ,then how do the that client’s request for transaction is routed to the issuer bank through acquirer bank. i mean who does that, is it the bank’s job or we need to write the code for that process( as an ATM developer).

  39. @Deepak
    First you send data to your switch using JPOS or by making a custom packet (eg for balance Enquiry)

    public LinkedHashMap getBalanceEnquiry(Context context,String accountNumber,String trackValue){

    LinkedHashMap balanceEnquiry = new LinkedHashMap();

    balanceEnquiry.put(“003″,”311000″);
    balanceEnquiry.put(“004″,”000000000000″);
    balanceEnquiry.put(“007″,ProjectUtil.getTransacDateTimeStamp());
    balanceEnquiry.put(“011″,ProjectUtil.getStanNumber(context));
    balanceEnquiry.put(“012″,ProjectUtil.getTransacTimeStamp());
    balanceEnquiry.put(“013″,ProjectUtil.getTransacDateStamp());
    balanceEnquiry.put(“015″,ProjectUtil.getTransacDateStamp());
    balanceEnquiry.put(“018″,”6011″);
    balanceEnquiry.put(“041″,ProjectUtil.getTermID(context));
    balanceEnquiry.put(“048″,”0130″+trackValue);
    balanceEnquiry.put(“049″,”356″);
    balanceEnquiry.put(“123″,”015210101213146002″);

    return balanceEnquiry;
    }

    Then your switch connects to the bank’s CBS which is based on the agreement between the bank and the organization.

  40. Thanks @mihir for the kind response.I am a beginner. Kindly elaborate/explain some blocks of the code you provided( precisely the class definition, LinkedHashMap, ProjectUtil class).
    Also Mihir, i wanted to know the flow beyond the acquirer bank’s CBS, like how the above message is forwarded to issuer bank(in case of inter-bank transactions) , i mean whether my message will be automatically forwarded to the issuer bank or will i have to write some code for that too.

  41. @Anh Vu
    I alried told piraba to implement your own sax parser instead of deafault generic parser.For all those who dont understand here is the code -

    Inputstream inputstream = getApplicationContext().getAssets.open(“basic.xml”);
    //keep basic.xml in assets folder
    MihirPackager packager = new MihirPackager()

    Here is the code for MihirPackager Class -

    public class MihirPackager extends GenericPackager {

    public MihirPackager() throws ISOException {
    super();
    }

    public MihirPackager(String filename) throws ISOException {
    this();
    readFile(filename);
    }

    protected XMLReader createXMLReader() throws SAXException {
    XMLReader reader = null;
    SAXParserFactory spf = SAXParserFactory.newInstance();
    SAXParser sp;
    try {
    sp = spf.newSAXParser();
    reader = sp.getXMLReader();
    GenericContentHandler handler = new GenericContentHandler();
    reader.setContentHandler(handler);
    reader.setErrorHandler(handler);
    } catch (ParserConfigurationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    return reader;
    }

    public void readFile(InputStream input) throws ISOException
    {
    try {
    createXMLReader().parse(new InputSource(input));
    }
    catch (Exception e) {
    throw new ISOException(e);
    }
    }
    }

  42. You can pass inputstream in MihirPackager class and change the default constructor to change inputstream.

    public MihirPackager(Inputstream inputstream) throws ISOException {
    this();
    readFile(inputstream);
    }

  43. I am trying to do the parse of string, but always getting error in ISOMsg.unpack line.

    Follow error output:

    Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/commons/cli/MissingArgumentException
    at org.jpos.util.Logger.log(Logger.java:79)
    at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:285)
    at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:420)
    at estripador.testParse.main(testParse.java:25)
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.MissingArgumentException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    … 4 more
    Java Result: 1

  44. Hai Jimmy..
    I’m really2 thanks about it..
    You know, i’m a freshgraduate and now I get an assignment in my job to do it. I have a deadline just 2 months.Is it possible to make a prototype send message ISO8583 to JPOS and JPOS will return again in ISO8583 format just 2 months?
    Kindly, I need your help when I get confused. because this is my first experience in ISO8583. If you want to help me, may I know your contact.
    it’s my email: 116080026.asriana@gmail.com
    Thankyou Jimmy :)
    I’m really2 happy to read this :)

  45. Hi Mihir,
    In JPOS, which function is used to convert form original String to String which we will send to host?
    Example: with this string: 0200302000000080000000000000000001000012345612345678, MTI is 0200, it is hex string, but TID is 12345678, it is ascii string. 0200 is 2 bytes, 12345678 is 8 bytes.
    Thanks,

  46. Yes, I know it. But from result of:
    byte[] data = isoMsg.pack();
    System.out.println(“RESULT : ” + new String(data));
    If I connect to host and pass [data] to transfer, it will use data same to println above.

  47. At here, I mean how JPOS understand between F11 and F41, because same NUMERIC, same way to calculate length. Pls explain to me about it, and how to convert characters from 128 to 255 to Hex String.

  48. While implementing this, you have not set field-1 in your message.. but this field is being shown in the packaged message and also the value for it is being shown. When i implemented the same package field-1 is missing in the implemented output.

  49. I would also like to add if you do not surely have an insurance policy or perhaps you do not belong to any group insurance, chances are you’ll well really benefit from seeking the help of a health insurance agent. Self-employed or people who have medical conditions typically seek the help of any health insurance agent. Thanks for your article.

  50. Hi,

    I’m trying to implement this on android, but got a following exceptions.

    Exception
    ———-

    Could not find class ‘org.jdom.Element’, referenced from method org.jpos.util.LogEvent.dump
    Could not find class ‘org.jdom.input.SAXBuilder’, referenced from method org.jpos.q2.Q2.createSAXBuilder
    Could not find class ‘javax.management.ObjectInstance’, referenced from method org.jpos.q2.Q2.deploy
    FATAL EXCEPTION: main
    java.lang.VerifyError: org.jpos.q2.Q2
    at org.jpos.util.Logger.log(Logger.java:79)
    at org.jpos.iso.ISOBasePackager.pack(ISOBasePackager.java:175)
    at org.jpos.iso.ISOMsg.pack(ISOMsg.java:405)
    at com.example.androidclient.MainActivity.onCreate(MainActivity.java:56)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4627)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    at dalvik.system.NativeStart.main(Native Method)

    Source Code
    ———–

    InputStream inputstream = getApplicationContext().getAssets().open(“basic.xml”);
    TestPackager packager = new TestPackager(inputstream);

    ISOMsg isoMsg = new ISOMsg();
    isoMsg.setPackager(packager);
    isoMsg.setMTI(“0200″);
    isoMsg.set(3, “201234″);
    isoMsg.set(4, “10000″);
    isoMsg.set(7, “110722180″);
    isoMsg.set(11, “123456″);
    isoMsg.set(44, “A5DFGR”);
    isoMsg.set(105, “ABCDEFGHIJ 1234567890″);

    //logISOMsg(isoMsg);
    //
    byte[] data = isoMsg.pack();
    Log.i(“JPOS”, “RESULT : ” + new String(data));

  51. Hi,

    I need to send my own header with the message. Can I accomplish it with isoMsg.setHeader method. If so how does the message looks like.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

WP-SpamFree by Pole Position Marketing