docs: @Override
      public synchronized List<String> lookup(QName serviceName, SLPropertiesMatcher matcher)
              throws ServiceLocatorException, InterruptedException {
  
          if (LOG.isLoggable(Level.FINE)) {
              LOG.fine("Looking up endpoints of service " + serviceName + "...");
          }
  
          List<String> liveEndpoints;
  
          RootNode rootNode = getBackend().connect();
          ServiceNode serviceNode = rootNode.getServiceNode(serviceName);
          if (serviceNode.exists()) {
              liveEndpoints = new ArrayList<String>();
              List<EndpointNode> endpointNodes = serviceNode.getEndPoints();
  
              for (EndpointNode endpointNode : endpointNodes) {
  
                  if (endpointNode.isLive()) {
                      byte[] content = endpointNode.getContent();
                      SLEndpoint endpoint = transformer.toSLEndpoint(serviceName, content, true);
                      SLProperties props = endpoint.getProperties();
  
                      if (LOG.isLoggable(Level.FINE)) {
                          StringBuilder sb = new StringBuilder();
                          for (String prop : props.getPropertyNames()) {
                              sb.append(prop + " : ");
                              for (String value : props.getValues(prop)) {
                                  sb.append(value + " ");
                              }
                              sb.append("\n");
                          }
                          LOG.fine("Lookup of service " + serviceName + " props = " + sb.toString());
                          LOG.fine("matcher = " + matcher.toString());
                      }
                      if (matcher.isMatching(props)) {
                          liveEndpoints.add(endpointNode.getEndpointName());
                          if (LOG.isLoggable(Level.FINE))
                              LOG.fine("matched =  " + endpointNode.getEndpointName());
                      } else if (LOG.isLoggable(Level.FINE))
                          LOG.fine("not matched =  " + endpointNode.getEndpointName());
  
                  }
              }
          } else {
              if (LOG.isLoggable(Level.FINE)) {
                  LOG.fine("Lookup of service " + serviceName + " failed, service is not known.");
              }
              liveEndpoints = Collections.emptyList();
          }
          return liveEndpoints;
      }