0

JPOSメッセージのパックとアンパックに使用しています。メッセージのパック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)
4

2 に答える 2

0

これは私が使用したコードです

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>

str の先頭から '2' を削除した場合:

<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>

等々...

全体を削除すると、次の1210Eようになります

<isomsg>
  <!-- org.jpos.iso.packager.GenericPackager[iso87ascii.xml] -->
  <field id="0" value="0300"/>
  <field id="19" value="000"/>
  <field id="39" value="04"/>
</isomsg>

iso39(応答)があるため、ロジックを見つけます

参考になるかわかりませんが、参考になれば幸いです

于 2014-11-05T13:58:07.697 に答える