0

i keep getting an error "org.jpos.iso.ISOException: Key fields not found - not sending pd-channel-send.120". Kindly see my implementation.

this is my channel adaptor 10_pd_channel.xml

<?xml version="1.0" encoding="UTF-8"?>
<channel-adaptor name="pd-channel" logger="Q2">
   <channel class="org.jpos.iso.channel.ASCIIChannel" type="client" connect="yes" logger="Q2" realm="post-channel" packager="org.jpos.iso.packager.GenericPackager">
      <property name="packager-config" value="cfg/pd.xml" />
      <property name="host" value="127.0.0.1" />
      <property name="port" value="6276" />
      <property name="length-digits" value="6" />
      <property name="connection-timeout" value="30000" />
      <property name="timeout" value="300000" />
   </channel>
   <in>pd-channel-send</in>
   <out>pd-channel-receive</out>
   <reconnect-delay>10000</reconnect-delay>
   <keep-alive>yes</keep-alive>
</channel-adaptor>

20_pd_mux.xml
<mux class="org.jpos.q2.iso.QMUX" logger="Q2" name="pd-mux">
<in>pd-channel-receive</in>
<out>pd-channel-send</out>
<ready>pd-channel.ready</ready>
<unhandled>pd-unhandled</unhandled>
</mux>

21_pd_q_beans.xml

qmux = (QMUX) NameRegistrar.getIfExists("mux.pd-mux");
        log.info("qmux.getName ::: " + qmux.getName());
        
        ISOMsg m = new ISOMsg();
        try {
            m.setMTI("1200");
            m.set(2, transferRequest.getPrimaryAccountNo());
            m.set(3, transferRequest.getProcessingCode());
            m.set(4, transferRequest.getAmountTransaction());
            m.set(11, transferRequest.getStan());
            m.set(12, transferRequest.getDatetime());
            m.set(14, transferRequest.getDateExpire());
            m.set(22, transferRequest.getPosDataCode());
            m.set(24, transferRequest.getFunctionCode());
            m.set(25, transferRequest.getMsgReasonCode());
            m.set(26, transferRequest.getCardAcceptorBusinessCode());
            m.set(32, transferRequest.getAcqInstID());
            m.set(33, transferRequest.getFwdInstID());
            m.set(35, transferRequest.getTrack2Data());
            m.set(41, transferRequest.getCardAcceptTerminalId());
            m.set(42, transferRequest.getCardAcceptId());
            m.set(46, transferRequest.getAmountFees());
            m.set(49, transferRequest.getCcyCode());
            m.set(72, transferRequest.getDataRecord());
            m.set(93, transferRequest.getTrnxDestInstID());
            m.set(94, transferRequest.getTrnxOrigInstID());
            m.set(100, transferRequest.getRecvInstID());
            m.set(126, transferRequest.getAcqReqData());
           
            ISOMsg isoResponse = qmux.request(m, 30 * 1000);
            if (isoResponse != null) {
                val resp = new String(isoResponse.pack());
            } 

Any help will be really appreciated

Daniel Ameyaw
  • 83
  • 1
  • 10
  • 1
    It seems the response does not have the fields that are used to create the key to match the request by the MUX. In this case, as you are not defining the key in the mux file, it is by default fields 11 and 41. I see they are present in the request, but for some reason they seem to be not present in the response, can you show it (the response)? – Andrés Alcarraz Sep 29 '20 at 14:17
  • Thanks Andres, it works now...apparently field 11 and 41 had empty values. It worked after i parsed values to both fields. – Daniel Ameyaw Sep 29 '20 at 14:32

0 Answers0