Отключение однорангового узла при получении сообщения iso8583 с сервера

Я получил следующий фрагмент кода:

final ISOMsg isoMsg = new ISOMsg();
isoMsg.setPackager(packager);
isoMsg.setMTI("0800");
isoMsg.set(3, "9A0000");
isoMsg.set(7, ISODate.formatDate(now, "MMddHHmmss"));   
isoMsg.set(11, "123456");
isoMsg.set(12, ISODate.formatDate(now,"HHmmss"));    
isoMsg.set(13, ISODate.formatDate(now,"MMdd"));         
isoMsg.set(41, "20390040");
isoMsg.set(62,"0100820390040");
XMLChannel channel = new XMLChannel("xx.xx.xx.xxx", 1234, packager);
            try{

                logger.addListener(new SimpleLogListener(System.out));
                //channel.setPackager(packager);
                channel.setLogger(logger, "server-request-channel");
                channel.setTimeout(30000);
                channel.setHeader(isoMsg_.pack());
                channel.connect();
            }catch (Exception ex){
                System.out.println(ex.getMessage());
            }

            try{
                channel.send(isoMsg_);                      
                ISOMsg serverResponse = channel.receive();
                Log.i("response",new String(serverResponse.pack()));
            }catch(ISOException ex){
                System.out.println(ex.getMessage());
            }catch(Exception e){
                System.out.println(e.getMessage());
            }

Я получаю сообщение об отключении однорангового узла каждый раз, когда оно попадает на следующую строку:

ISOMsg serverResponse = channel.receive();

следующий журнал

<log realm="server-request-channel/xx.xx.xx.xx:1234" at="Fri Aug 14 11:06:04 WAT 2015.900">
    <connect>
        xx.xx.xx.xx:1234
    </connect>
 </log>

<log realm="server-request-channel/xx.xx.xx.xx:1234" at="Fri Aug 14 11:06:04 WAT 2015.927">
    <send>
        <isomsg direction="outgoing">
            <field id="0" value="0800"/>
            <field id="3" value="9A0000"/>
            <field id="7" value="0816210554"/>
            <field id="11" value="123456"/>
            <field id="12" value="210554"/>
            <field id="13" value="0816"/>
            <field id="41" value="20390040"/>
            <field id="62" value="0100820390050"/>          
        </isomsg>
    </send>
</log>

<log realm="server-request-channel/41.58.130.138:55533" at="Fri Aug 14 11:06:04 WAT 2015.958">
    <receive>
        <peer-disconnect/>
    </receive>
</log>

Я не знаю, то ли я делаю не так, то ли я что-то упускаю. Предполагается, что это простой (я полагаю) запрос на управление сетью. Как мне это решить?


person Sunday Okpokor    schedule 17.08.2015    source источник


Ответы (2)


Удаленной стороне, вероятно, не нравится ваше сообщение (канал может быть неправильным, упаковщик может быть неправильным, заголовок может быть неправильным), и он закрывает соединение, как только получает ваш запрос.

Вызов channel.setHeader(isoMsg_.pack()); крайне подозрительный, зачем отправлять сообщение ISO8583 в качестве заголовка к вашему фактическому сообщению ISO8583? Это, вероятно, неправильно (если только это не требуется спецификацией)

Журналы на их конце, вероятно, знают, почему они закрывают соединение, и могут дать вам подсказку о том, что может быть не так.

Боюсь, вам придется связаться с удаленной конечной точкой.

person apr    schedule 18.08.2015
comment
Спасибо за совет @apr. Я просмотрел документацию спецификации и обнаружил, что им нужно сообщение, отправленное через SSL-соединение. Я не знаю, как это сделать с JPOS. - person Sunday Okpokor; 19.08.2015
comment
Взгляните на github.com/jpos/ jPOS/blob/master/doc/src/asciidoc/ch05/ Полный документ можно получить здесь: jpos.org/doc/proguide-draft.pdf - person apr; 04.11.2015

Исключение, которое вы получаете, находится на стороне сервера, сервер прерывает клиентское соединение по многим причинам, таким как недопустимая длина пакета данных, или предыдущий заголовок комментария не проверяется, или другой тип канала, который вы используете (в случае JPOS)

person Zero Code    schedule 15.09.2020