2016-02-11 7 views
2

Я работал в ISO 8583. И я использую JPOS для синтаксического анализа и анализа сообщений ISO. Но, когда я разобрать сообщение, я получаю эту ошибку:Получить NullPointerException при вызове пакета() JPOS

java.lang.NullPointerException 
    at org.jpos.iso.ISOBasePackager.pack(ISOBasePackager.java:94) 
    at org.jpos.iso.ISOMsg.pack(ISOMsg.java:442) 
    at com.sti.payment.postpaid.service.TransactionService.response(TransactionService.java:76) 
    at com.sti.payment.postpaid.App.main(App.java:35) 

Точка ошибки в:

byte [] bIsoMsg = isoMsg.pack(); 

Вот мой код:

public void response(String responseMessage) throws Exception { 
    // TODO Auto-generated method stub 
    GenericPackager packager = new GenericPackager("de-payment-request.xml"); 

    // Buat ISO Messagenya 
    ISOMsg isoMsg = new ISOMsg(); 
    isoMsg.setPackager(packager); 
    isoMsg.setMTI("0210"); 
    isoMsg.set(1, "723A40010A818000"); 
    isoMsg.set(2, "162333444455556666"); 
    isoMsg.set(3, "380099"); 

    byte [] bIsoMsg = isoMsg.pack(); 
} 

А вот мой XML:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<!DOCTYPE isopackager SYSTEM "genericpackager.dtd"> 
<isopackager> 
    <isofield 
    id="1" 
    length="64" 
    name="BIT MAP" 
    class="org.jpos.iso.IFA_BITMAP" 
    /> 
    <isofield 
    id="2" 
    length="16" 
    name="PRIMARY ACCOUNT NUMBER" 
    class="org.jpos.iso.IFA_LLNUM" 
    /> 
    <isofield 
    id="3" 
    length="6" 
    name="PROCESSING CODE" 
    class="org.jpos.iso.IFA_NUMERIC" 
    /> 
</isopackager> 

Что я пропустил? спасибо.

ответ

0

Ответ

На данный момент может быть не лучшим и нужным ответом на мою проблему. Просто исключите ID 1 в свой пакетный метод. Меня устраивает. Причина. JPOS автоматически добавляет идентификаторы 1 и 2 для вашего сообщения.

+0

Кстати, я думаю, что вы не настроили поле 0 (MTI). Вероятно, это одна из ваших проблем. – apr

+0

где я должен настроить? XML? – fanjavaid

+0

В вашем 'de-payment-request.xml', MTI будет полем 0, в вашем случае, вероятно, настроен как' IF_CHAR, length = 4' – apr

1

Поля растрового (элемент данных 1) выполняется автоматически JPOS, так что вы не должны вызывать:

isoMsg.set(1, "723A40010A818000");

При установке поля 1, JPOS полагает, что есть поля, которые на самом деле не настроен, и именно поэтому вы получаете NPE, скорее всего, here (в зависимости от вашей версии).

+0

Мое сообщение действительно в качестве ответа. Я удаляю эту строку, но все же NullPointer – fanjavaid

+0

Вы уверены, что поле 1 должно быть определено как IFA_BITMAP? Попробуйте 'IFB_BITMAP', он может решить вашу проблему. – apr

+0

Здравствуйте, спасибо за ваш ответ. Он работает сейчас. Я понижаю свою версию до 1.9.8 – fanjavaid