docs: public List<DataSlice> encodeFast(AbstractMessage message, CommsConnection commsConnection, Conversation conversation)
        throws MessageEncodeFailedException, SIConnectionDroppedException,
               IncorrectMessageTypeException, UnsupportedEncodingException, MessageCopyFailedException
     {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "encodeFast",
                                             new Object[]{CommsLightTrace.msgToString(message), commsConnection, CommsLightTrace.minimalToString(conversation)});
  
        if(!message.isControlMessage())
        {
          // Determine capabilities negotiated at handshake time.
          short clientCapabilities = ((CATHandshakeProperties) conversation.getHandshakeProperties()).getCapabilites();
          boolean requiresJMF = (clientCapabilities & CommsConstants.CAPABILITIY_REQUIRES_JMF_ENCODING) != 0;
          boolean requiresJMS = (clientCapabilities & CommsConstants.CAPABILITIY_REQUIRES_JMS_MESSAGES) != 0;
  
          if (requiresJMF || requiresJMS)
          {
             // If the client requires that we only send it JMS messages, convert the message.
             // As we can only transcribe JMS messages to a JMF encoding - if the client requires
             // a JMF encoded message then also apply this conversion.
             message = ((JsMessage) message).makeInboundJmsMessage();
          }
          if (requiresJMF)
          {
             // If the client requires that we only send it JMF encoded messages, perform the
             // appropriate transcription.  Note: this assumes the message is a JMS message.
             message = ((JsMessage) message).transcribeToJmf();
          }
        }
  
        List<DataSlice> messageParts = null;
        try
        {
           messageParts = message.encodeFast(commsConnection);
        }
        catch (MessageEncodeFailedException e)
        {
           // No FFDC Code Needed
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Caught a MessageEncodeFailedException from MFP:", e);
  
           // We interrogate the MessageEncodeFailedException to see if it hides a problem which we want to reflect back to our caller
           // using a different exception
  
           if (e.getCause() != null) {
             if (e.getCause() instanceof SIConnectionDroppedException) { // Was the connection dropped under MFP?
               throw new SIConnectionDroppedException(TraceNLS.getFormattedMessage(CommsConstants.MSG_BUNDLE, "CONVERSATION_CLOSED_SICO0065", null, null));
             } else if (e.getCause() instanceof IllegalStateException) { // An IllegalStateException may indicate a dropped connection
               if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, "The linked exception IS an IllegalStateException");
  
               if (conversation.isClosed()) {
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, "The conversation was closed - rethrowing as SIConnectionDroppedException");
                 throw new SIConnectionDroppedException(TraceNLS.getFormattedMessage(CommsConstants.MSG_BUNDLE, "CONVERSATION_CLOSED_SICO0065", null, null));
               }
             }
           }
  
           throw e;
        }
  
        if (TraceComponent.isAnyTracingEnabled())
          CommsLightTrace.traceMessageId(tc, "EncodeMsgTrace", message);
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "encodeFast", messageParts);
        return messageParts;
     }