code: public static List<PathElement> parseHeader(String header) {
          List<PathElement> elements = new ArrayList<PathElement>();
          if (header == null || header.trim().length() == 0) {
              return elements;
          }
          String[] clauses = header.split(",");
          for (String clause : clauses) {
              String[] tokens = clause.split(";");
              if (tokens.length < 1) {
                  throw new IllegalArgumentException("Invalid header clause: " + clause);
              }
              PathElement elem = new PathElement(tokens[0].trim());
              elements.add(elem);
              for (int i = 1; i < tokens.length; i++) {
                  int pos = tokens[i].indexOf('=');
                  if (pos != -1) {
                      if (pos > 0 && tokens[i].charAt(pos - 1) == ':') {
                          String name = tokens[i].substring(0, pos - 1).trim();
                          String value = tokens[i].substring(pos + 1).trim();
                          elem.addDirective(name, value);
                      } else {
                          String name = tokens[i].substring(0, pos).trim();
                          String value = tokens[i].substring(pos + 1).trim();
                          elem.addAttribute(name, value);
                      }
                  } else {
                      elem = new PathElement(tokens[i].trim());
                      elements.add(elem);
                  }
              }
          }
          return elements;
      }
docs: Parse a given OSGi header into a list of paths
  
  @param header the OSGi header to parse
  @return the list of paths extracted from this header