docs: static void rcvSendToExceptionDest(CommsServerByteBuffer request,
                                        Conversation conversation,
                                        int requestNumber,
                                        boolean allocatedFromBufferPool,
                                        boolean partOfExchange)
     {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(tc, "rcvSendToExceptionDest",
                                             new Object[]
                                             {
                                                request,
                                                conversation,
                                                ""+requestNumber,
                                                ""+allocatedFromBufferPool,
                                                ""+partOfExchange
                                             });
  
        ServerLinkLevelState linkState = (ServerLinkLevelState) conversation.getLinkLevelAttachment();
        ConversationState convState = (ConversationState) conversation.getAttachment();
  
        final boolean optimizedTx = CommsUtils.requiresOptimizedTransaction(conversation);
  
        try
        {
           /**************************************************************/
           /* Connection object id                                       */
           /**************************************************************/
           short connectionObjId = request.getShort();
  
           /**************************************************************/
           /* Transaction id                                             */
           /**************************************************************/
           int txId = request.getSITransactionId(connectionObjId, linkState, optimizedTx);
  
           /**************************************************************/
           /* Destination address                                        */
           /**************************************************************/
           SIDestinationAddress destAddr = request.getSIDestinationAddress(conversation.getHandshakeProperties().getFapLevel());
  
           /**************************************************************/
           /* Reason code                                                */
           /**************************************************************/
           int reason = request.getInt();
  
           /**************************************************************/
           /* Alternate user                                             */
           /**************************************************************/
           String alternateUser = request.getString();
  
           /**************************************************************/
           /* JMO Message length                                         */
           /**************************************************************/
           int messageLength = (int) request.peekLong();
  
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
           {
              SibTr.debug(tc, "ConnectionObjectId", ""+connectionObjId);
              SibTr.debug(tc, "DestinationAddress", destAddr);
              SibTr.debug(tc, "Reason", ""+reason);
              SibTr.debug(tc, "TransactionId", ""+txId);
              SibTr.debug(tc, "MessageLength", ""+messageLength);
              SibTr.debug(tc, "AlternateUser", alternateUser);
           }
  
           // Now decode the JMO
           SIBusMessage jsMessage = request.getMessage(null);
  
           // Now grab all the inserts
           String[] inserts = null;
           int numberOfInserts = request.getShort();
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, "Number of inserts", ""+numberOfInserts);
  
           if (numberOfInserts != 0)
           {
              inserts = new String[numberOfInserts];
  
              for (int x = 0; x < numberOfInserts; x++)
              {
                 inserts[x] = request.getString();
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, "Insert[" + x + "] = " + inserts[x]);
              }
           }
  
           // Get the transaction
           SITransaction tran = linkState.getTransactionTable().get(txId);
  
           // Get the SICoreConnection
           SICoreConnection connection =
              ((CATConnection) convState.getObject(connectionObjId)).getSICoreConnection();
  
           // Now call the core SPI method
           if (tran != IdToTransactionTable.INVALID_TRANSACTION)
           {
              connection.sendToExceptionDestination(destAddr,
                                                    jsMessage,
                                                    reason,
                                                    inserts,
                                                    tran,
                                                    alternateUser);
           }
  
           try
           {
              conversation.send(poolManager.allocate(),
                                JFapChannelConstants.SEG_SEND_TO_EXCEPTION_DESTINATION_R,
                                requestNumber,
                                JFapChannelConstants.PRIORITY_MEDIUM,
                                true,
                                ThrottlingPolicy.BLOCK_THREAD,
                                null);
           }
           catch (SIException e)
           {
              FFDCFilter.processException(e,
                                          CLASS_NAME + ".rcvSendToExceptionDest",
                                          CommsConstants.STATICCATDESTINATION_SENDTOEXCEP_01);
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, e.getMessage(), e);
  
              SibTr.error(tc, "COMMUNICATION_ERROR_SICO2022", e);
           }
        }
        catch (SINotAuthorizedException e)
        {
           // No FFDC Code Needed
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, e.getMessage(), e);
  
           StaticCATHelper.sendExceptionToClient(e,
                                                 null,
                                                 conversation, requestNumber);
        }
        catch (SIException e)
        {
           //No FFDC code needed
           //Only FFDC if we haven't received a meTerminated event.
           if(!convState.hasMETerminated())
           {
              FFDCFilter.processException(e,
                                          CLASS_NAME + ".rcvSendToExceptionDest",
                                          CommsConstants.STATICCATDESTINATION_SENDTOEXCEP_02);
           }
  
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, e.getMessage(), e);
  
           StaticCATHelper.sendExceptionToClient(e,
                                                 CommsConstants.STATICCATDESTINATION_SENDTOEXCEP_02,
                                                 conversation, requestNumber);
        }
        catch (Exception e)
        {
           FFDCFilter.processException(e,
                                       CLASS_NAME + ".rcvSendToExceptionDest",
                                       CommsConstants.STATICCATDESTINATION_SENDTOEXCEP_03);
  
           if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, e.getMessage(), e);
  
           StaticCATHelper.sendExceptionToClient(e,
                                                 CommsConstants.STATICCATDESTINATION_SENDTOEXCEP_03,
                                                 conversation, requestNumber);
        }
  
        if (allocatedFromBufferPool) request.release();
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(tc, "rcvSendToExceptionDest");
     }