docs: @Override
      public final void handleRequest(RESTRequest request, RESTResponse response) throws IOException {
          String path = request.getPath();
          final boolean trace = TraceComponent.isAnyTracingEnabled();
          if (trace && tc.isEntryEnabled())
              Tr.entry(this, tc, "handleRequest", path); // /apiRoot/{elementName}/{uid}
  
          // TODO would like to do the following, but cannot figure out how to get path parameters with %2F (/) in values from being considered separate path parameter values
          //String uid = request.getPathVariable("uid");
          //String elementName = request.getPathVariable("elementName");
  
          String apiRoot = getAPIRoot();
          String uid = null;
          int endElementName = path.indexOf('/', apiRoot.length() + 1);
          if (endElementName < 0) { // uid not specified
              endElementName = path.length();
          } else {
              uid = URLDecoder.decode(path.substring(endElementName + 1), "UTF-8");
              if (uid.length() == 0)
                  uid = null;
          }
          String elementName = URLDecoder.decode(path.substring(apiRoot.length() + 1, endElementName), "UTF-8");
  
          StringBuilder filter = new StringBuilder("(&");
          if (uid != null && (uid.startsWith(elementName + "[default-") || uid.matches(".*/.*\\[.*\\].*")))
              filter.append(FilterUtils.createPropertyFilter("config.displayId", uid));
          else if (elementName.length() > 0) {
              // If an element name was specified, ensure the filter matches the requested elementName exactly
              filter.append("(|(config.displayId=*" + elementName + "[*)(config.displayId=*" + elementName + "))"); // TODO either check elementName for invalid chars or use something similar to createPropertyFilter, but preserving the * characters
              if (uid != null)
                  filter.append(FilterUtils.createPropertyFilter("id", uid));
          } else {
              filter.append("(config.displayId=*)");
              if (uid != null)
                  filter.append(FilterUtils.createPropertyFilter("id", uid));
          }
  
          // Filter by query parameters
          for (Map.Entry<String, String[]> param : request.getParameterMap().entrySet()) {
              String key = param.getKey();
              if (!filterBy(key) || "_".equals(key)) // Workaround for unwanted _ parameter that is appended by API Discovery
                  continue;
              String[] values = param.getValue();
              if (values.length > 1)
                  filter.append("(|");
              for (String value : values)
                  filter.append(FilterUtils.createPropertyFilter(key, value));
              if (values.length > 1)
                  filter.append(')');
          }
          filter.append(')');
  
          if (trace && tc.isDebugEnabled())
              Tr.debug(this, tc, "filter", filter);
  
          BundleContext bundleContext = FrameworkUtil.getBundle(getClass()).getBundleContext();
          ServiceReference<ConfigurationAdmin> configAdminRef = bundleContext.getServiceReference(ConfigurationAdmin.class);
          ConfigurationAdmin configAdmin = bundleContext.getService(configAdminRef);
  
          Configuration[] configurations;
          try {
              configurations = configAdmin.listConfigurations(filter.toString());
          } catch (InvalidSyntaxException x) {
              configurations = null; // same error handling as not found
          }
  
          TreeMap<String, Dictionary<String, Object>> configMap = new TreeMap<String, Dictionary<String, Object>>();
  
          if (configurations != null)
              for (Configuration c : configurations) {
                  Dictionary<String, Object> props = c.getProperties();
                  String configDisplayId = (String) props.get("config.displayId");
                  Dictionary<String, Object> previousProps = configMap.put(configDisplayId, props);
                  // Config involving the use of ibm:extends (such as JCA config) is a special case where the
                  // config service internally uses two configurations with the same config.displayId,
                  // in which case we want to choose the one that corresponds to the OSGi service component.
                  // It can be identified by the ibm.extends.source.factoryPid attribute.
                  if (previousProps != null && previousProps.get("ibm.extends.source.factoryPid") != null)
                      configMap.put(configDisplayId, previousProps); // put the previous entry back because it had ibm.extends.source.factoryPid
              }
  
          Object result;
          if (uid == null) { // apply to all instances of element type
              ArrayList<Object> results = new ArrayList<Object>();
              for (Map.Entry<String, Dictionary<String, Object>> entry : configMap.entrySet()) {
                  // Filter out entries for nested configurations that we aren't trying to return. Example: dataSource[ds1]/connectionManager[default-0]
                  String configDisplayId = entry.getKey();
                  String nestedElementName = getDeepestNestedElementName(configDisplayId);
                  if (nestedElementName == null || nestedElementName.equals(elementName)) {
                      Dictionary<String, Object> configProps = entry.getValue();
                      String uniqueId = configDisplayId.endsWith("]") ? getUID(configDisplayId, (String) configProps.get("id")) : null;
                      String id = (String) configProps.get("id");
                      Object r = handleSingleInstance(request, uniqueId, id == null || isGenerated(id) ? null : id, configProps);
                      if (r != null)
                          results.add(r);
                  }
              }
              result = results;
          } else if (configMap.isEmpty()) {
              result = null;
          } else if (configMap.size() == 1) {
              Map.Entry<String, Dictionary<String, Object>> entry = configMap.firstEntry();
              String configDisplayId = entry.getKey();
              Dictionary<String, Object> configProps = entry.getValue();
              String uniqueId = getUID(configDisplayId, (String) configProps.get("id"));
              if (uid.equals(uniqueId)) { // require the correct uid
                  String id = (String) configProps.get("id");
                  result = handleSingleInstance(request, uid, id == null || isGenerated(id) ? null : id, entry.getValue());
              } else // TODO need correct error message
                  result = handleError(request, null, "Unique identifier " + uid + " is not valid. Expected: " + uniqueId);
          } else {
              result = handleError(request, null, "multiple found");
          }
  
          // TODO better message for instance not found?
          if (result == null)
              result = handleError(request, uid, "Did not find any configured instances of " + elementName + " matching the request");
  
          populateResponse(response, result);
  
          if (trace && tc.isEntryEnabled())
              Tr.exit(this, tc, "handleRequest");
      }