JPOS NACChannel не может проанализировать входящее сообщение с заголовком - PullRequest
0 голосов
/ 26 октября 2018

Я использую NACChannel из JPOS v2.1.0.Я использую GenericPackager для упаковки моего сообщения.Я могу успешно отправить сообщение в свое приложение ISO.Но при получении входящего сообщения мой NACChannel.receive () выдает ошибку разбора.

Мое входящее сообщение имеет собственный заголовок.Я подозреваю, что это вызывает ошибку синтаксического анализа.Итак, мои вопросы:

  1. Как мне обработать этот заголовок ISOMsg в моем входящем ответе?
  2. Есть ли способ отключить шаг синтаксического анализа и получить ответ byte [] отканал?

Мой код клиента JPOS, который я использую:

public class BuildISOMessage {

public static void main(String[] args) throws IOException, ISOException {
    createISOMessage();

}

public static byte[] createISOMessage() throws ISOException {
    String HOST = "localhost";
    int PORT = 40021;

    // Create Packager based on XML that contain DE type
    ISOBasePackager packager = new GenericPackager("800_fields.xml");

    NACChannel testchannel = new NACChannel();

    testchannel.setHost(HOST, PORT);

    ISOMsg isoMsg = build200ISOMessage(packager);

    // print the DE list
    logISOMsg(isoMsg);

    // Get and print the output result
    byte[] data = isoMsg.pack();

    try {           
        testchannel.setPackager(isoMsg.getPackager());
        testchannel.setHeader(("ISO01" + String.format("%04d", data.length)).getBytes());

        testchannel.connect();          
        testchannel.send(isoMsg);

        if (testchannel.isConnected()) {
            ISOMsg response = testchannel.receive();
        }
        testchannel.disconnect();

    } catch (Exception e) {
        e.printStackTrace();
    }
    return data;
}

private static ISOMsg build200ISOMessage(ISOBasePackager packager)
        throws ISOException {
    // Create ISO Message
    ISOMsg isoMsg = new ISOMsg();
    isoMsg.setPackager(packager);
    isoMsg.setMTI("200");       
    isoMsg.set(2, "4622871000060891");
    isoMsg.set(3, "300000");
    isoMsg.set(4, "100");       
    isoMsg.set(7, "1026043633");
    isoMsg.set(11, "999901");       
    isoMsg.set(12, "113633");
    isoMsg.set(13, "1026");
    isoMsg.set(15, "1116");
    isoMsg.set(16, "1116");     
    isoMsg.set(18, "6011");
    isoMsg.set(22, "21");       
    isoMsg.set(32, "0000004");
    isoMsg.set(33, "0000004");
    isoMsg.set(35, "4622871000060891=22082211963393100000");
    isoMsg.set(37, "829911364035");
    isoMsg.set(43, "TBNKTAS2B065B999P999300501000050      TH");
    isoMsg.set(48, "00000000040000000002000000013000000000005000000000007000TYRIONLANNISER ARYA STARK000000003334000000000202        00000000000000000000");
    isoMsg.set(49, "764");      
    isoMsg.set(52, "FFFFFFFFFFFFFFFF");
    isoMsg.set(62, "221000000000");

    return isoMsg;
}

private static void logISOMsg(ISOMsg msg) {
    System.out.println("----ISO MESSAGE-----");
    try {
        System.out.println("  MTI : " + msg.getMTI());
        for (int i = 1; i <= msg.getMaxField(); i++) {
            if (msg.hasField(i)) {
                System.out.println("    Field-" + i + " : "
                        + msg.getString(i));
            }
        }
    } catch (ISOException e) {
        e.printStackTrace();
    } finally {
        System.out.println("--------------------");
    }
}
}

1 Ответ

0 голосов
/ 09 ноября 2018

Спасибо всем за помощь.В поисках ответа для целей отладки я создал подкласс NACChannel и поместил несколько операторов отладки.Сделав это, я понял, что проблема связана с определением моего поля и не имеет ничего общего с платформой JPOS.

Я устанавливал заголовок (например, ISO010200 , где длина сообщения равна 200) длины '9'по приведенному ниже коду.

testchannel.setHeader(("ISO01" + String.format("%04d", data.length)).getBytes());

Мой ответ также имел аналогичный заголовок длины' 9 '.Таким образом, метод receive () NACChanel смог правильно извлечь 9-значный заголовок.Но не удалось разобрать ответное сообщение, мое определение поля было неверным.

Как только это было исправлено, JPOS смог правильно проанализировать ответное сообщение.

...