docs: protected ConsumerSession createCoreConsumer(SICoreConnection _coreConn, ConsumerProperties _props) throws JMSException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "createCoreConsumer", new Object[] { _coreConn });
          ConsumerSession cs = null;
  
          JmsDestinationImpl dest = (JmsDestinationImpl) _props.getJmsDestination();
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
              SibTr.debug(this, tc, "destName: " + dest.getConsumerDestName() +
                                    " type: " + _props.getDestinationType() +
                                    " discrim: " + dest.getDestDiscrim() +
                                    " selector: " + _props.getSelector() +
                                    " reliability: " + _props.getReliability() +
                                    " noLocal: " + _props.noLocal() +
                                    " unrecovRel: " + _props.getUnrecovReliability() +
                                    " gatherMsgs: " + _props.isGatherMessages());
          try {
              // Need to create a selection criteria object for create consumer call.
              SelectionCriteria selectionCriteria = null;
              SIDestinationAddress consumerSIDA = null;
              try {
                  selectionCriteria = selectionCriteriaFactory.createSelectionCriteria(dest.getDestDiscrim(), // discriminator (topic)
                                                                                       _props.getSelector(), // selector string
                                                                                       SelectorDomain.JMS // selector domain
                  );
                  // The MessageProcessor resolves the bus field of the SIDA object that is passed
                  // in to createConsumerSession, which can lead to unusual behaviour since we have
                  // been passing this by reference rather than copying it. Taking a copy here
                  // avoids the 'back-door' populating of the object, and is still outside the mainline
                  // send path.
                  SIDestinationAddress originalConsumerProps = dest.getConsumerSIDestinationAddress();
                  consumerSIDA = JmsMessageImpl.destAddressFactory.createSIDestinationAddress(originalConsumerProps.getDestinationName(),
                                                                                              ((JsDestinationAddress) originalConsumerProps).isLocalOnly(),
                                                                                              originalConsumerProps.getBusName());
              } catch (SIErrorException sice) {
                  // No FFDC code needed
                  // d222942 review. SIErrorException are "should never happen" cases, so default message ok.
                  // d238447 FFDC review. Generate FFDC.
                  throw (JMSException) JmsErrorUtils.newThrowable(JMSException.class,
                                                                  "EXCEPTION_RECEIVED_CWSIA0085",
                                                                  new Object[] { sice, "JmsMsgConsumerImpl.createCoreConsumer" },
                                                                  sice,
                                                                  "JmsMsgConsumerImpl.createCoreConsumer#1",
                                                                  this,
                                                                  tc
                                  );
              }
  
              if (_props.getSubName() != null) {
                  //Getting the final non durable subscription id by calling getCoreDurableSubName
                  // if subname is 'nondurSub1' and clientid is 'cid', the method getCoreDurableSubName 
                  // returns subscriber id as 'nondurSub1##cid'
                  String subscriptionName = JmsInternalsFactory.getSharedUtils().getCoreDurableSubName(_props.getClientID(), _props.getSubName());
  
                  //createSharedConsumerSession is newly introduced SPI for non-durable shared subscriptions.
                  cs = _coreConn.createSharedConsumerSession(subscriptionName,
                                                             consumerSIDA,
                                                             _props.getDestinationType(),
                                                             selectionCriteria,
                                                             _props.getReliability(),
                                                             _props.readAhead(),
                                                             true,
                                                             _props.noLocal(),
                                                             _props.getUnrecovReliability(), /* recoverableExpress */
                                                             false, // bifurcatable
                                                             null, // alternateUserID
                                                             true, // ignoreInitialIndoubts
                                                             _props.isGatherMessages(),
                                                             null // msg control props
                  );
              } else {
  
                  cs = _coreConn.createConsumerSession(consumerSIDA,
                                                       _props.getDestinationType(),
                                                       selectionCriteria,
                                                       _props.getReliability(),
                                                       _props.readAhead(),
                                                       _props.noLocal(),
                                                       _props.getUnrecovReliability(), /* recoverableExpress */
                                                       false, // bifurcatable
                                                       null, // alternateUserID
                                                       true, // ignoreInitialIndoubts
                                                       _props.isGatherMessages(),
                                                       null // msg control props
                  );
              }
          } catch (SISelectorSyntaxException e) {
              // No FFDC code needed
              // d238447 FFDC review. Bad selector is an app' error, so no FFDC.
              throw (InvalidSelectorException) JmsErrorUtils.newThrowable(InvalidSelectorException.class,
                                                                          "INVALID_SELECTOR_CWSIA0083",
                                                                          null,
                                                                          e,
                                                                          null, // null probeId = no FFDC.
                                                                          this,
                                                                          tc
                              );
          } catch (SINotAuthorizedException sidnfe) {
              // No FFDC code needed
              // d238447 FFDC review: Not auth is an app/config error, so no FFDC.
              throw (JMSSecurityException) JmsErrorUtils.newThrowable(JMSSecurityException.class,
                                                                      "CONSUMER_AUTH_ERROR_CWSIA0090",
                                                                      new Object[] { dest.getDestName() },
                                                                      sidnfe,
                                                                      null, // null probeId = no FFDC
                                                                      this,
                                                                      tc
                              );
          } catch (SINotPossibleInCurrentConfigurationException dwte) {
              // No FFDC code needed
              // This was SIDestinationWrongTypeException, now also gets DestNotFound
              // d238447 FFDC review. Both are app/config errors, so no FFDC.
              String msgKey = "MC_CREATE_FAILED_CWSIA0086";
              throw (InvalidDestinationException) JmsErrorUtils.newThrowable(InvalidDestinationException.class,
                                                                             msgKey,
                                                                             new Object[] { dest },
                                                                             dwte,
                                                                             null, // null probeId = no FFDC
                                                                             this,
                                                                             tc
                              );
          } catch (SITemporaryDestinationNotFoundException e) {
              // No FFDC code needed
              // d238447 FFDC reveiw. App error, no FFDC.
              String msgKey = "MC_CREATE_FAILED_CWSIA0086";
              throw (InvalidDestinationException) JmsErrorUtils.newThrowable(InvalidDestinationException.class,
                                                                             msgKey,
                                                                             new Object[] { dest },
                                                                             e,
                                                                             null, // null probeId = no FFDC
                                                                             this,
                                                                             tc
                              );
          } catch (SIIncorrectCallException e) {
              // No FFDC code needed
              // d222942 review. Default message ok.
              // d238447 FFDC review. Incorrect call would seem to be an internal error, so generate FFDC.
              throw (JMSException) JmsErrorUtils.newThrowable(JMSException.class,
                                                              "EXCEPTION_RECEIVED_CWSIA0085",
                                                              new Object[] { e, "JmsMsgConsumerImpl.createCoreConsumer" },
                                                              e,
                                                              "JmsMsgConsumerImpl.createCoreConsumer#6",
                                                              this,
                                                              tc
                              );
          } catch (SIException sice) {
              // No FFDC code needed
              // d222942 review.
              // Exceptions thrown from createConsumerSession which can be handled with default message:
              //SIConnectionUnavailableException, SIConnectionDroppedException,
              //SIResourceException, SIConnectionLostException, SILimitExceededException.
              // d238447 FFDC Review. These are either external errors, or should already have been FFDCd,
              //   so don't FFDC here.
              throw (JMSException) JmsErrorUtils.newThrowable(JMSException.class,
                                                              "EXCEPTION_RECEIVED_CWSIA0085",
                                                              new Object[] { sice, "JmsMsgConsumerImpl.createCoreConsumer" },
                                                              sice,
                                                              null, // null probeId = no FFDC
                                                              this,
                                                              tc
                              );
          } catch (SIErrorException sie) {
              throw (JMSException) JmsErrorUtils.newThrowable(JMSException.class,
                                                              "EXCEPTION_RECEIVED_CWSIA0085",
                                                              new Object[] { sie, "JmsMsgConsumerImpl.createCoreConsumer" },
                                                              sie,
                                                              null, // null probeId = no FFDC
                                                              this,
                                                              tc
                              );
  
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(this, tc, "createCoreConsumer", cs);
          return cs;
  
      }