docs: public static Map<String, String> getURIProps(UriBuilder uriBuilder) {
          boolean debug = tc.isDebugEnabled() && TraceComponent.isAnyTracingEnabled();
          if (configInfo.isEmpty()) {
              if (debug) {
                  Tr.debug(tc, "getUriprops is empty, return null");
              }
              return null;
          }
  
          String uri = uriBuilder.build().toString();
          // look in the cache in case we've resolved this before
          synchronized (resolvedConfigInfo) {
              Map<String, String> props = resolvedConfigInfo.get(uri);
              if (props != null) {
                  if (debug) {
                      Tr.debug(tc, "getUriprops cache hit, uri: " + uri + "props: " + props);
                  }
                  return (props.isEmpty() ? null : props);
              }
          }
  
          // at this point we might have to merge something, set up a new hashmap to hold the results
          HashMap<String, String> mergedProps = new HashMap<>();
          synchronized (JAXRSClientConfigHolder.class) {
              // try for exact match
              Map<String, String> props = configInfo.get(uri);
              if (props != null) {
                  if (debug) {
                      Tr.debug(tc, "getUriprops exact match: " + uri);
                  }
                  mergedProps.putAll(props);
              }
          }
  
          if (!wildcardsPresentInConfigInfo) {
              if (debug) {
                  Tr.debug(tc, "getUriprops no wildcards, cache and return what we've got: " + mergedProps);
              }
              synchronized (JAXRSClientConfigHolder.class) {
                  resolvedConfigInfo.put(uri, mergedProps);
              }
              return (mergedProps.isEmpty() ? null : mergedProps);
          }
  
          // if a wildcard match exists, merge it to what we have already.
          if (debug) {
              Tr.debug(tc, "begin wildcard search");
          }
          // try to find a match from wildcards
          synchronized (JAXRSClientConfigHolder.class) {
              Iterator<String> it = configInfo.keySet().iterator();
              String trimmedKey = null;
              while (it.hasNext()) {
                  String key = it.next();
                  if (key.endsWith("*")) {
                      trimmedKey = key.substring(0, key.length() - 1);
                  } else {
                      continue;
                  }
                  // if we got here, we have a wildcard
                  // since configinfo is a sorted treemap,
                  // general results should come first, followed by more specific results
                  // if we have two keys of same length and both match, last one wins
                  if (uri.startsWith(trimmedKey)) {
                      if (debug) {
                          Tr.debug(tc, "getUriprops match = " + key + ", will merge these props: " + configInfo.get(key));
                      }
                      mergedProps.putAll(configInfo.get(key)); // merge props for this wildcard.
                  }
              }
              // at this point everything has been merged,  cache and return what we have.
              // if there was no match anywhere, this is an empty map.
              resolvedConfigInfo.put(uri, mergedProps);
              if (debug) {
                  Tr.debug(tc, "getUriprops final result for uri: " + uri + "values: " + mergedProps);
              }
              return (mergedProps.isEmpty() ? null : mergedProps);
          } // end sync block
      }