2014-11-05 3 views
0

Я использую JPOS упаковывать и распаковывать ISO сообщений упаковки сообщения просто хорошо, и когда я получаю следующий ответизо 8583 Распаковка поля ошибок 123 arrayindexout связанного

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) 
+0

Я не очень хорош в JPOS, но я постараюсь помочь, какой пакет вы используете? – Yazan

+0

это 'ISO93APackager', вы используете ISO 8583-2: 1993 версия? – Yazan

+0

Я использую упаковщик ISO 8583: 1987. Это то, что я получил от iso87ascii.xml. – jabsy

ответ

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> 

если вы удалите '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 (ответ)

я не уверен, если это за помощью, но это может дать вам подсказку,

+0

Yazan спасибо. но строка начинается с 1210-MTI, это ответ, который поступает из гнезда сервера, поэтому использовать его как есть лучше. – jabsy

0

Я получил решение здесь https://github.com/jpos/jPOS/blob/master/jpos/src/dist/cfg/packager/test-generic-validating-packager.xml Это была проблема с упаковщиком. Я использовал упаковщик, и он работает правильно. Если упаковщик на стороне сервера отличается от клиентской стороны, может возникнуть ошибка.