Java iso 8583解包错误字段123 ArrayIndex越界

Java iso 8583解包错误字段123 ArrayIndex越界,java,iso,jpos,Java,Iso,Jpos,我正在使用JPO打包和解包ISO消息,消息的打包很好,当我得到以下回复时 1210E030000002000020000000000400002807110457626000026000000052220140909134530000001812UU2411906554003TCB48520141026|20141026|D|UG|142465.75|Interest Paid||20991780.75^20140930|20140930|D|UG|164383.55|Interest Paid

我正在使用JPO打包和解包ISO消息,消息的打包很好,当我得到以下回复时

1210E030000002000020000000000400002807110457626000026000000052220140909134530000001812UU2411906554003TCB48520141026|20141026|D|UG|142465.75|Interest Paid||20991780.75^20140930|20140930|D|UG|164383.55|Interest Paid||20849315^20140831|20140831|D|UG|169863.00|Interest Paid||20684931.45^20140731|20140731|D|UG|169863.00|Interest Paid||20515068.45^20140630|20140630|D|UG|164383.55|Interest Paid||20345205.45^20140531|20140531|D|UG|169863.00|Interest Paid||20180821.9^20140430|20140430|D|UG|10958.90|Interest Paid||20010958.9^20140429|20140429|D|UG|20000000.00|Deposit Created||20000000.00
当我试图将其解包时,会出现以下错误:

error unpacking field 123
org.jpos.iso.ISOException: org.jpos.iso.IFA_LLLCHAR: Problem unpacking field 123 (java.lang.ArrayIndexOutOfBoundsException: 592)
    at org.jpos.iso.ISOStringFieldPackager.unpack(ISOStringFieldPackager.java:178)
org.jpos.iso.ISOException: org.jpos.iso.IFA_LLLCHAR: Problem unpacking field 123 (java.lang.ArrayIndexOutOfBoundsException: 592)
    at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:233)

这是我使用的代码

ISOMsg msg = new ISOMsg();

try {
    msg.setPackager(new GenericPackager("iso87ascii.xml"));
    msg.unpack(str.getBytes("UTF8"));

    msg.dump(System.out, "");
} catch (ISOException e) {
    e.printStackTrace();
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}
如果开始删除第一个字符,您将开始获得以下结果:

str="210E030000002000020000000000400002807110457626000026000000052220140909134530000001812UU2411906554003TCB48520141026|20141026|D|UG|142465.75|Interest Paid||20991780.75^20140930|20140930|D|UG|164383.55|Interest Paid||20849315^20140831|20140831|D|UG|169863.00|Interest Paid||20684931.45^20140731|20140731|D|UG|169863.00|Interest Paid||20515068.45^20140630|20140630|D|UG|164383.55|Interest Paid||20345205.45^20140531|20140531|D|UG|169863.00|Interest Paid||20180821.9^20140430|20140430|D|UG|10958.90|Interest Paid||20010958.9^20140429|20140429|D|UG|20000000.00|Deposit Created||20000000.00";
输出:

<isomsg>
  <!-- org.jpos.iso.packager.GenericPackager[iso87ascii.xml] -->
  <field id="0" value="210E"/>
  <field id="7" value="0000000040"/>
  <field id="8" value="00028071"/>
  <field id="35" value="4576260000"/>
  <field id="55" value="00000052220140909134530000001812UU2411906554003TCB48520141026|20141026|D|UG|142465.75|Interest Paid||20991780.75^20140930|20140930|D|UG|164383.55|Interest Paid||20849315^20140831|20140831|D|UG|169863.00|Interest Paid||20684931.45^20140731|20140731|D|UG|169863."/>
</isomsg>
我认为这是合乎逻辑的,因为它有iso39响应


我不确定这是否有帮助,但它可以给你一个线索,

我在这里找到了解决方案,这是一个包装问题。我使用过包装机,它工作正常。如果服务器端的打包程序与客户端不同,则可能发生错误

我不太擅长JPO,但我会尽力帮助你,你用的是什么包装机?是ISO93APackager吗,你用的是ISO 8583-2:1993版本吗?我用的是ISO 8583:1987包装机。这是我从iso87ascii.xml中得到的。我使用了那个打包程序,但是,错误是unpacking field=102。然而,如果我从左侧删除第一个字符,我开始成功解包,并继续删除,所有都是成功的,但转储消息不同,所以请尝试一下,如果您也可以在此处发布原始消息,我将发布一个答案来澄清这一点。亚赞,这是来自socketYazan的原始回复,谢谢。但是字符串以1210-MTI开头,这是来自服务器套接字的应答,因此使用它更好。
<isomsg>
  <!-- org.jpos.iso.packager.GenericPackager[iso87ascii.xml] -->
  <field id="0" value="10E0"/>
  <field id="3" value="000000"/>
  <field id="4" value="040000280711"/>
  <field id="31" value="045762600"/>
  <field id="51" value="002"/>
</isomsg>
<isomsg>
  <!-- org.jpos.iso.packager.GenericPackager[iso87ascii.xml] -->
  <field id="0" value="0300"/>
  <field id="19" value="000"/>
  <field id="39" value="04"/>
</isomsg>