You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by no...@apache.org on 2010/03/24 17:28:35 UTC

svn commit: r927113 - in /incubator/aries/trunk/jndi/jndi-url/src: main/java/org/apache/aries/jndi/url/ test/java/org/apache/aries/jndi/url/

Author: not
Date: Wed Mar 24 16:28:34 2010
New Revision: 927113

URL: http://svn.apache.org/viewvc?rev=927113&view=rev
Log:
ARIES-128 Updated so you can do new InitialContext().lookup("osgi:service").lookup("java.lang.Runnable") and get something back.

Modified:
    incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/OsgiName.java
    incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/OsgiNameParser.java
    incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/ServiceRegistryContext.java
    incubator/aries/trunk/jndi/jndi-url/src/test/java/org/apache/aries/jndi/url/OsgiNameParserTest.java
    incubator/aries/trunk/jndi/jndi-url/src/test/java/org/apache/aries/jndi/url/ServiceRegistryContextTest.java

Modified: incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/OsgiName.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/OsgiName.java?rev=927113&r1=927112&r2=927113&view=diff
==============================================================================
--- incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/OsgiName.java (original)
+++ incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/OsgiName.java Wed Mar 24 16:28:34 2010
@@ -142,13 +142,21 @@ public final class OsgiName extends Comp
     
     StringBuilder builder = new StringBuilder();
     
-    while (parts.hasMoreElements()) {
-      builder.append(parts.nextElement());
-      builder.append('/');
-    }
+    if (parts.hasMoreElements()) {
+
+      while (parts.hasMoreElements()) {
+        builder.append(parts.nextElement());
+        builder.append('/');
+      }
     
-    builder.deleteCharAt(builder.length() - 1);
+      builder.deleteCharAt(builder.length() - 1);
+    }
     
     return builder.toString();
   }
+
+  public boolean hasInterface()
+  {
+    return size() > 1;
+  }
 }
\ No newline at end of file

Modified: incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/OsgiNameParser.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/OsgiNameParser.java?rev=927113&r1=927112&r2=927113&view=diff
==============================================================================
--- incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/OsgiNameParser.java (original)
+++ incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/OsgiNameParser.java Wed Mar 24 16:28:34 2010
@@ -39,8 +39,6 @@ public final class OsgiNameParser implem
   {
     OsgiName result = new OsgiName(name);
     
-    if (result.size() < 2) throw new InvalidNameException(name);
-    
     String urlScheme = result.getScheme();
     String schemePath = result.getSchemePath();
     
@@ -58,10 +56,6 @@ public final class OsgiNameParser implem
       throw new InvalidNameException(name);
     }
     
-    if (result.getInterface() == null || result.getInterface().length() == 0) {
-      throw new InvalidNameException(name);
-    }
-    
     return result;
   }
 

Modified: incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/ServiceRegistryContext.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/ServiceRegistryContext.java?rev=927113&r1=927112&r2=927113&view=diff
==============================================================================
--- incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/ServiceRegistryContext.java (original)
+++ incubator/aries/trunk/jndi/jndi-url/src/main/java/org/apache/aries/jndi/url/ServiceRegistryContext.java Wed Mar 24 16:28:34 2010
@@ -19,10 +19,10 @@
 package org.apache.aries.jndi.url;
 
 import java.util.Hashtable;
+import java.util.Map;
 
 import javax.naming.Binding;
 import javax.naming.Context;
-import javax.naming.InvalidNameException;
 import javax.naming.Name;
 import javax.naming.NameClassPair;
 import javax.naming.NameNotFoundException;
