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