javaiso8583jpos

how to handle subfields with JPOS library in java?


i have to build an iso 8583 message and for that i used the jpos library which is, according to my researches, the best libray to handle iso 8583 communications. I succeeded to build and send iso 8583 messages with fields in range 0-128 as you can see in this code :

public class SimpleClient {



public ISOMsg sendData() throws ISOException, IOException, org.jpos.iso.ISOException {
            ISOPackager packager = new GenericPackager("packager/iso93ascii.xml");
            
            ISOMsg isoMsg = new ISOMsg();
            isoMsg.setPackager(packager);
            isoMsg.set(new ISOField(0, "1200"));
            isoMsg.set(new ISOField(3, "920000"));
            isoMsg.set(new ISOField(4, "100000005000"));
            isoMsg.set(new ISOField(11, "000001"));
            isoMsg.set(new ISOField(12, "144306"));
            isoMsg.set(new ISOField(13, "0202"));
            isoMsg.set(new ISOField(14, "3012"));
            isoMsg.set(new ISOField(15, "1205"));
            isoMsg.set(new ISOField(18, "5961"));
            isoMsg.set(new ISOField(22, "020"));
            isoMsg.set(new ISOField(23, "000"));
            isoMsg.set(new ISOField(25, "00"));
            isoMsg.set(new ISOField(26, "53"));
//          isoMsg.set(new ISOField(28, "000000000"));
            isoMsg.set(new ISOField(32, "27610000001"));
            isoMsg.set(new ISOField(35, "9876500000306082"));
            isoMsg.set(new ISOField(37, "43063829"));
            isoMsg.set(new ISOField(41, "20390059"));
            isoMsg.set(new ISOField(42, "111120000012"));
            isoMsg.set("43", "support@hologram.com");
            isoMsg.set("48.1", "12");
            

    ASCIIChannel channel = new ASCIIChannel("127.0.0.1", 
5000, packager);
            channel.connect();
            channel.send(isoMsg);
            ISOMsg resIsoMsg = channel.receive();
            byte[] msg = resIsoMsg.pack();
//          channel.send(msg);

            System.out.println("========================================================================================");
            String res = ISOUtil.byte2hex(msg);
            System.out.println(res);
            System.out.println("========================================================================================");
            System.out.println(Arrays.toString(msg));
            System.out.println("========================================================================================");
            byte[] bytes = ISOUtil.hex2byte(res);
            System.out.println(Arrays.toString(bytes));
            System.out.println("========================================================================================");
            printISOMessage(resIsoMsg);
            System.out.println("========================================================================================");
            ISOMsg iso = new ISOMsg();
            iso.setPackager(packager);
            iso.unpack(bytes);
            iso.dump(System.out, "");
            System.out.println("========================================================================================");
            return isoMsg;
        }

        private void printISOMessage(ISOMsg isoMsg) throws org.jpos.iso.ISOException {
            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));
            }
        }
        }
        public static void main(String args[]) throws ISOException, IOException, org.jpos.iso.ISOException {
            SimpleClient s=new SimpleClient();
            s.sendData();
        }
}

and the response class

public class Response {

private Map<String, Object> dataFields = new HashMap<>();

public Map<String, Object> getDataFields() {
    return dataFields;
}



public void setDataFields(Map<String, Object> dataFields) {
        this.dataFields = dataFields;
    }

}

but i have a problem, if we would like to set subfields for field 40 for instance, how can we set them and integrate them in the ISOMsg object to send?

UPDATE : here is my packager :

        <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE isopackager PUBLIC
        "-//jPOS/jPOS Generic Packager DTD 1.0//EN"
        "http://jpos.org/dtd/generic-packager-1.0.dtd">

<!-- ISO 8583:1993 (ASCII) field descriptions for GenericPackager -->

