summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2010-09-08 05:55:44 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2010-09-08 05:55:44 +0000
commita738b52d8257db36862548b699f81292d9ea0a0d (patch)
tree5e9f658e6d34758c47525a18861e25306ad5f405 /sca-java-2.x
parenteb7dc287d00e10e561043e859924ebc656235f83 (diff)
Tidy up binding.rest osgi enablement
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@993613 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x')
-rw-r--r--sca-java-2.x/trunk/distribution/all/manifests/wink-server-1.1.1-incubating.MF152
-rw-r--r--sca-java-2.x/trunk/distribution/all/pom.xml6
-rw-r--r--sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java20
-rw-r--r--sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java31
-rw-r--r--sca-java-2.x/trunk/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java6
-rw-r--r--sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClassLoaderContext.java46
-rw-r--r--sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java17
-rw-r--r--sca-java-2.x/trunk/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclaration.java3
-rw-r--r--sca-java-2.x/trunk/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java6
-rw-r--r--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.MF152
-rw-r--r--sca-java-2.x/trunk/modules/wink/META-INF/MANIFEST.MF2
-rw-r--r--sca-java-2.x/trunk/samples/calculator-rest-osgi/src/test/java/calculator/CalculatorTestCase.java1
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/";