docs: private void configureDestinationFromMap(JmsDestination dest, Map<String,String> props, String uri) throws JMSException {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "configureDestinationFromMap", new Object[]{dest, props, uri});
  
      // Iterate over the map, retrieving the name and value parts of the NVP.
      Iterator<Map.Entry<String,String>> iter = props.entrySet().iterator();
      while (iter.hasNext()) {
        Map.Entry<String,String> nextProp = iter.next();
        String namePart = nextProp.getKey();
        String valuePart = nextProp.getValue();
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "name " + namePart + ", value " + valuePart);
  
        // Here we want to try and get the class for the value part or a property name.
        // If this returns null, we can silently ignore the property because we know
        // that it in not a valid property to set on a Destination object.
        // We also use a boolean flag so that we don't then try to process this property again below.
        boolean propertyIsSettable = true;
        Class cl = MsgDestEncodingUtilsImpl.getPropertyType(namePart);
        if (cl == null) {
          propertyIsSettable = false;
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Ignoring invalid property " + namePart);
        }
  
        // Now we know they're legal, we can process the name and value pairs
        // Determine the type of the value using a dynamic lookup on the name.
        // This uses the utility methods in MsgDestEncodingUtilsImpl.
        // We only want to perform this step if an exception was not throw in the code block above.
        if (propertyIsSettable) {
          try {
            // Convert the property to the right type of object
            Object valueObject = MsgDestEncodingUtilsImpl.convertPropertyToType(namePart, valuePart);
            if (namePart.equals(TOPIC_NAME)) {
              // special case topicName, as it may be null, and the reflection stuff can't cope
              if (dest instanceof JmsTopicImpl) {
                ((JmsTopicImpl) dest).setTopicName((String) valueObject);
              }
              else {
                // generate an internal error
                throw (JMSException) JmsErrorUtils.newThrowable(
                  JMSException.class,
                  "INTERNAL_ERROR_CWSIA0386",
                  null,
                  tc);
              }
            }
            else {
              // call setDestinationProperty(JmsDestination dest, String propName, String propVal)
              MsgDestEncodingUtilsImpl.setDestinationProperty(dest, namePart, valueObject);
            }
          }
          catch (NumberFormatException nfe) {
            // No FFDC code needed
            if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.exception(tc, nfe);
            // d238447 FFDC review.
            // Updated during d272111. NFEs can be generated by supplying badly formed URIs from
            // user code, so don't FFDC.
            throw (JMSException) JmsErrorUtils.newThrowable(
              JMSException.class,
              "INVALID_URI_ELEMENT_CWSIA0384",
              new Object[] { namePart, valuePart, uri },
              nfe, null, null, // nulls = no ffdc
              tc);
          }
          catch (JMSException jmse) {
            // No FFDC code needed
            if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
              SibTr.exception(tc, jmse);
            throw (JMSException) JmsErrorUtils.newThrowable(
              JMSException.class,
              "INVALID_URI_ELEMENT_CWSIA0384",
              new Object[] { namePart, valuePart, uri },
              tc);
          }
        }
  
      }
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "configureDestinationFromMap");
    }