docs: private void dispatchToConversationListenerMethod(WsByteBuffer data, ConversationImpl conversation)
     {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "dispatchToConversationListenerMethod", new Object[]{data, conversation});
        boolean bailOut = false;
  
        if (conversation == null)
        {
           // Must be an attempt to start a new conversation.
           if (onClientSide)
           {
              // This is an error!
              bailOut = true;
           }
           else
           {
              // On the server side we assume any previously unseend
              // conversation id means that the client is stricking up a
              // conversation with us.
              conversation = new ConversationImpl((short)conversationHeaderFields.conversationId, false, connection, null);
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "accepting new conversation");
  
              ConversationReceiveListener rl = null;
              boolean badReceiveListener = false;
              try
              {
                 rl = acceptListener.acceptConnection(conversation);
              }
              catch(Throwable t)
              {
                 FFDCFilter.processException
                    (t, "com.ibm.ws.sib.jfapchannel.impl.ConnectionReadCompletedCallback", JFapChannelConstants.INBOUNDXMITPARSER_DISPCONVLST_01);
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "exception thrown from acceptConnection");
                 if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) SibTr.event(this, tc, t.getMessage());
  
                 // Oh dear, user managed to throw an exception in their callback.
                 badReceiveListener = true;
                 bailOut = true;
              }
  
              // If the user did not supply us with a receive listener (either through
              // incompetence or throwning an exception) make our own.  We need one before
              // we can finish establishing the conversation and the cleanest way to dump the
              // conversation is to finish establishing it then close it.
              if (rl == null)
              {
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "bad receive listener");
                 badReceiveListener = true;
                 bailOut = true;
                 rl = new BadReceiveListener();
              }
  
              conversation.setDefaultReceiveListener(rl);
              try
              {
                 conversation = connection.startNewConversation(conversation);
  
                 if (badReceiveListener)
                 {
                    try
                    {
                       conversation.close();
                    }
                    catch (SIResourceException e)
                    {
                       FFDCFilter.processException
                          (e, "com.ibm.ws.sib.jfapchannel.impl.ConnectionReadCompletedCallback", JFapChannelConstants.INBOUNDXMITPARSER_DISPCONVLST_02);
                       if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "exception thrown closing conversation");
                       if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) SibTr.exception(this, tc, e);
  
                       // Hmmn, something went wrong trying to close the logical conversation.
                       // Bring down the whole conneciton.
                       connection.invalidate(false, e, "SIResourceError when closing conversation - "+e.getMessage()); // D224570
                       bailOut = true;
                    }
                 }
              }
              catch(SIResourceException e)
              {
                 // No FFDC code needed
                 // (FFDC taken at source of exception)
                 try
                 {
                    conversation.close();
                 }
                 catch(Exception e2)
                 {
                    // No FFDC code needed
                    // (already broken)
                 }
  
                 connection.invalidate(true, e, "SIResourceError when creating conversation - "+e.getMessage());
              }
           }
        }
  
        if (!bailOut)
        {
  
           RequestIdTable reqIdTable = null;
           if (conversation != null)
              reqIdTable = conversation.getRequestIdTable();
  
           // Is this request something we were expecting a reply for?
           if ((reqIdTable != null) && reqIdTable.containsId(conversationHeaderFields.requestNumber))
           {
              ReceiveListener listener = reqIdTable.getListener(conversationHeaderFields.requestNumber);
              reqIdTable.remove(conversationHeaderFields.requestNumber);
  
              if (listener != null)
              {
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "listener: "+listener+" conversaion: "+conversation);
  
                 ReceiveListenerDispatcher.getInstance(conversation.getConversationType(), conversation.isOnClientSide()).        // D242116
                  queueDataReceivedInvocation
                    (connection, listener, data, primaryHeaderFields.segmentType,
                       conversationHeaderFields.requestNumber, primaryHeaderFields.priority, primaryHeaderFields.isPooled,
                       primaryHeaderFields.isExchange, conversation);
              }
              else
              {
                 // It should be impossible to get to here and discover that
                 // the associated entry in the request table has a null
                 // receive listener...
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Entry "+conversationHeaderFields.requestNumber+" in request table has null listener");
  
                 // Probably better stop talking to our peer - just to be on the safe side.
                 connection.invalidate(true, null, "no receive listener for conversation "+conversationHeaderFields.requestNumber); // F176003, D224570
              }
  
           }
           else
           {
              // We weren't expecting this reply - notify the 'default' request
              // listener associated with this conversation...
              ConversationReceiveListener listener =                                 // F174776
                 conversation.getDefaultReceiveListener();
              //if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "invokeCallback", "default receive listener: "+listener);
              if (listener == null)
              {
                 // Earlier error checking should prevent us ever getting into
                 // this condition.
                 //if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "No default receive listener");
  
                 // Since we can't really continue, probably best to stop talking
                 // to our peer now.
                 connection.invalidate(true, null, "no default receive listener");    // F176003, D224570
              }
              else
              {
                 ReceiveListenerDispatcher.getInstance(conversation.getConversationType(), conversation.isOnClientSide()).        // D242116
                  queueDataReceivedInvocation
                    (connection, listener, data, primaryHeaderFields.segmentType,
                    conversationHeaderFields.requestNumber, primaryHeaderFields.priority, primaryHeaderFields.isPooled,
                    primaryHeaderFields.isExchange, conversation);
              }
           }
  
        }//if(!bailOut)
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "dispatchToConversationListenerMethod");
     }