msg.set(field48);
msg.recalcBitMap();
GenericPackager packager = new GenericPackager(new FileInputStream("build/resources/test/org/jpos/tlv/emv-tlv-packager.xml"));
msg.setPackager(packager);
byte[] packed = packager.pack(msg);
// 30313030
// 00 00 00 00 00 01 00 00
// 30 32 30
// 50 02 51 32
// 5a 07 19 96 09 30 00 00 00
// 9f 12 04 4a 50 4f 53
System.out.println("Packed: " + ISOUtil.byte2hex(packed));
//skip 4 byte MTI and 8 byte Primary BitMap
byte[] field48Packed = new byte[packed.length - 12];
System.arraycopy(packed, 12, field48Packed, 0, field48Packed.length);
Assert.assertEquals("Pack error", 29, field48Packed.length);
//
Assert.assertEquals("Pack error", "303236500251325a08999999123456789f5f2a0208409f12044a504f53", ISOUtil.byte2hex(field48Packed));
//Assert.assertEquals("Pack error", "303235500251325a079999991234567895f2a0208409f12044a504f53", ISOUtil.byte2hex(field48Packed));
msg = new ISOMsg();
packager.unpack(msg, packed);
msg.recalcBitMap();
tagValueSequence = new EMVTagSequence();
tagValueSequence.readFrom((ISOMsg) msg.getComponent(48));
Assert.assertEquals("Unpack error", 4, tagValueSequence.getAll().size());
String tag1 = EMVStandardTagType.APPLICATION_PRIMARY_ACCOUNT_NUMBER_0x5A.getTagNumberHex();
LiteralEMVTag pan = (LiteralEMVTag) tagValueSequence.getFirst(tag1);
Assert.assertEquals("Unpack error", "999999123456789", pan.getValue());
String tag2 = EMVStandardTagType.APPLICATION_PREFERRED_NAME_0x9F12.getTagNumberHex();
LiteralEMVTag name = (LiteralEMVTag) tagValueSequence.getFirst(tag2);
Assert.assertEquals("Unpack error", "JPOS", name.getValue());
String tag3 = EMVStandardTagType.APPLICATION_LABEL_0x50.getTagNumberHex();
LiteralEMVTag label = (LiteralEMVTag) tagValueSequence.getFirst(tag3);
Assert.assertEquals("Unpack error", "Q2", label.getValue());
String tag4 = EMVStandardTagType.TRANSACTION_CURRENCY_CODE_0x5F2A.getTagNumberHex();
LiteralEMVTag currency = (LiteralEMVTag) tagValueSequence.getFirst(tag4);
Assert.assertEquals("Unpack error", "840", currency.getValue());
packed = packager.pack(msg);
//skip 4 byte MTI and 8 byte Primary BitMap
field48Packed = new byte[packed.length - 12];
System.arraycopy(packed, 12, field48Packed, 0, field48Packed.length);