<isopackager>
  <isofield
      id="0"
      length="4"
      name="Message Type Indicator"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="1"
      length="16"
      name="Bitmap"
      class="org.jpos.iso.IFA_BITMAP"/>
  <isofield
      id="2"
      length="19"
      name="Primary Account number"
      class="org.jpos.iso.IFA_LLNUM"/>
  <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="5"
      length="12"
      name="Amount, Reconciliation"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="6"
      length="12"
      name="Amount, Cardholder billing"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="7"
      length="10"
      name="Date and time, transmission"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="8"
      length="8"
      name="Amount, Cardholder billing fee"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="9"
      length="8"
      name="Conversion rate, Reconciliation"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="10"
      length="8"
      name="Conversion rate, Cardholder billing"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="11"
      length="6"
      name="Systems trace audit number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="12"
      length="12"
      name="Date and time, Local transaction"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="13"
      length="4"
      name="Date, Effective"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="14"
      length="4"
      name="Date, Expiration"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="15"
      length="6"
      name="Date, Settlement"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="16"
      length="4"
      name="Date, Conversion"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="17"
      length="4"
      name="Date, Capture"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="18"
      length="4"
      name="Merchant type"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="19"
      length="3"
      name="Country code, Acquiring institution"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="20"
      length="3"
      name="Country code, Primary account number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="21"
      length="3"
      name="Country code, Forwarding institution"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="22"
      length="12"
      name="Point of service data code"
      class="org.jpos.iso.IF_CHAR"/>
  <isofield
      id="23"
      length="3"
      name="Card sequence number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="24"
      length="3"
      name="Function code"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="25"
      length="4"
      name="Message reason code"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="26"
      length="4"
      name="Card acceptor business code"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="27"
      length="1"
      name="Approval code length"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="28"
      length="6"
      name="Date, Reconciliation"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="29"
      length="3"
      name="Reconciliation indicator"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="30"
      length="24"
      name="Amounts, original"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="31"
      length="99"
      name="Acquirer reference data"
      class="org.jpos.iso.IFA_LLCHAR"/>
  <isofield
      id="32"
      length="11"
      name="Acquirer institution identification code"
      class="org.jpos.iso.IFA_LLNUM"/>
  <isofield
      id="33"
      length="11"
      name="Forwarding institution identification code"
      class="org.jpos.iso.IFA_LLNUM"/>
  <isofield
      id="34"
      length="28"
      name="Primary account number, extended"
      class="org.jpos.iso.IFA_LLCHAR"/>
  <isofield
      id="35"
      length="37"
      name="Track 2 data"
      class="org.jpos.iso.IFA_LLCHAR"/>
  <isofield
      id="36"
      length="104"
      name="Track 3 data"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="37"
      length="12"
      name="Retrieval reference number"
      class="org.jpos.iso.IF_CHAR"/>
  <isofield
      id="38"
      length="6"
      name="Approval code"
      class="org.jpos.iso.IF_CHAR"/>
  <isofield
      id="39"
      length="3"
      name="Action code"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="40"
      length="3"
      name="Service code"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="41"
      length="8"
      name="Card acceptor terminal identification"
      class="org.jpos.iso.IF_CHAR"/>
  <isofield
      id="42"
      length="15"
      name="Card acceptor identification code"
      class="org.jpos.iso.IF_CHAR"/>
  <isofield
      id="43"
      length="99"
      name="Card acceptor name/location"
      class="org.jpos.iso.IFA_LLCHAR"/>
  <isofield
      id="44"
      length="99"
      name="Additional response data"
      class="org.jpos.iso.IFA_LLCHAR"/>
  <isofield
      id="45"
      length="76"
      name="Track 1 data"
      class="org.jpos.iso.IFA_LLCHAR"/>
  <isofield
      id="46"
      length="204"
      name="Amounts, Fees"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="47"
      length="999"
      name="Additional data - national"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofieldpackager
      id="48"  
      length="999"
      name="RESERVED PRIVATE USE"
      class="org.jpos.iso.IFA_LLLCHAR"
      packager="org.jpos.iso.packager.GenericSubFieldPackager">
  <isofield
      id="1"
      length="999"
      name="Additional data - private"
      class="org.jpos.iso.IFA_LLLCHAR"/>
      </isofieldpackager>
  <isofield
      id="49"
      length="3"
      name="Currency code, Transaction"
      class="org.jpos.iso.IF_CHAR"/>
  <isofield
      id="50"
      length="3"
      name="Currency code, Reconciliation"
      class="org.jpos.iso.IF_CHAR"/>
  <isofield
      id="51"
      length="3"
      name="Currency code, Cardholder billing"
      class="org.jpos.iso.IF_CHAR"/>
  <isofield
      id="52"
      length="8"
      name="Personal identification number [PIN] data"
      class="org.jpos.iso.IFA_BINARY"/>
  <isofield
      id="53"
      length="48"
      name="Security related control information"
      class="org.jpos.iso.IFA_LLBINARY"/>
  <isofield
      id="54"
      length="120"
      name="Amounts, additional"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="55"
      length="255"
      name="IC card system related data"
      class="org.jpos.iso.IFA_LLLBINARY"/>
  <isofield
      id="56"
      length="35"
      name="Original data elements"
      class="org.jpos.iso.IFA_LLNUM"/>
  <isofield
      id="57"
      length="3"
      name="Authorization life cycle code"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="58"
      length="11"
      name="Authorizing agent institution Id Code"
      class="org.jpos.iso.IFA_LLNUM"/>
  <isofield
      id="59"
      length="999"
      name="Transport data"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="60"
      length="999"
      name="Reserved for national use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="61"
      length="999"
      name="Reserved for national use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="62"
      length="999"
      name="Reserved for private use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="63"
      length="999"
      name="Reserved for private use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="64"
      length="8"
      name="Message authentication code field"
      class="org.jpos.iso.IFA_BINARY"/>
  <isofield
      id="65"
      length="8"
      name="Reserved for ISO use"
      class="org.jpos.iso.IFA_BINARY"/>
  <isofield
      id="66"
      length="204"
      name="Amounts, original fees"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="67"
      length="2"
      name="Extended payment data"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="68"
      length="3"
      name="Country code, receiving institution"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="69"
      length="3"
      name="Country code, settlement institution"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="70"
      length="3"
      name="Country code, authorizing agent Inst."
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="71"
      length="8"
      name="Message number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="72"
      length="999"
      name="Data record"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="73"
      length="6"
      name="Date, action"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="74"
      length="10"
      name="Credits, number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="75"
      length="10"
      name="Credits, reversal number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="76"
      length="10"
      name="Debits, number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="77"
      length="10"
      name="Debits, reversal number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="78"
      length="10"
      name="Transfer, number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="79"
      length="10"
      name="Transfer, reversal number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="80"
      length="10"
      name="Inquiries, number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="81"
      length="10"
      name="Authorizations, number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="82"
      length="10"
      name="Inquiries, reversal number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="83"
      length="10"
      name="Payments, number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="84"
      length="10"
      name="Payments, reversal number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="85"
      length="10"
      name="Fee collections, number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="86"
      length="16"
      name="Credits, amount"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="87"
      length="16"
      name="Credits, reversal amount"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="88"
      length="16"
      name="Debits, amount"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="89"
      length="16"
      name="Debits, reversal amount"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="90"
      length="10"
      name="Authorizations, reversal number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="91"
      length="3"
      name="Country code, transaction Dest. Inst."
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="92"
      length="3"
      name="Country code, transaction Orig. Inst."
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="93"
      length="11"
      name="Transaction Dest. Inst. Id code"
      class="org.jpos.iso.IFA_LLNUM"/>
  <isofield
      id="94"
      length="11"
      name="Transaction Orig. Inst. Id code"
      class="org.jpos.iso.IFA_LLNUM"/>
  <isofield
      id="95"
      length="99"
      name="Card issuer reference data"
      class="org.jpos.iso.IFA_LLCHAR"/>
  <isofield
      id="96"
      length="999"
      name="Key management data"
      class="org.jpos.iso.IFA_LLLBINARY"/>
  <isofield
      id="97"
      length="17"
      name="Amount, Net reconciliation"
      class="org.jpos.iso.IFA_AMOUNT"/>
  <isofield
      id="98"
      length="25"
      name="Payee"
      class="org.jpos.iso.IF_CHAR"/>
  <isofield
      id="99"
      length="11"
      name="Settlement institution Id code"
      class="org.jpos.iso.IFA_LLCHAR"/>
  <isofield
      id="100"
      length="11"
      name="Receiving institution Id code"
      class="org.jpos.iso.IFA_LLNUM"/>
  <isofield
      id="101"
      length="17"
      name="File name"
      class="org.jpos.iso.IFA_LLCHAR"/>
  <isofield
      id="102"
      length="28"
      name="Account identification 1"
      class="org.jpos.iso.IFA_LLCHAR"/>
  <isofield
      id="103"
      length="28"
      name="Account identification 2"
      class="org.jpos.iso.IFA_LLCHAR"/>
  <isofield
      id="104"
      length="100"
      name="Transaction description"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="105"
      length="16"
      name="Credits, Chargeback amount"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="106"
      length="16"
      name="Debits, Chargeback amount"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="107"
      length="10"
      name="Credits, Chargeback number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="108"
      length="10"
      name="Debits, Chargeback number"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="109"
      length="84"
      name="Credits, Fee amounts"
      class="org.jpos.iso.IFA_LLCHAR"/>
  <isofield
      id="110"
      length="84"
      name="Debits, Fee amounts"
      class="org.jpos.iso.IFA_LLCHAR"/>
  <isofield
      id="111"
      length="999"
      name="Reserved for ISO use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="112"
      length="999"
      name="Reserved for ISO use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="113"
      length="999"
      name="Reserved for ISO use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="114"
      length="999"
      name="Reserved for ISO use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="115"
      length="999"
      name="Reserved for ISO use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="116"
      length="999"
      name="Reserved for national use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="117"
      length="999"
      name="Reserved for national use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="118"
      length="999"
      name="Reserved for national use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="119"
      length="999"
      name="Reserved for national use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="120"
      length="999"
      name="Reserved for national use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="121"
      length="999"
      name="Reserved for national use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="122"
      length="999"
      name="Reserved for national use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="123"
      length="999"
      name="Reserved for private use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="124"
      length="999"
      name="Reserved for private use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="125"
      length="999"
      name="Reserved for private use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="126"
      length="999"
      name="Reserved for private use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="127"
      length="999"
      name="Reserved for private use"
      class="org.jpos.iso.IFA_LLLCHAR"/>
  <isofield
      id="128"
      length="8"
      name="Message authentication code field"
      class="org.jpos.iso.IFA_BINARY"/>
