docs: public UndeliverableReturnCode handleUndeliverableMessage(
                                                                SIMPMessage msg,
                                                                int exceptionReason,
                                                                String[] exceptionInserts,
                                                                TransactionCommon tran,
                                                                String subscriptionID)
                      throws
                      SIResourceException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(
                          tc,
                          "handleUndeliverableMessage",
                          new Object[] { msg, Integer.valueOf(exceptionReason), exceptionInserts, subscriptionID });
  
          //If an ExceptionDestinationHandlerImpl instance does not exist yet, then create it
          if (_exceptionDestination == null)
          {
              _exceptionDestination = new ExceptionDestinationHandlerImpl(this);
          }
  
          boolean tranCreated = false;
          if (tran == null)
          {
              /* Create a new transaction under which to perform the reroute */
              tran = txManager.createLocalTransaction(false);
              tranCreated = true;
          }
          UndeliverableReturnCode rc = null;
  
          try
          {
  
              /* Pass the undeliverable message to the exception destination */
              // F001333-14610
              // Pass the subscription ID to the exception handler
              // so that it can be set on the exceptioned message.
              rc = _exceptionDestination.handleUndeliverableMessage(msg,
                                                                    tran,
                                                                    exceptionReason,
                                                                    exceptionInserts,
                                                                    subscriptionID);
  
              if (rc == UndeliverableReturnCode.OK
                  || rc == UndeliverableReturnCode.DISCARD)
              {
                  // Message is no longer required. Remove from the itemstream
                  try
                  {
                      if (msg.isInStore())
                      {
                          Transaction msTran = messageProcessor.resolveAndEnlistMsgStoreTransaction(tran);
                          if (rc == UndeliverableReturnCode.DISCARD) {
                              SibTr.info(tc, "DISCARD_MESSAGE_INFO_CWSIP00216", new Object[] { msg.getID() });
                          }
                          msg.remove(msTran, msg.getLockID());
                      }
                  } catch (MessageStoreException e)
                  {
                      // MessageStoreException shouldn't occur so FFDC.
                      FFDCFilter.processException(
                                                  e,
                                                  "com.ibm.ws.sib.processor.impl.BaseDestinationHandler.handleUndeliverableMessage",
                                                  "1:2051:1.700.3.45",
                                                  this);
  
                      SibTr.exception(tc, e);
                      SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0003",
                                  new Object[] {
                                                "com.ibm.ws.sib.processor.impl.BaseDestinationHandler",
                                                "1:2058:1.700.3.45",
                                                e,
                                                getName() });
  
                      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                          SibTr.exit(tc, "handleUndeliverableMessage", e);
  
                      throw new SIResourceException(
                                      nls.getFormattedMessage(
                                                              "INTERNAL_MESSAGING_ERROR_CWSIP0003",
                                                              new Object[] {
                                                                            "com.ibm.ws.sib.processor.impl.BaseDestinationHandler",
                                                                            "1:2070:1.700.3.45",
                                                                            e,
                                                                            getName() },
                                                              null),
                                      e);
                  }
  
                  try
                  {
                      if (tranCreated)
                          ((LocalTransaction) tran).commit();
                  } catch (SIException e)
                  {
                      FFDCFilter.processException(
                                                  e,
                                                  "com.ibm.ws.sib.processor.impl.BaseDestinationHandler.handleUndeliverableMessage",
                                                  "1:2087:1.700.3.45",
                                                  this);
  
                      SibTr.exception(tc, e);
                      SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                                  new Object[] {
                                                "com.ibm.ws.sib.processor.impl.BaseDestinationHandler",
                                                "1:2094:1.700.3.45",
                                                e });
  
                      /* Persist operation FAILED therefore throw exception */
                      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                          SibTr.exit(tc, "handleUndeliverableMessage", e);
  
                      if (e instanceof SIRollbackException)
                          tran = null;
  
                      throw new SIResourceException(
                                      nls.getFormattedMessage(
                                                              "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                                                              new Object[] {
                                                                            "com.ibm.ws.sib.processor.impl.BaseDestinationHandler",
                                                                            "1:2109:1.700.3.45",
                                                                            e },
                                                              null),
                                      e);
                  }
              }
              else if (rc == UndeliverableReturnCode.BLOCK
                       || rc == UndeliverableReturnCode.ERROR)
              {
                  // Message could not be delivered. Unlock the message to make it available to other
                  // consumers
                  if (tranCreated)
                      handleRollback((LocalTransaction) tran);
              }
          } catch (SIResourceException e)
          {
              // No FFDC code needed
              if (tranCreated)
                  handleRollback((LocalTransaction) tran);
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              {
                  SibTr.exception(tc, e);
                  SibTr.exit(tc, "handleUndeliverableMessage", e);
              }
  
              throw e;
          } catch (RuntimeException e)
          {
              // FFDC
              FFDCFilter.processException(
                                          e,
                                          "com.ibm.ws.sib.processor.impl.BaseDestinationHandler.handleUndeliverableMessage",
                                          "1:2145:1.700.3.45",
                                          this);
  
              if (tranCreated)
                  handleRollback((LocalTransaction) tran);
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              {
                  SibTr.exception(tc, e);
                  SibTr.exit(tc, "handleUndeliverableMessage", e);
              }
  
              // 533027 Throwing a runtime exception out of this code is not appropriate,
              // as we do not want our caller to fail because of an unexpected condition
              // encountered while sending a message to the exception destination.
              // In particular, exceptions generated within processor and thrown across
              // message store boundaries (from inside callbacks) show up as runtime
              // exceptions at this level.
              throw new SIResourceException(
                              nls.getFormattedMessage(
                                                      "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                                                      new Object[] {
                                                                    "com.ibm.ws.sib.processor.impl.BaseDestinationHandler",
                                                                    "1:2168:1.700.3.45",
                                                                    e },
                                                      null),
                              e);
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "handleUndeliverableMessage", rc);
  
          return rc;
  
      }