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.