HeaderParser { 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; } private  HeaderParser(); static List<PathElement> parseHeader(String header);  }
@Test public void testMethodWithMultipleParameters() { String header = "javax.ws.rs.client.FactoryFinder#find(java.lang.String," + "java.lang.String),javax.ws.rs.ext.FactoryFinder#find(java.lang.String,java" + ".lang.String) ,javax.ws.rs.other.FactoryFinder#find(java.lang.String,java" + ".lang.String)"; List<HeaderParser.PathElement> pathElements = HeaderParser.parseHeader(header); assertEquals(3, pathElements.size()); assertEquals(pathElements.get(0).getName(), "javax.ws.rs.client.FactoryFinder#find(java.lang.String,java.lang.String)"); assertEquals(pathElements.get(1).getName(), "javax.ws.rs.ext.FactoryFinder#find(java.lang.String,java.lang.String)"); assertEquals(pathElements.get(2).getName(), "javax.ws.rs.other.FactoryFinder#find(java.lang.String,java.lang.String)"); }