@@ -36,6 +36,9 @@ import org.apache.aries.jndi.services.Se
  */
 public class ServiceRegistryContext extends AbstractServiceRegistryContext implements Context
 {
+  /** The parent name, if one is provided, of this context */
+  private OsgiName parentName;
+
   /**
    * Why Mr Java this class does indeed take a fine copy of the provided 
    * environment. One might imagine that it is worried that the provider is
@@ -48,6 +51,12 @@ public class ServiceRegistryContext exte
     super(environment);
   }
 
+  public ServiceRegistryContext(OsgiName validName, Map<String, Object> env) 
+  {
+    super(env);
+    parentName = validName;
+  }
+
   public NamingEnumeration<NameClassPair> list(final Name name) throws NamingException
   {
     return new ServiceRegistryListContext(env, convert(name)).list("");
@@ -55,7 +64,7 @@ public class ServiceRegistryContext exte
 
   public NamingEnumeration<NameClassPair> list(String name) throws NamingException
   {
-    return list(parser.parse(name));
+    return list(parse(name));
   }
 
   public NamingEnumeration<Binding> listBindings(final Name name) throws NamingException
@@ -65,7 +74,7 @@ public class ServiceRegistryContext exte
 
   public NamingEnumeration<Binding> listBindings(String name) throws NamingException
   {
-    return listBindings(parser.parse(name));
+    return listBindings(parse(name));
   }
 
   public Object lookup(Name name) throws NamingException
@@ -77,15 +86,19 @@ public class ServiceRegistryContext exte
     String pathFragment = validName.getSchemePath();
     String schemeName = validName.getScheme();
     
-    if (OsgiName.FRAMEWORK_PATH.equals(pathFragment) && "bundleContext".equals(validName.getServiceName())) {
-      result = ServiceHelper.getBundleContext(env);
-    } else if ((OsgiName.SERVICE_PATH.equals(pathFragment) && OsgiName.OSGI_SCHEME.equals(schemeName)) ||
-               (OsgiName.SERVICES_PATH.equals(pathFragment) && OsgiName.ARIES_SCHEME.equals(schemeName))) {
-      result = ServiceHelper.getService(validName, null, true, env);
-    } else if (OsgiName.SERVICE_LIST_PATH.equals(pathFragment)) {
-      result = new ServiceRegistryListContext(env, validName);
+    if (validName.hasInterface()) {
+      if (OsgiName.FRAMEWORK_PATH.equals(pathFragment) && "bundleContext".equals(validName.getServiceName())) {
+        result = ServiceHelper.getBundleContext(env);
+      } else if ((OsgiName.SERVICE_PATH.equals(pathFragment) && OsgiName.OSGI_SCHEME.equals(schemeName)) ||
+                 (OsgiName.SERVICES_PATH.equals(pathFragment) && OsgiName.ARIES_SCHEME.equals(schemeName))) {
+        result = ServiceHelper.getService(validName, null, true, env);
+      } else if (OsgiName.SERVICE_LIST_PATH.equals(pathFragment)) {
+        result = new ServiceRegistryListContext(env, validName);
+      } else {
+        result = null;
+      }
     } else {
-      result = null;
+      result = new ServiceRegistryContext(validName, env);
     }
     
     if (result == null) {
@@ -95,21 +108,34 @@ public class ServiceRegistryContext exte
     return result;
   }
 
-  private OsgiName convert(Name name) throws InvalidNameException
+  private OsgiName convert(Name name) throws NamingException
   {
     OsgiName result;
     
     if (name instanceof OsgiName) {
       result = (OsgiName) name;
     } else {
-      result = new OsgiName(name);
+      if (parentName != null) {
+        result = new OsgiName(parentName.toString() + "/" + name.toString());
+      } else {
+        result = (OsgiName)parser.parse(name.toString());
+      }
     }
     
     return result;
   }
-
+  
+  private Name parse(String name) throws NamingException
+  {
+    if (parentName != null) {
+        name = parentName.toString() + "/" + name;
+    }
+    
+    return parser.parse(name);
+  }
+  
   public Object lookup(String name) throws NamingException
   {
-    return lookup(parser.parse(name));
+    return lookup(parse(name));
   }
-}
\ No newline at end of file
+}

Modified: incubator/aries/trunk/jndi/jndi-url/src/test/java/org/apache/aries/jndi/url/OsgiNameParserTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jndi/jndi-url/src/test/java/org/apache/aries/jndi/url/OsgiNameParserTest.java?rev=927113&r1=927112&r2=927113&view=diff
==============================================================================
--- incubator/aries/trunk/jndi/jndi-url/src/test/java/org/apache/aries/jndi/url/OsgiNameParserTest.java (original)
+++ incubator/aries/trunk/jndi/jndi-url/src/test/java/org/apache/aries/jndi/url/OsgiNameParserTest.java Wed Mar 24 16:28:34 2010
@@ -53,6 +53,7 @@ public class OsgiNameParserTest
     checkName("osgi", "framework", "bundleContext");
     checkName("osgi","service","javax.sql.DataSource", "(osgi.jndi.servicee.name=jdbc/myDataSource)");
     checkName("osgi","service","javax.sql.DataSource", "(&(a=/b)(c=/d))");
+    checkName("osgi", "service");
   }
   
   /**
@@ -65,27 +66,6 @@ public class OsgiNameParserTest
     checkName("java","comp","env","jms","cf");
   }
   
-  /**
-   * Check that it fails if no interface name is provided.
-   * @throws NamingException
-   */
-  @Test(expected=InvalidNameException.class)
-  public void checkMissingInterface() throws NamingException
-  {
-    checkName("aries","services");
-  }
-  
-  /**
-   * Check that it fails if no interface name is provided in a subtly different
-   * way from the previous method.
-   * @throws NamingException
-   */
-  @Test(expected=InvalidNameException.class)
-  public void checkMissingInterface2() throws NamingException
-  {
-    checkName("aries","services", "");
-  }
-  
   @Test(expected=InvalidNameException.class)
   public void checkIncorrectPath() throws NamingException
   {

Modified: incubator/aries/trunk/jndi/jndi-url/src/test/java/org/apache/aries/jndi/url/ServiceRegistryContextTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jndi/jndi-url/src/test/java/org/apache/aries/jndi/url/ServiceRegistryContextTest.java?rev=927113&r1=927112&r2=927113&view=diff
==============================================================================
--- incubator/aries/trunk/jndi/jndi-url/src/test/java/org/apache/aries/jndi/url/ServiceRegistryContextTest.java (original)
+++ incubator/aries/trunk/jndi/jndi-url/src/test/java/org/apache/aries/jndi/url/ServiceRegistryContextTest.java Wed Mar 24 16:28:34 2010
@@ -125,6 +125,22 @@ public class ServiceRegistryContextTest
     Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
   }
   
+  @Test
+  public void testBaseLookup() throws NamingException
+  {
+     BundleMock mock = new BundleMock("scooby.doo", new Properties());
+        
+     Thread.currentThread().setContextClassLoader(mock.getClassLoader());
+
+     InitialContext ctx = new InitialContext();
+     
+     Context ctx2 = (Context) ctx.lookup("osgi:service");
+     
+     Runnable r = (Runnable) ctx2.lookup("java.lang.Runnable");
+     
+     assertNotNull(r);
+  }
+  
   /**
    * This test checks that we correctly register and deregister the url context
    * object factory in the service registry.