</isopackager>

and finally the exception i got :

     Exception in thread "main" org.jpos.iso.ISOException: error 

packing field 48 (org.jpos.iso.ISOException: org.jpos.iso.IFA_LLLCHAR: Problem packing field -1 (java.lang.ClassCastException: java.util.BitSet cannot be cast to java.lang.String))
    at org.jpos.iso.ISOBasePackager.pack(ISOBasePackager.java:185)
    at org.jpos.iso.ISOMsg.pack(ISOMsg.java:467)
    at org.jpos.iso.BaseChannel.pack(BaseChannel.java:981)
    at org.jpos.iso.BaseChannel.send(BaseChannel.java:598)
    at com.hologram.simulateur.acteurs.SimpleClient.sendData(SimpleClient.java:50)
    at com.hologram.simulateur.acteurs.SimpleClient.main(SimpleClient.java:84)
Nested:org.jpos.iso.ISOException: org.jpos.iso.IFA_LLLCHAR: Problem packing field -1 (java.lang.ClassCastException: java.util.BitSet cannot be cast to java.lang.String)
    at 

org.jpos.iso.ISOStringFieldPackager.pack(ISOStringFieldPackager.java:157)
    at org.jpos.iso.packager.GenericSubFieldPackager.pack(GenericSubFieldPackager.java:135)
    at org.jpos.iso.ISOMsgFieldPackager.pack(ISOMsgFieldPackager.java:60)
    at org.jpos.iso.ISOBasePackager.pack(ISOBasePackager.java:176)
    at org.jpos.iso.ISOMsg.pack(ISOMsg.java:467)
    at org.jpos.iso.BaseChannel.pack(BaseChannel.java:981)
    at org.jpos.iso.BaseChannel.send(BaseChannel.java:598)
    at com.hologram.simulateur.acteurs.SimpleClient.sendData(SimpleClient.java:50)
    at com.hologram.simulateur.acteurs.SimpleClient.main(SimpleClient.java:84)
