Do not hardcode the usage of org.eclipse.osgi.service.urlconversion.URLConverter
diff --git a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/Activator.java b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/Activator.java
index b1b3e57..94a4843 100644
--- a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/Activator.java
+++ b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/Activator.java
@@ -24,7 +24,6 @@
import org.eclipse.gemini.web.core.WebContainerProperties;
import org.eclipse.gemini.web.core.spi.ServletContainer;
import org.eclipse.gemini.web.tomcat.internal.bundleresources.BundleURLStreamHandlerService;
-import org.eclipse.osgi.service.urlconversion.URLConverter;
import org.eclipse.virgo.util.osgi.ServiceRegistrationTracker;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
@@ -39,8 +38,7 @@
private static final String WAR_PROTOCOL = "war";
- private static final String FILTER = "(&(objectClass=" + URLConverter.class.getName()
- + ")(protocol=bundleentry))";
+ private static final String FILTER = "(&(objectClass=org.eclipse.osgi.service.urlconversion.URLConverter)(protocol=bundleentry))";
private static final String EXPRESSION_FACTORY = "javax.el.ExpressionFactory";
@@ -52,7 +50,7 @@
private TomcatServletContainer container;
- private ServiceTracker<URLConverter, URLConverter> urlConverterTracker;
+ private ServiceTracker<?, ?> urlConverterTracker;
private String oldExpressionFactory;
diff --git a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/BundleDependenciesJarScanner.java b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/BundleDependenciesJarScanner.java
index 43c8bfd..72ab85a 100644
--- a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/BundleDependenciesJarScanner.java
+++ b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/BundleDependenciesJarScanner.java
@@ -35,7 +35,6 @@
import org.eclipse.gemini.web.tomcat.internal.loader.BundleWebappClassLoader;
import org.eclipse.gemini.web.tomcat.internal.support.BundleDependencyDeterminer;
import org.eclipse.gemini.web.tomcat.internal.support.BundleFileResolver;
-import org.eclipse.osgi.service.urlconversion.URLConverter;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
@@ -66,12 +65,12 @@
private final BundleFileResolver bundleFileResolver;
- private final ServiceTracker<URLConverter, URLConverter> urlConverterTracker;
+ private final ServiceTracker<?, ?> urlConverterTracker;
private JarScanFilter jarScanFilter;
BundleDependenciesJarScanner(BundleDependencyDeterminer bundleDependencyDeterminer, BundleFileResolver bundleFileResolver,
- BundleContext bundleContext, ServiceTracker<URLConverter, URLConverter> urlConverterTracker) {
+ BundleContext bundleContext, ServiceTracker<?, ?> urlConverterTracker) {
this.bundleDependencyDeterminer = bundleDependencyDeterminer;
this.bundleFileResolver = bundleFileResolver;
this.jarScanFilter = new BundleDependenciesJarScanFilter(bundleContext);
@@ -124,21 +123,28 @@
} else {
URL root = bundle.getEntry("/");
try {
- URLConverter converter = this.urlConverterTracker.getService();
- if (converter != null) {
- root = converter.resolve(root);
+ try {
+ Object converter = this.urlConverterTracker.getService();
+ if (converter != null) {
+ root = ((org.eclipse.osgi.service.urlconversion.URLConverter) converter).resolve(root);
+ }
+ } catch (Exception ignore) {
}
- if ("file".equals(root.getProtocol())) {
- scanBundleFile(new File(root.getPath()), callback, isWebapp);
- } else if ("jar".equals(root.getProtocol())) {
- scanBundleUrl(root, callback, isWebapp);
+
+ if (root != null) {
+ if ("file".equals(root.getProtocol())) {
+ scanBundleFile(new File(root.getPath()), callback, isWebapp);
+ } else if ("jar".equals(root.getProtocol())) {
+ scanBundleUrl(root, callback, isWebapp);
+ } else {
+ URL bundleUrl = new URL(JAR_URL_PREFIX + root.toExternalForm() + JAR_URL_SUFFIX);
+ scanBundleUrl(bundleUrl, callback, isWebapp);
+ }
} else {
- URL bundleUrl = new URL(JAR_URL_PREFIX + root.toExternalForm() + JAR_URL_SUFFIX);
- scanBundleUrl(bundleUrl, callback, isWebapp);
+ LOGGER.warn("Failed to scan the bundle [" + bundle + "].");
}
} catch (IOException e) {
LOGGER.warn("Failed to scan the bundle location [" + root + "].");
- return;
}
}
}
diff --git a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/OsgiAwareEmbeddedTomcat.java b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/OsgiAwareEmbeddedTomcat.java
index db5081a..e4d36ae 100644
--- a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/OsgiAwareEmbeddedTomcat.java
+++ b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/OsgiAwareEmbeddedTomcat.java
@@ -56,7 +56,6 @@
import org.eclipse.gemini.web.tomcat.internal.loader.ChainedClassLoader;
import org.eclipse.gemini.web.tomcat.internal.support.BundleFileResolverFactory;
import org.eclipse.gemini.web.tomcat.internal.support.PackageAdminBundleDependencyDeterminer;
-import org.eclipse.osgi.service.urlconversion.URLConverter;
import org.eclipse.virgo.util.osgi.ServiceRegistrationTracker;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
@@ -121,8 +120,7 @@
private String hostConfigDir;
- OsgiAwareEmbeddedTomcat(BundleContext context,
- ServiceTracker<URLConverter, URLConverter> urlConverterTracker) {
+ OsgiAwareEmbeddedTomcat(BundleContext context, ServiceTracker<?, ?> urlConverterTracker) {
this.bundleContext = context;
this.bundleDependenciesJarScanner = new BundleDependenciesJarScanner(new PackageAdminBundleDependencyDeterminer(),
BundleFileResolverFactory.createBundleFileResolver(), context, urlConverterTracker);
diff --git a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/TomcatServletContainerFactory.java b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/TomcatServletContainerFactory.java
index c3eba2e..67ea38f 100644
--- a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/TomcatServletContainerFactory.java
+++ b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/TomcatServletContainerFactory.java
@@ -18,14 +18,13 @@
import java.io.InputStream;
-import org.eclipse.osgi.service.urlconversion.URLConverter;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;
final class TomcatServletContainerFactory {
public TomcatServletContainer createContainer(InputStream configuration, BundleContext context,
- ServiceTracker<URLConverter, URLConverter> urlConverterTracker) {
+ ServiceTracker<?, ?> urlConverterTracker) {
OsgiAwareEmbeddedTomcat catalina = new OsgiAwareEmbeddedTomcat(context, urlConverterTracker);
catalina.configure(configuration);