You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by da...@apache.org on 2015/10/13 09:33:06 UTC
svn commit: r1708295 - in /aries/trunk/spi-fly/spi-fly-core/src:
main/java/org/apache/aries/spifly/HeaderParser.java
test/java/org/apache/aries/spifly/HeaderParserTest.java
Author: davidb
Date: Tue Oct 13 07:33:05 2015
New Revision: 1708295
URL: http://svn.apache.org/viewvc?rev=1708295&view=rev
Log:
ARIES-953 SPIFly: SPI-Consumer breaks when method has multiple parameters
Patch applied on behalf of Kevin Milburn and Anne-Catherine Courouppe with many thanks!
Added:
aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/HeaderParserTest.java
Modified:
aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/HeaderParser.java
Modified: aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/HeaderParser.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/HeaderParser.java?rev=1708295&r1=1708294&r2=1708295&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/HeaderParser.java (original)
+++ aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/HeaderParser.java Tue Oct 13 07:33:05 2015
@@ -26,11 +26,11 @@ import java.util.Map;
/**
* Utility class to parse a standard OSGi header with paths.
*
- * Stolen from Aries Blueprint Core (blueprint.utils). Need to give it back!
+ * Stolen from Aries Blueprint Core (blueprint.utils). Need to give it back!
*/
public class HeaderParser {
private HeaderParser() {}
-
+
/**
* Parse a given OSGi header into a list of paths
*
@@ -42,7 +42,7 @@ public class HeaderParser {
if (header == null || header.trim().length() == 0) {
return elements;
}
- String[] clauses = header.split(",");
+ String[] clauses = header.split(",(?![^\\(\\)]*(\\)))");
for (String clause : clauses) {
String[] tokens = clause.split(";");
if (tokens.length < 1) {
@@ -72,44 +72,44 @@ public class HeaderParser {
}
public static class PathElement {
-
+
private String path;
private Map<String, String> attributes;
private Map<String, String> directives;
-
+
public PathElement(String path) {
this.path = path;
this.attributes = new HashMap<String, String>();
this.directives = new HashMap<String, String>();
}
-
+
public String getName() {
return this.path;
}
-
+
public Map<String, String> getAttributes() {
return attributes;
}
-
+
public String getAttribute(String name) {
return attributes.get(name);
}
-
+
public void addAttribute(String name, String value) {
attributes.put(name, value);
}
-
+
public Map<String, String> getDirectives() {
return directives;
}
-
+
public String getDirective(String name) {
return directives.get(name);
}
-
+
public void addDirective(String name, String value) {
directives.put(name, value);
- }
-
+ }
+
}
}
Added: aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/HeaderParserTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/HeaderParserTest.java?rev=1708295&view=auto
==============================================================================
--- aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/HeaderParserTest.java (added)
+++ aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/HeaderParserTest.java Tue Oct 13 07:33:05 2015
@@ -0,0 +1,25 @@
+package org.apache.aries.spifly;
+
+import junit.framework.TestCase;
+import org.junit.Test;
+
+import java.util.List;
+
+public class HeaderParserTest extends TestCase {
+
+ @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)");
+ }
+
+}
\ No newline at end of file