jPOS не может получить ISOMsg с сервера

Я шаг за шагом устанавливаю JAR-сервер jPOS с помощью этого. Я создаю сервер по коду ниже:

public class jPOSServer implements ISORequestListener {

    public static void main(String[] args) {
        try {
            Logger logger = new Logger();
            logger.addListener(new SimpleLogListener(System.out));

            XMLChannel serverChannel = new XMLChannel("localhost", 9000, new XMLPackager());
            ((LogSource) serverChannel).setLogger(logger, "server-channel-logger");

            ISOServer isoServer = new ISOServer(9000, serverChannel, null);
            isoServer.setLogger(logger, "server-logger");
            isoServer.addISORequestListener(new jPOSServer());

            new Thread(isoServer).start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public boolean process(ISOSource isoSource, ISOMsg isoMsg) {
        ISOMsg m = isoMsg;
        try {
            m.setMTI("0830");
            m.set(11, "000002");
            m.set(41, "00000002");
            isoSource.send(m);
            return true;
        } catch (ISOException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
}

Вход в JAR-сервер находится здесь:

<log realm="org.jpos.transaction.TransactionManager" at="2019-04-24T15:25:04.787" lifespan="24ms">                       
  <abort>
    txnmgr-1:idle:1
    <context>
      TIMESTAMP: Wed Apr 24 15:25:04 IRDT 2019                                                                           
      SOURCE: org.jpos.iso.channel.XMLChannel@7217f905
      REQUEST:
       <isomsg direction="incoming">                                                                
         <!-- org.jpos.iso.packager.XMLPackager -->                                                                      
         <field id="0" value="0800"/>
         <field id="11" value="000001"/>
         <field id="41" value="00000001"/>
         <field id="70" value="301"/>
       </isomsg>
      RESULT:
       <result>
         <fail>
           [MISCONFIGURED_ENDPOINT] o.j.t.p.QueryHost.prepare:60 'DESTINATION' not present in Context                    
         </fail>
       </result>
      LOGEVT:
        <info>
          RESPONSE not present
        </info>
    </context>
            prepare: o.j.t.p.QueryHost ABORTED READONLY NO_JOIN                                                          
    prepareForAbort: o.j.t.p.SendResponse
    abort: o.j.t.p.SendResponse
    in-transit=0, head=2, tail=2, paused=0, outstanding=0, active-sessions=2/128, tps=0, peak=0, avg=0.00, elapsed=22ms 
    <profiler>          
      prepare: o.j.t.p.QueryHost [20.5/20.5]                                                                             
      prepareForAbort: o.j.t.p.SendResponse [0.8/21.3]                                                                   
        abort: o.j.t.p.SendResponse [0.8/22.1]                                                                           
      end [28.3/50.5]      
    </profiler>         
  </abort>           
</log>               
<log realm="xml-server-8000/127.0.0.1:61804" at="2019-04-24T15:25:07.721" lifespan="3002ms">                             
  <receive>
    <io-timeout/>
  </receive>
</log>
<log realm="xml-server-8000.server.session/127.0.0.1:61804" at="2019-04-24T15:25:07.725">                                
  <session-end/>
</log>
<log realm="org.jpos.q2.iso.ChannelAdaptor" at="2019-04-24T15:29:57.225" lifespan="1ms">                                 
  <warn>
    channel-receiver-jpos-receive
    Read timeout / EOF - reconnecting                                                                                    
  </warn>
</log>     

Я отправляю данные с помощью telnet localhost 8000 на сервер JAR через порт 8000, а сервер JAR передает данные на сервер через порт 9000. Сервер JAR получает данные и данные журнала, отправляет данные на сервер, а сервер получает данные. но произошла ошибка Read timeout. Я отлаживаю файл JAR и обнаружил, что ошибка возникает в b = this.streamReceive(); на BaseChannel.java:777. Как я могу это исправить? Спасибо.


person Hajitsu    schedule 24.04.2019    source источник


Ответы (1)


что значит ошибка в b = this.streamReceive()? Ваша проблема, похоже, заключается в следующем:

        <result>
         <fail>
           [MISCONFIGURED_ENDPOINT] o.j.t.p.QueryHost.prepare:60 'DESTINATION' not present in Context                    
         </fail>
       </result>

Это означает, что участник QueryHost не знает, куда отправить сообщение, и поэтому у вас нет ответа, вам нужно добавить мультиплексор назначения в контекст, очевидно, под ключом «DESTINATION». Я не знаю, как вы создаете контекст, если он использует IncomingListener, вам не хватает этой записи.

<property name="ctx.DESTINATION" value="jPOS-AUTORESPONDER" /> 

Изменение jPOS-AUTORESPONDER на любое имя вашего мультиплексора.

person Andrés Alcarraz    schedule 24.04.2019
comment
Спасибо за повтор. Я добавляю ` ‹property name=ctx.DESTINATION value=jPOS-AUTORESPONDER /›` к 50_xml_server.xml, но ошибка по-прежнему возникает. - person Hajitsu; 27.04.2019
comment
Исправляю проблему только добавлением: m.setMTI("830"); в process() метод. Итак, сначала отправьте данные от клиента на порт 800 (сервер JAR), затем измените MIT сообщения и перенаправьте на порт 9000. Но проблема в том, что я не могу понять, почему я должен изменить MIT в методе process, а затем все будет хорошо! - person Hajitsu; 27.04.2019
comment
это потому, что мультиплексор принимает в качестве ответа только ответы. 0830 — это ответ на 0820, а 0820 — нет. Вы также можете использовать m.setResponseMTI() - person Andrés Alcarraz; 08.06.2019