Java 使用JPO的PISO 8583子字段

Java 使用JPO的PISO 8583子字段,java,payment,iso8583,jpos,Java,Payment,Iso8583,Jpos,当我将DE57打印为: GenericPackager packager = new GenericPackager("iso87binary.xml"); ISOMsg iso57 = new ISOMsg(57); iso57.setPackager(packager); ISOField iso57_0 = new ISOField(0, "HTLE"); ISOField iso57_1 = new ISOFie

当我将DE57打印为:

GenericPackager packager = new GenericPackager("iso87binary.xml");
 ISOMsg iso57 = new ISOMsg(57);
            iso57.setPackager(packager);
            ISOField iso57_0 =  new ISOField(0, "HTLE");
            ISOField iso57_1 = new ISOField(1, "04");
            ISOField iso57_2 = new ISOField(2, "000");
            ISOField iso57_3 = new ISOField(3, "M0220001");
            ISOField iso57_4 = new ISOField(4, "2190");
            ISOField iso57_5 = new ISOField(5, "0000010172D54C600102");
            ISOField iso57_6 = new ISOField(6, "64");
            ISOField iso57_7 = new ISOField(7, "00000000");
            ISOField iso57_8 = new ISOField(8, "95CA5E94F182A9949A7C7BA202143C4E212087E626E5F5C1C63AD173F733D339");
            iso57.set(iso57_0);
            iso57.set(iso57_1);
            iso57.set(iso57_2);
            iso57.set(iso57_3);
            iso57.set(iso57_4);
            iso57.set(iso57_5);
            iso57.set(iso57_6);
            iso57.set(iso57_7);
            iso57.set(iso57_8);
            isoMsg.set(iso57);
我得到空值。但是,当我将其打印为子字段时,我可以看到值(在整个iso消息@I=57中循环运行):


为什么在前面的例子中我没有得到值。

您不必创建iso57内部消息,您可以:

                System.out.printf("Field (%s) = %s%n", i+".0", isoMsg.getString(i+".0"));
                System.out.printf("Field (%s) = %s%n", i+".1", isoMsg.getString(i+".1"));
                System.out.printf("Field (%s) = %s%n", i+".2", isoMsg.getString(i+".2"));
                System.out.printf("Field (%s) = %s%n", i+".3", isoMsg.getString(i+".3"));
                System.out.printf("Field (%s) = %s%n", i+".4", isoMsg.getString(i+".4"));
                System.out.printf("Field (%s) = %s%n", i+".5", isoMsg.getString(i+".5"));
                System.out.printf("Field (%s) = %s%n", i+".6", isoMsg.getString(i+".6"));
                System.out.printf("Field (%s) = %s%n", i+".7", isoMsg.getString(i+".7"));
                System.out.printf("Field (%s) = %s%n", i+".8", isoMsg.getString(i+".8"));
然后你可以打电话:

ISOMsg m = new ISOMsg();
m.set("57.0", "HTLE");
m.set("57.1", "04");
m.set("57.2", "000");
...
...

诸如此类。

我在子字段打包问题上也遇到了同样的问题,我刚刚发布了一个问题,希望您能提供帮助。
                System.out.printf("Field (%s) = %s%n", i+".0", isoMsg.getString(i+".0"));
                System.out.printf("Field (%s) = %s%n", i+".1", isoMsg.getString(i+".1"));
                System.out.printf("Field (%s) = %s%n", i+".2", isoMsg.getString(i+".2"));
                System.out.printf("Field (%s) = %s%n", i+".3", isoMsg.getString(i+".3"));
                System.out.printf("Field (%s) = %s%n", i+".4", isoMsg.getString(i+".4"));
                System.out.printf("Field (%s) = %s%n", i+".5", isoMsg.getString(i+".5"));
                System.out.printf("Field (%s) = %s%n", i+".6", isoMsg.getString(i+".6"));
                System.out.printf("Field (%s) = %s%n", i+".7", isoMsg.getString(i+".7"));
                System.out.printf("Field (%s) = %s%n", i+".8", isoMsg.getString(i+".8"));
ISOMsg m = new ISOMsg();
m.set("57.0", "HTLE");
m.set("57.1", "04");
m.set("57.2", "000");
...
...
m.getString("57.0") to get the result "HTLE"
m.getString("57.1") to get "04"