docs: protected SIDestinationAddress getProducerSIDestinationAddress() throws JMSException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "getProducerSIDestinationAddress");
  
          if (producerDestinationAddress == null) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(this, tc, "No cached value");
  
              StringArrayWrapper frp = (StringArrayWrapper) properties.get(FORWARD_ROUTING_PATH);
              if (frp != null) {
                  // There is an actual forward routing path to investigate.
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(this, tc, "Obtain from the frp data.");
                  producerDestinationAddress = frp.getProducerSIDestAddress();
              }
  
              if (producerDestinationAddress == null) {
  
                  // Set up the producer address from the big destination info.
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(this, tc, "Either FRP was empty, or no FRP at all - create from big dest info.");
  
                  // Establish whether this producer should be scoped to a local queue point only.
                  boolean localOnly = isLocalOnly();
  
                  // This variable should be initialised already since it is set up in the static
                  // init for the class, which must have been run by the time we get to access it.
                  producerDestinationAddress = JmsMessageImpl.destAddressFactory.createSIDestinationAddress(getProducerDestName(), localOnly, getBusName());
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(this, tc, "getProducerSIDestinationAddress", producerDestinationAddress);
          return producerDestinationAddress;
      }