diff options
author | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2010-09-08 05:55:44 +0000 |
---|---|---|
committer | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2010-09-08 05:55:44 +0000 |
commit | a738b52d8257db36862548b699f81292d9ea0a0d (patch) | |
tree | 5e9f658e6d34758c47525a18861e25306ad5f405 | |
parent | eb7dc287d00e10e561043e859924ebc656235f83 (diff) |
Tidy up binding.rest osgi enablement
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@993613 13f79535-47bb-0310-9956-ffa450edef68
12 files changed, 112 insertions, 330 deletions
diff --git a/sca-java-2.x/trunk/distribution/all/manifests/wink-server-1.1.1-incubating.MF b/sca-java-2.x/trunk/distribution/all/manifests/wink-server-1.1.1-incubating.MF deleted file mode 100644 index befcf38e97..0000000000 --- a/sca-java-2.x/trunk/distribution/all/manifests/wink-server-1.1.1-incubating.MF +++ /dev/null @@ -1,152 +0,0 @@ -Manifest-Version: 1.0
-Archiver-Version: Plexus Archiver
-Created-By: 1.6.0_20 (Apple Inc.)
-Built-By: lresende
-Build-Jdk: 1.6.0_20
-Specification-Title: Apache Wink Server
-Specification-Version: 1.1.1-incubating
-Specification-Vendor: The Apache Software Foundation
-Implementation-Title: Apache Wink Server
-Implementation-Version: 1.1.1-incubating
-Implementation-Vendor-Id: org.apache.wink
-Implementation-Vendor: The Apache Software Foundation
-X-Compile-Source-JDK: 1.5
-X-Compile-Target-JDK: 1.5
-Export-Package: META-INF,org.apache.wink.server.internal.resources;use
- s:="org.apache.wink.common.internal.runtime,javax.ws.rs,org.apache.wi
- nk.common,org.apache.wink.common.internal.uritemplate,org.apache.wink
- .common.internal.uri,org.apache.wink.common.internal.utils,org.apache
- .wink.server.internal.registry,org.apache.wink.common.internal.regist
- ry.metadata,javax.ws.rs.core,org.apache.wink.common.model.atom,org.ap
- ache.wink.common.categories,org.apache.wink.common.internal.i18n,org.
- apache.wink.common.model.app,org.apache.wink.common.internal.lifecycl
- e";version="1.1.1.incubating",org.apache.wink.server.internal.provide
- rs.entity.html;uses:="org.apache.wink.common.model.synd,javax.servlet
- ,javax.ws.rs,javax.ws.rs.ext,javax.ws.rs.core,javax.servlet.http,org.
- apache.wink.common.internal.model,org.apache.commons.lang,org.apache.
- wink.common.internal.i18n";version="1.1.1.incubating",org.apache.wink
- .server.internal.application;uses:="org.apache.wink.server.internal.r
- egistry,org.apache.wink.common.internal.registry.metadata,org.apache.
- wink.common.internal.registry,org.apache.wink.common.internal.i18n,or
- g.apache.wink.common,org.slf4j,javax.ws.rs.core,org.apache.wink.commo
- n.internal.application,org.apache.wink.server.internal.utils,javax.se
- rvlet";version="1.1.1.incubating",org.apache.wink.server.utils;uses:=
- "org.apache.wink.common,javax.servlet,org.apache.wink.server.internal
- ,javax.ws.rs.core";version="1.1.1.incubating",org.apache.wink.server.
- internal.handlers;uses:="org.apache.wink.common.http,org.apache.wink.
- server.handlers,org.apache.wink.common.internal.i18n,javax.ws.rs.core
- ,org.apache.wink.server.internal.registry,org.apache.wink.common.inte
- rnal.registry.metadata,org.apache.wink.common.internal.registry,org.a
- pache.wink.common,org.slf4j,org.apache.wink.common.internal.uritempla
- te,javax.ws.rs,org.apache.wink.server.internal.contexts,javax.servlet
- ,javax.servlet.http,org.apache.wink.common.internal.runtime,javax.ws.
- rs.ext,javax.activation,org.apache.wink.common.internal,org.apache.wi
- nk.common.internal.utils,org.apache.wink.server.internal,org.apache.w
- ink.server.utils,org.apache.wink.common.internal.contexts,org.apache.
- wink.server.internal.utils";version="1.1.1.incubating",org.apache.win
- k.server.internal;uses:="javax.ws.rs,org.apache.wink.server.internal.
- application,org.apache.wink.common.internal.registry,org.apache.wink.
- common.internal.i18n,org.slf4j,org.apache.commons.lang,javax.servlet,
- org.apache.wink.common.internal.application,org.apache.wink.server.in
- ternal.handlers,org.apache.wink.common.internal.utils,org.apache.wink
- .common.internal.lifecycle,org.apache.wink.server.internal.registry,o
- rg.apache.wink.server.handlers,org.apache.wink.common.internal,javax.
- ws.rs.core,org.apache.wink.common.internal.runtime,org.apache.wink.se
- rver.internal.resources,org.apache.wink.server.utils,org.apache.wink.
- common,javax.servlet.http";version="1.1.1.incubating",org.apache.wink
- .server.internal.utils;uses:="org.apache.wink.server.utils,org.apache
- .wink.common.internal.uritemplate,org.apache.wink.common.internal.uti
- ls,org.apache.wink.server.internal.handlers,org.apache.wink.server.in
- ternal.registry,org.apache.wink.common.model.synd,org.apache.wink.ser
- ver.handlers,org.apache.wink.common.internal,javax.ws.rs.core,javax.s
- ervlet,org.slf4j,org.apache.wink.common.internal.registry.metadata";v
- ersion="1.1.1.incubating",org.apache.wink.server.internal.registry;us
- es:="org.apache.wink.common.internal.registry.metadata,org.apache.win
- k.common.internal.uritemplate,org.apache.wink.common.internal.lifecyc
- le,org.apache.wink.common,org.apache.wink.common.internal.i18n,org.sl
- f4j,javax.ws.rs,org.apache.wink.common.internal.application,org.apach
- e.wink.common.internal.utils,org.apache.wink.common.http,javax.ws.rs.
- core,org.apache.wink.common.internal.registry,javax.ws.rs.ext,org.apa
- che.wink.common.internal.runtime,org.apache.wink.common.internal.uri,
- javax.servlet.http,org.apache.wink.server.internal.handlers,org.apach
- e.wink.common.internal,org.apache.wink.server.internal.contexts";vers
- ion="1.1.1.incubating",org.apache.wink.server.internal.servlet;uses:=
- "javax.servlet,org.apache.wink.server.internal,org.slf4j,javax.servle
- t.http,org.apache.wink.common.internal.i18n,org.apache.wink.common.in
- ternal.registry,org.apache.wink.common.internal.uritemplate,org.apach
- e.wink.common.internal.utils,org.apache.wink.common.internal.model.ad
- min,org.apache.wink.common.http,org.apache.wink.server.internal.regis
- try,org.apache.wink.common.internal.registry.metadata,javax.xml.bind,
- javax.ws.rs.core,org.apache.wink.common.internal.properties,org.apach
- e.wink.server.internal.application,org.apache.wink.common,org.apache.
- wink.common.internal.lifecycle,org.apache.wink.server.internal.utils,
- org.apache.wink.common.internal.uri";version="1.1.1.incubating",org.a
- pache.wink.server.handlers;uses:="org.slf4j,javax.ws.rs.core,org.apac
- he.wink.server.utils,org.apache.wink.common";version="1.1.1.incubatin
- g",org.apache.wink.server.internal.servlet.contentencode;uses:="javax
- .servlet,org.slf4j,javax.servlet.http,org.apache.wink.common.internal
- .http,javax.ws.rs.ext";version="1.1.1.incubating",org.apache.wink.ser
- ver.internal.contexts;uses:="javax.ws.rs.core,org.apache.wink.common.
- internal.utils,org.apache.wink.server.internal,org.apache.wink.common
- .internal.http,javax.ws.rs,org.apache.wink.server.handlers,org.apache
- .wink.common.internal,org.slf4j,javax.servlet.http,javax.servlet,org.
- apache.wink.common.internal.runtime,org.apache.wink.common,org.apache
- .wink.common.utils,javax.ws.rs.ext,org.apache.wink.common.internal.co
- ntexts,org.apache.wink.common.internal.i18n,org.apache.wink.common.in
- ternal.uri,org.apache.wink.server.internal.handlers,org.apache.wink.s
- erver.internal.registry";version="1.1.1.incubating"
-Private-Package: HtmlDefaultRepresentation.js;version="1.1.1-incubatin
- g",HtmlDefaultRepresentation;version="1.1.1-incubating",HtmlDefaultRe
- presentation.css;version="1.1.1-incubating"
-Tool: Bnd-0.0.311
-Bundle-Name: Apache Wink Server
-Bundle-Vendor: The Apache Software Foundation
-Bundle-Version: 1.1.1.incubating
-Bnd-LastModified: 1283050327791
-Bundle-ManifestVersion: 2
-Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
-Bundle-Description: The Apache Software Foundation provides support fo
- r the Apache community of open-source software projects. The Apach
- e projects are characterized by a collaborative, consensus based deve
- lopment process, an open and pragmatic software license, and a des
- ire to create high quality software that leads the way in its field.
- We consider ourselves not simply a group of projects sharing a ser
- ver, but rather a community of developers and users.
-Import-Package: META-INF,javax.activation,javax.servlet,javax.servlet.
- http,javax.ws.rs;version="1.1",javax.ws.rs.core;version="1.1",javax.w
- s.rs.ext;version="1.1",javax.xml.bind,org.apache.commons.lang,org.apa
- che.wink.common;version="1.1",org.apache.wink.common.categories;versi
- on="1.1",org.apache.wink.common.http;version="1.1",org.apache.wink.co
- mmon.internal;version="1.1",org.apache.wink.common.internal.applicati
- on;version="1.1",org.apache.wink.common.internal.contexts;version="1.
- 1",org.apache.wink.common.internal.http;version="1.1",org.apache.wink
- .common.internal.i18n;version="1.1",org.apache.wink.common.internal.l
- ifecycle;version="1.1",org.apache.wink.common.internal.model;version=
- "1.1",org.apache.wink.common.internal.model.admin;version="1.1",org.a
- pache.wink.common.internal.properties;version="1.1",org.apache.wink.c
- ommon.internal.providers.entity.app;version="1.1",org.apache.wink.com
- mon.internal.providers.entity.atom;version="1.1",org.apache.wink.comm
- on.internal.providers.entity.csv;version="1.1",org.apache.wink.common
- .internal.providers.entity.json;version="1.1",org.apache.wink.common.
- internal.providers.entity.xml;version="1.1",org.apache.wink.common.in
- ternal.providers.multipart;version="1.1",org.apache.wink.common.inter
- nal.registry;version="1.1",org.apache.wink.common.internal.registry.m
- etadata;version="1.1",org.apache.wink.common.internal.runtime;version
- ="1.1",org.apache.wink.common.internal.uri;version="1.1",org.apache.w
- ink.common.internal.uritemplate;version="1.1",org.apache.wink.common.
- internal.utils;version="1.1",org.apache.wink.common.model.app;version
- ="1.1",org.apache.wink.common.model.atom;version="1.1",org.apache.win
- k.common.model.synd;version="1.1",org.apache.wink.common.utils;versio
- n="1.1",org.apache.wink.server.handlers;version="1.1",org.apache.wink
- .server.internal;version="1.1",org.apache.wink.server.internal.applic
- ation;version="1.1",org.apache.wink.server.internal.contexts;version=
- "1.1",org.apache.wink.server.internal.handlers;version="1.1",org.apac
- he.wink.server.internal.providers.entity.html;version="1.1",org.apach
- e.wink.server.internal.registry;version="1.1",org.apache.wink.server.
- internal.resources;version="1.1",org.apache.wink.server.internal.serv
- let;version="1.1",org.apache.wink.server.internal.servlet.contentenco
- de;version="1.1",org.apache.wink.server.internal.utils;version="1.1",
- org.apache.wink.server.utils;version="1.1",org.slf4j;version="1.5"
-Bundle-SymbolicName: org.apache.wink.server
-Bundle-DocURL: http://www.apache.org/
-
diff --git a/sca-java-2.x/trunk/distribution/all/pom.xml b/sca-java-2.x/trunk/distribution/all/pom.xml index 862ac69fd1..ef94bfbd08 100644 --- a/sca-java-2.x/trunk/distribution/all/pom.xml +++ b/sca-java-2.x/trunk/distribution/all/pom.xml @@ -233,12 +233,6 @@ <artifactId>*</artifactId> <version>*</version> </artifactManifest> - <artifactManifest> - <groupId>org.apache.wink</groupId> - <artifactId>wink-server</artifactId> - <version>1.1.1-incubating</version> - <manifestFile>${basedir}/manifests/wink-server-1.1.1-incubating.MF</manifestFile> - </artifactManifest> </artifactManifests> <!--artifactAggregations> <artifactAggregation> diff --git a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java index 3d3c4048fa..f40f69b218 100644 --- a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java +++ b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java @@ -24,6 +24,7 @@ import java.util.Enumeration; import javax.servlet.FilterConfig; import javax.servlet.ServletContext; +import javax.servlet.ServletException; import javax.ws.rs.HttpMethod; import javax.ws.rs.core.MediaType; import javax.xml.parsers.DocumentBuilderFactory; @@ -54,6 +55,21 @@ public class TuscanyRESTServlet extends RestServlet { this.registry = registry; this.resourceClass = resourceClass; } + + public void init() throws ServletException { + ClassLoader cl = + ClassLoaderContext.setContextClassLoader(Thread.currentThread().getContextClassLoader(), + registry.getServiceDiscovery(), + "/META-INF/server/wink-providers"); + try { + super.init(); + } finally { + if (cl != null) { + // return previous classLoader + Thread.currentThread().setContextClassLoader(cl); + } + } + } @Override public DeploymentConfiguration getDeploymentConfiguration() throws ClassNotFoundException, InstantiationException, @@ -65,8 +81,8 @@ public class TuscanyRESTServlet extends RestServlet { ClassLoaderContext.setContextClassLoader(Thread.currentThread().getContextClassLoader(), registry.getServiceDiscovery(), "javax.ws.rs.ext.RuntimeDelegate", - "META-INF/wink-alternate-shortcuts.properties", - "META-INF/server/wink-providers"); + "/META-INF/wink-alternate-shortcuts.properties", + "/META-INF/server/wink-providers"); DeploymentConfiguration config = null; try { diff --git a/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java b/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java index 2503c0606e..97b4a7696b 100644 --- a/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java +++ b/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java @@ -95,7 +95,6 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { } - public static class ServiceDeclarationImpl implements ServiceDeclaration { private Bundle bundle; private URL url; @@ -167,6 +166,11 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { return (javaClass != null && serviceType.isAssignableFrom(javaClass)); } + @Override + public Enumeration<URL> getResources(final String name) throws IOException { + return (Enumeration<URL>) bundle.getResources(name); + } + } /** @@ -201,7 +205,6 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { } - public ServiceDeclaration getServiceDeclaration(String name) throws IOException { Collection<ServiceDeclaration> declarations = getServiceDeclarations(name); if (declarations.isEmpty()) { @@ -256,15 +259,22 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { // http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/XPathFactory.html boolean isPropertyFile = "javax.xml.xpath.XPathFactory".equals(serviceName); - boolean isTuscanyService = serviceName.startsWith("org.apache.tuscany.sca.") || - serviceName.startsWith("META-INF/services/org.apache.tuscany.sca."); + boolean isTuscanyService = serviceName.startsWith("org.apache.tuscany.sca."); + + if (serviceName.startsWith("/")) { + // If the service name starts with /, treat it as the entry name + serviceName = serviceName.substring(1); + } else { + // Use JDK SPI pattern + serviceName = "META-INF/services/" + serviceName; + } Set<URL> visited = new HashSet<URL>(); //System.out.println(">>>> getServiceDeclarations()"); for (Bundle bundle : getBundles(isTuscanyService)) { -// if (!isProviderBundle(bundle)) { -// continue; -// } + // if (!isProviderBundle(bundle)) { + // continue; + // } Enumeration<URL> urls = null; try { // Use getResources to find resources on the classpath of the bundle @@ -291,10 +301,6 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { logger.log(Level.SEVERE, e.getMessage(), e); } if (urls == null) { - if(! serviceName.startsWith("META-INF/services/")) { - return getServiceDeclarations("META-INF/services/" + serviceName); - } - continue; } while (urls.hasMoreElements()) { @@ -311,7 +317,8 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { try { for (Map<String, String> attributes : ServiceDeclarationParser.load(url, isPropertyFile)) { String className = attributes.get("class"); - ServiceDeclarationImpl descriptor = new ServiceDeclarationImpl(bundle, url, className, attributes); + ServiceDeclarationImpl descriptor = + new ServiceDeclarationImpl(bundle, url, className, attributes); descriptors.add(descriptor); } } catch (IOException e) { diff --git a/sca-java-2.x/trunk/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java b/sca-java-2.x/trunk/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java index 0b0e46fd15..72c25427d6 100644 --- a/sca-java-2.x/trunk/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java +++ b/sca-java-2.x/trunk/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java @@ -111,6 +111,12 @@ public class EquinoxServiceDiscovererTestCase { descriptors = discoverer.getServiceDeclarations("notthere"); Assert.assertEquals(0, descriptors.size()); } + + @Test + public void testDiscoverResources() throws IOException { + Collection<ServiceDeclaration> descriptors = discoverer.getServiceDeclarations("/META-INF/services/test.TestService"); + Assert.assertEquals(2, descriptors.size()); + } @Test public void testDiscoveryFirst() throws IOException { diff --git a/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClassLoaderContext.java b/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClassLoaderContext.java index 1917fe05d4..598c897402 100644 --- a/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClassLoaderContext.java +++ b/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClassLoaderContext.java @@ -19,11 +19,14 @@ package org.apache.tuscany.sca.extensibility; +import java.io.IOException; +import java.net.URL; import java.security.PrivilegedAction; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; import java.util.ArrayList; import java.util.Arrays; +import java.util.Enumeration; import java.util.List; import org.apache.tuscany.sca.extensibility.impl.ClassLoaderDelegate; @@ -124,7 +127,9 @@ public class ClassLoaderContext { * @param serviceNames A list of service provider names * @return The old TCCL if a new one is set, otherwise null */ - public static ClassLoader setContextClassLoader(ClassLoader parent, ServiceDiscovery discovery, String... serviceNames) { + public static ClassLoader setContextClassLoader(ClassLoader parent, + ServiceDiscovery discovery, + String... serviceNames) { ClassLoaderContext context = new ClassLoaderContext(parent, discovery, serviceNames); return context.setContextClassLoader(); } @@ -135,7 +140,9 @@ public class ClassLoaderContext { * @param serviceNames A list of service provider names * @return The old TCCL if a new one is set, otherwise null */ - public static ClassLoader setContextClassLoader(ClassLoader parent, ServiceDiscovery discovery, Class<?>... serviceTypes) { + public static ClassLoader setContextClassLoader(ClassLoader parent, + ServiceDiscovery discovery, + Class<?>... serviceTypes) { ClassLoaderContext context = new ClassLoaderContext(parent, discovery, serviceTypes); return context.setContextClassLoader(); } @@ -154,7 +161,15 @@ public class ClassLoaderContext { try { ServiceDeclaration sd = discovery.getServiceDeclaration(serviceProvider); if (sd != null) { - return sd.loadClass().getClassLoader(); + try { + if (sd.loadClass() != null) { + return sd.loadClass().getClassLoader(); + } else { + return new ClassLoaderImpl(sd); + } + } catch (ClassNotFoundException e) { + return new ClassLoaderImpl(sd); + } } } catch (Exception e) { // Ignore @@ -210,4 +225,29 @@ public class ClassLoaderContext { return classLoader; } + private static class ClassLoaderImpl extends ClassLoader { + private final ServiceDeclaration sd; + + public ClassLoaderImpl(ServiceDeclaration sd) { + super(); + this.sd = sd; + } + + @Override + protected Class<?> findClass(String name) throws ClassNotFoundException { + return sd.loadClass(name); + } + + @Override + protected URL findResource(String name) { + return sd.getResource(name); + } + + @Override + protected Enumeration<URL> findResources(String name) throws IOException { + return sd.getResources(name); + } + + } + } diff --git a/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java b/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java index eec4ff1734..d40c37e4be 100644 --- a/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java +++ b/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java @@ -28,6 +28,7 @@ import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; import java.util.Collection; import java.util.Collections; +import java.util.Enumeration; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -106,6 +107,11 @@ public class ContextClassLoaderServiceDiscoverer implements ServiceDiscoverer { } return (javaClass != null && serviceType.isAssignableFrom(javaClass)); } + + @Override + public Enumeration<URL> getResources(String name) throws IOException { + return Collections.enumeration(ContextClassLoaderServiceDiscoverer.this.getResources(name)); + } } private WeakReference<ClassLoader> classLoaderReference; @@ -155,7 +161,16 @@ public class ContextClassLoaderServiceDiscoverer implements ServiceDiscoverer { // http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/XPathFactory.html boolean isPropertyFile = "javax.xml.xpath.XPathFactory".equals(serviceName); - String name = "META-INF/services/" + serviceName; + + String name = serviceName; + if (serviceName.startsWith("/")) { + // If the service name starts with /, treat it as the entry name + name = serviceName.substring(1); + } else { + // Use JDK SPI pattern + name = "META-INF/services/" + serviceName; + } + boolean debug = logger.isLoggable(Level.FINE); try { for (final URL url : getResources(name)) { diff --git a/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclaration.java b/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclaration.java index 47a91aabfe..24b2c17a0f 100644 --- a/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclaration.java +++ b/sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclaration.java @@ -19,7 +19,9 @@ package org.apache.tuscany.sca.extensibility; +import java.io.IOException; import java.net.URL; +import java.util.Enumeration; import java.util.Map; /** @@ -67,6 +69,7 @@ public interface ServiceDeclaration { String getClassName(); URL getResource(String name); + Enumeration<URL> getResources(String name) throws IOException; /** * The service descriptor might be hashed diff --git a/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java b/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java index c0aac21596..6865ba0d9d 100644 --- a/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java +++ b/sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java @@ -52,6 +52,12 @@ public class ContextClassLoaderServiceDiscovererTestCase { } @Test + public void testDiscoverResources() throws IOException { + Collection<ServiceDeclaration> descriptors = discover.getServiceDeclarations("/META-INF/services/org.apache.tuscany.sca.extensibility.test.TestInterface"); + Assert.assertEquals(3, descriptors.size()); + } + + @Test public void testDiscoveryFirst() throws IOException { ServiceDeclaration descriptor = discover.getServiceDeclaration("org.apache.tuscany.sca.core.ModuleActivatorExtensionPoint"); diff --git a/sca-java-2.x/trunk/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/wink-server-1.1.1-incubating.MF b/sca-java-2.x/trunk/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/wink-server-1.1.1-incubating.MF deleted file mode 100644 index befcf38e97..0000000000 --- a/sca-java-2.x/trunk/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/wink-server-1.1.1-incubating.MF +++ /dev/null @@ -1,152 +0,0 @@ -Manifest-Version: 1.0
-Archiver-Version: Plexus Archiver
-Created-By: 1.6.0_20 (Apple Inc.)
-Built-By: lresende
-Build-Jdk: 1.6.0_20
-Specification-Title: Apache Wink Server
-Specification-Version: 1.1.1-incubating
-Specification-Vendor: The Apache Software Foundation
-Implementation-Title: Apache Wink Server
-Implementation-Version: 1.1.1-incubating
-Implementation-Vendor-Id: org.apache.wink
-Implementation-Vendor: The Apache Software Foundation
-X-Compile-Source-JDK: 1.5
-X-Compile-Target-JDK: 1.5
-Export-Package: META-INF,org.apache.wink.server.internal.resources;use
- s:="org.apache.wink.common.internal.runtime,javax.ws.rs,org.apache.wi
- nk.common,org.apache.wink.common.internal.uritemplate,org.apache.wink
- .common.internal.uri,org.apache.wink.common.internal.utils,org.apache
- .wink.server.internal.registry,org.apache.wink.common.internal.regist
- ry.metadata,javax.ws.rs.core,org.apache.wink.common.model.atom,org.ap
- ache.wink.common.categories,org.apache.wink.common.internal.i18n,org.
- apache.wink.common.model.app,org.apache.wink.common.internal.lifecycl
- e";version="1.1.1.incubating",org.apache.wink.server.internal.provide
- rs.entity.html;uses:="org.apache.wink.common.model.synd,javax.servlet
- ,javax.ws.rs,javax.ws.rs.ext,javax.ws.rs.core,javax.servlet.http,org.
- apache.wink.common.internal.model,org.apache.commons.lang,org.apache.
- wink.common.internal.i18n";version="1.1.1.incubating",org.apache.wink
- .server.internal.application;uses:="org.apache.wink.server.internal.r
- egistry,org.apache.wink.common.internal.registry.metadata,org.apache.
- wink.common.internal.registry,org.apache.wink.common.internal.i18n,or
- g.apache.wink.common,org.slf4j,javax.ws.rs.core,org.apache.wink.commo
- n.internal.application,org.apache.wink.server.internal.utils,javax.se
- rvlet";version="1.1.1.incubating",org.apache.wink.server.utils;uses:=
- "org.apache.wink.common,javax.servlet,org.apache.wink.server.internal
- ,javax.ws.rs.core";version="1.1.1.incubating",org.apache.wink.server.
- internal.handlers;uses:="org.apache.wink.common.http,org.apache.wink.
- server.handlers,org.apache.wink.common.internal.i18n,javax.ws.rs.core
- ,org.apache.wink.server.internal.registry,org.apache.wink.common.inte
- rnal.registry.metadata,org.apache.wink.common.internal.registry,org.a
- pache.wink.common,org.slf4j,org.apache.wink.common.internal.uritempla
- te,javax.ws.rs,org.apache.wink.server.internal.contexts,javax.servlet
- ,javax.servlet.http,org.apache.wink.common.internal.runtime,javax.ws.
- rs.ext,javax.activation,org.apache.wink.common.internal,org.apache.wi
- nk.common.internal.utils,org.apache.wink.server.internal,org.apache.w
- ink.server.utils,org.apache.wink.common.internal.contexts,org.apache.
- wink.server.internal.utils";version="1.1.1.incubating",org.apache.win
- k.server.internal;uses:="javax.ws.rs,org.apache.wink.server.internal.
- application,org.apache.wink.common.internal.registry,org.apache.wink.
- common.internal.i18n,org.slf4j,org.apache.commons.lang,javax.servlet,
- org.apache.wink.common.internal.application,org.apache.wink.server.in
- ternal.handlers,org.apache.wink.common.internal.utils,org.apache.wink
- .common.internal.lifecycle,org.apache.wink.server.internal.registry,o
- rg.apache.wink.server.handlers,org.apache.wink.common.internal,javax.
- ws.rs.core,org.apache.wink.common.internal.runtime,org.apache.wink.se
- rver.internal.resources,org.apache.wink.server.utils,org.apache.wink.
- common,javax.servlet.http";version="1.1.1.incubating",org.apache.wink
- .server.internal.utils;uses:="org.apache.wink.server.utils,org.apache
- .wink.common.internal.uritemplate,org.apache.wink.common.internal.uti
- ls,org.apache.wink.server.internal.handlers,org.apache.wink.server.in
- ternal.registry,org.apache.wink.common.model.synd,org.apache.wink.ser
- ver.handlers,org.apache.wink.common.internal,javax.ws.rs.core,javax.s
- ervlet,org.slf4j,org.apache.wink.common.internal.registry.metadata";v
- ersion="1.1.1.incubating",org.apache.wink.server.internal.registry;us
- es:="org.apache.wink.common.internal.registry.metadata,org.apache.win
- k.common.internal.uritemplate,org.apache.wink.common.internal.lifecyc
- le,org.apache.wink.common,org.apache.wink.common.internal.i18n,org.sl
- f4j,javax.ws.rs,org.apache.wink.common.internal.application,org.apach
- e.wink.common.internal.utils,org.apache.wink.common.http,javax.ws.rs.
- core,org.apache.wink.common.internal.registry,javax.ws.rs.ext,org.apa
- che.wink.common.internal.runtime,org.apache.wink.common.internal.uri,
- javax.servlet.http,org.apache.wink.server.internal.handlers,org.apach
- e.wink.common.internal,org.apache.wink.server.internal.contexts";vers
- ion="1.1.1.incubating",org.apache.wink.server.internal.servlet;uses:=
- "javax.servlet,org.apache.wink.server.internal,org.slf4j,javax.servle
- t.http,org.apache.wink.common.internal.i18n,org.apache.wink.common.in
- ternal.registry,org.apache.wink.common.internal.uritemplate,org.apach
- e.wink.common.internal.utils,org.apache.wink.common.internal.model.ad
- min,org.apache.wink.common.http,org.apache.wink.server.internal.regis
- try,org.apache.wink.common.internal.registry.metadata,javax.xml.bind,
- javax.ws.rs.core,org.apache.wink.common.internal.properties,org.apach
- e.wink.server.internal.application,org.apache.wink.common,org.apache.
- wink.common.internal.lifecycle,org.apache.wink.server.internal.utils,
- org.apache.wink.common.internal.uri";version="1.1.1.incubating",org.a
- pache.wink.server.handlers;uses:="org.slf4j,javax.ws.rs.core,org.apac
- he.wink.server.utils,org.apache.wink.common";version="1.1.1.incubatin
- g",org.apache.wink.server.internal.servlet.contentencode;uses:="javax
- .servlet,org.slf4j,javax.servlet.http,org.apache.wink.common.internal
- .http,javax.ws.rs.ext";version="1.1.1.incubating",org.apache.wink.ser
- ver.internal.contexts;uses:="javax.ws.rs.core,org.apache.wink.common.
- internal.utils,org.apache.wink.server.internal,org.apache.wink.common
- .internal.http,javax.ws.rs,org.apache.wink.server.handlers,org.apache
- .wink.common.internal,org.slf4j,javax.servlet.http,javax.servlet,org.
- apache.wink.common.internal.runtime,org.apache.wink.common,org.apache
- .wink.common.utils,javax.ws.rs.ext,org.apache.wink.common.internal.co
- ntexts,org.apache.wink.common.internal.i18n,org.apache.wink.common.in
- ternal.uri,org.apache.wink.server.internal.handlers,org.apache.wink.s
- erver.internal.registry";version="1.1.1.incubating"
-Private-Package: HtmlDefaultRepresentation.js;version="1.1.1-incubatin
- g",HtmlDefaultRepresentation;version="1.1.1-incubating",HtmlDefaultRe
- presentation.css;version="1.1.1-incubating"
-Tool: Bnd-0.0.311
-Bundle-Name: Apache Wink Server
-Bundle-Vendor: The Apache Software Foundation
-Bundle-Version: 1.1.1.incubating
-Bnd-LastModified: 1283050327791
-Bundle-ManifestVersion: 2
-Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
-Bundle-Description: The Apache Software Foundation provides support fo
- r the Apache community of open-source software projects. The Apach
- e projects are characterized by a collaborative, consensus based deve
- lopment process, an open and pragmatic software license, and a des
- ire to create high quality software that leads the way in its field.
- We consider ourselves not simply a group of projects sharing a ser
- ver, but rather a community of developers and users.
-Import-Package: META-INF,javax.activation,javax.servlet,javax.servlet.
- http,javax.ws.rs;version="1.1",javax.ws.rs.core;version="1.1",javax.w
- s.rs.ext;version="1.1",javax.xml.bind,org.apache.commons.lang,org.apa
- che.wink.common;version="1.1",org.apache.wink.common.categories;versi
- on="1.1",org.apache.wink.common.http;version="1.1",org.apache.wink.co
- mmon.internal;version="1.1",org.apache.wink.common.internal.applicati
- on;version="1.1",org.apache.wink.common.internal.contexts;version="1.
- 1",org.apache.wink.common.internal.http;version="1.1",org.apache.wink
- .common.internal.i18n;version="1.1",org.apache.wink.common.internal.l
- ifecycle;version="1.1",org.apache.wink.common.internal.model;version=
- "1.1",org.apache.wink.common.internal.model.admin;version="1.1",org.a
- pache.wink.common.internal.properties;version="1.1",org.apache.wink.c
- ommon.internal.providers.entity.app;version="1.1",org.apache.wink.com
- mon.internal.providers.entity.atom;version="1.1",org.apache.wink.comm
- on.internal.providers.entity.csv;version="1.1",org.apache.wink.common
- .internal.providers.entity.json;version="1.1",org.apache.wink.common.
- internal.providers.entity.xml;version="1.1",org.apache.wink.common.in
- ternal.providers.multipart;version="1.1",org.apache.wink.common.inter
- nal.registry;version="1.1",org.apache.wink.common.internal.registry.m
- etadata;version="1.1",org.apache.wink.common.internal.runtime;version
- ="1.1",org.apache.wink.common.internal.uri;version="1.1",org.apache.w
- ink.common.internal.uritemplate;version="1.1",org.apache.wink.common.
- internal.utils;version="1.1",org.apache.wink.common.model.app;version
- ="1.1",org.apache.wink.common.model.atom;version="1.1",org.apache.win
- k.common.model.synd;version="1.1",org.apache.wink.common.utils;versio
- n="1.1",org.apache.wink.server.handlers;version="1.1",org.apache.wink
- .server.internal;version="1.1",org.apache.wink.server.internal.applic
- ation;version="1.1",org.apache.wink.server.internal.contexts;version=
- "1.1",org.apache.wink.server.internal.handlers;version="1.1",org.apac
- he.wink.server.internal.providers.entity.html;version="1.1",org.apach
- e.wink.server.internal.registry;version="1.1",org.apache.wink.server.
- internal.resources;version="1.1",org.apache.wink.server.internal.serv
- let;version="1.1",org.apache.wink.server.internal.servlet.contentenco
- de;version="1.1",org.apache.wink.server.internal.utils;version="1.1",
- org.apache.wink.server.utils;version="1.1",org.slf4j;version="1.5"
-Bundle-SymbolicName: org.apache.wink.server
-Bundle-DocURL: http://www.apache.org/
-
diff --git a/sca-java-2.x/trunk/modules/wink/META-INF/MANIFEST.MF b/sca-java-2.x/trunk/modules/wink/META-INF/MANIFEST.MF index 3e6c92d183..ffab9da88b 100644 --- a/sca-java-2.x/trunk/modules/wink/META-INF/MANIFEST.MF +++ b/sca-java-2.x/trunk/modules/wink/META-INF/MANIFEST.MF @@ -7,11 +7,11 @@ Bundle-ManifestVersion: 2 Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-Description: Apache Tuscany SCA Wink
Import-Package: javax.servlet,
+ org.apache.tuscany.sca.implementation.web.runtime.utils;version="2.0",
org.apache.wink.common,
org.apache.wink.common.internal.registry,
org.apache.wink.server.internal,
org.apache.wink.server.internal.registry,
- org.apache.tuscany.sca.implementation.web.runtime.utils;version="2.0",
org.oasisopen.sca.annotation;version="2.0"
Bundle-SymbolicName: org.apache.tuscany.sca.wink
Bundle-DocURL: http://www.apache.org/
diff --git a/sca-java-2.x/trunk/samples/calculator-rest-osgi/src/test/java/calculator/CalculatorTestCase.java b/sca-java-2.x/trunk/samples/calculator-rest-osgi/src/test/java/calculator/CalculatorTestCase.java index 5c614da87b..704101b5c0 100644 --- a/sca-java-2.x/trunk/samples/calculator-rest-osgi/src/test/java/calculator/CalculatorTestCase.java +++ b/sca-java-2.x/trunk/samples/calculator-rest-osgi/src/test/java/calculator/CalculatorTestCase.java @@ -38,7 +38,6 @@ import com.meterware.httpunit.WebResponse; /** * This shows how to test the Calculator composition. */ -@Ignore public class CalculatorTestCase { private final static String SERVICE_URL = "http://localhost:8085/calculator/"; |