Nested:java.lang.ClassCastException: java.util.BitSet cannot be cast to java.lang.String
    at org.jpos.iso.ISOStringFieldPackager.pack(ISOStringFieldPackager.java:143)
    at org.jpos.iso.packager.GenericSubFieldPackager.pack(GenericSubFieldPackager.java:135)
    at org.jpos.iso.ISOMsgFieldPackager.pack(ISOMsgFieldPackager.java:60)
    at org.jpos.iso.ISOBasePackager.pack(ISOBasePackager.java:176)
    at org.jpos.iso.ISOMsg.pack(ISOMsg.java:467)
    at org.jpos.iso.BaseChannel.pack(BaseChannel.java:981)
    at org.jpos.iso.BaseChannel.send(BaseChannel.java:598)
    at com.hologram.simulateur.acteurs.SimpleClient.sendData(SimpleClient.java:50)
    at com.hologram.simulateur.acteurs.SimpleClient.main(SimpleClient.java:84)

LINE 50->channel.send(isoMsg); LINE 84-> s.sendData();


Solution

  • Its failing as its trying to set the bitmpap field -1

    If you don't have a bitmpap for DE48

    Define your DE48 as the following with emitBitmap to false

       <isofieldpackager id="48" emitBitmap="false" length="999" name="RESERVED PRIVATE USE" class="org.jpos.iso.IFA_LLLCHAR" packager="org.jpos.iso.packager.GenericSubFieldPackager">
            <isofield id="1" length="999" name="Additional data - private" class="org.jpos.iso.IFA_LLLCHAR" />
        </isofieldpackager>
    

    Sample test code

    public static void main(String[] args) throws ISOException  {
    
    
        ISOMsg m = new ISOMsg("0100");
        GenericPackager pkg = new GenericPackager("path to packager");
        Logger l = new Logger();
        l.addListener(new SimpleLogListener());
        m.setPackager(pkg);
        
        m.set("48.1","ABCD");
        byte[] arr = m.pack();
        m.unpack(arr);
        
        m.dump(System.out, "");
        
    
    }
    

    Since we do pack and unpack we ae sure that the data is being being handled correctly.

    output

    <isomsg direction="none">
      <!-- org.jpos.iso.packager.GenericPackager[path to packager] -->
      <field id="bitmap" value="{48}" type="bitmap"/>
      <field id="0" value="0100"/>
      <isomsg direction="none" id="48">
        <!-- org.jpos.iso.packager.GenericSubFieldPackager -->
        <field id="1" value="ABCD"/>
      </isomsg>
    </isomsg>