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 e4d36ae..18099fc 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
@@ -118,6 +118,8 @@
 
     private final JarScanner defaultJarScanner;
 
+    private final ServiceTracker<?, ?> urlConverterTracker;
+
     private String hostConfigDir;
 
     OsgiAwareEmbeddedTomcat(BundleContext context, ServiceTracker<?, ?> urlConverterTracker) {
@@ -126,6 +128,7 @@
             BundleFileResolverFactory.createBundleFileResolver(), context, urlConverterTracker);
         this.defaultJarScanner = new StandardJarScanner();
         this.jarScannerCustomizer = new DelegatingJarScannerCustomizer(context);
+        this.urlConverterTracker = urlConverterTracker;
     }
 
     /**
@@ -170,6 +173,10 @@
         return findEngine();
     }
 
+    ServiceTracker<?, ?> getUrlConverterTracker() {
+        return this.urlConverterTracker;
+    }
+
     private Engine findEngine() {
         Server server = getServer();
         Service[] findServices = server.findServices();
diff --git a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/TomcatServletContainer.java b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/TomcatServletContainer.java
index 4bc673a..abde872 100644
--- a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/TomcatServletContainer.java
+++ b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/TomcatServletContainer.java
@@ -102,7 +102,7 @@
 
             BundleWebappLoader loader = new BundleWebappLoader(bundle, this.classLoaderCustomizer);
             context.setLoader(loader);
-            context.setResources(new BundleWebResourceRoot(bundle));
+            context.setResources(new BundleWebResourceRoot(bundle, this.tomcat.getUrlConverterTracker()));
 
             ServletContext servletContext = context.getServletContext();
 
diff --git a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResource.java b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResource.java
index 9a93e5d..b7c086b 100644
--- a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResource.java
+++ b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResource.java
@@ -91,7 +91,7 @@
         this.bundle = bundle;
         this.fragments = getFragments(bundle);
         this.checkEntryPath = checkEntryPath();
-        File bundleLocation = this.bundleFileResolver.resolve(bundle);
+        File bundleLocation = getBundleLocation();
         if (bundleLocation != null) {
             try {
                 this.bundleLocationCanonicalPath = bundleLocation.getCanonicalPath();
@@ -103,6 +103,25 @@
         }
     }
 
+    private File getBundleLocation() {
+        File bundleLocation = this.bundleFileResolver.resolve(bundle);
+        if (bundleLocation == null) {
+            URL root = this.bundle.getEntry("/");
+            try {
+                Object converter = ((BundleWebResourceRoot) this.root).getUrlConverterTracker().getService();
+                if (converter != null) {
+                    root = ((org.eclipse.osgi.service.urlconversion.URLConverter) converter).resolve(root);
+                }
+            } catch (Exception ignore) {
+            }
+
+            if (root != null && "file".equals(root.getProtocol())) {
+                bundleLocation = new File(root.getPath());
+            }
+        }
+        return bundleLocation;
+    }
+
     private BundleWebResource(Bundle bundle, WebResourceRoot root, List<Bundle> fragments, String path, boolean checkEntryPath,
         String bundleLocationCanonicalPath, boolean isBundleLocationDirectory) {
         super(root, path);
diff --git a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceRoot.java b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceRoot.java
index b61be78..d0acf05 100644
--- a/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceRoot.java
+++ b/org.eclipse.gemini.web.tomcat/src/main/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceRoot.java
@@ -27,6 +27,7 @@
 import org.apache.catalina.WebResourceSet;
 import org.apache.catalina.webresources.StandardRoot;
 import org.osgi.framework.Bundle;
+import org.osgi.util.tracker.ServiceTracker;
 
 public class BundleWebResourceRoot extends StandardRoot {
 
@@ -34,10 +35,13 @@
 
     private final WebResource main;
 
+    private final ServiceTracker<?, ?> urlConverterTracker;
+
     private Path docBase;
 
-    public BundleWebResourceRoot(Bundle bundle) {
+    public BundleWebResourceRoot(Bundle bundle, ServiceTracker<?, ?> urlConverterTracker) {
         this.bundle = bundle;
+        this.urlConverterTracker = urlConverterTracker;
         this.main = new BundleWebResource(this.bundle, this);
     }
 
@@ -94,6 +98,10 @@
         return keyProperties.toString();
     }
 
+    ServiceTracker<?, ?> getUrlConverterTracker() {
+        return this.urlConverterTracker;
+    }
+
     @Override
     protected void registerURLStreamHandlerFactory() {
         // no-op
diff --git a/org.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceTests.java b/org.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceTests.java
index 5fc8c33..3a8b6bf 100644
--- a/org.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceTests.java
+++ b/org.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/bundleresources/BundleWebResourceTests.java
@@ -91,6 +91,7 @@
         BundleRevision fbundleRevision = createMock(BundleRevision.class);
         BundleWiring fbundleWiring = createMock(BundleWiring.class);
         expect(bundle.getEntry("")).andReturn(Paths.get("src/test/resources/sub/").toUri().toURL()).anyTimes();
+        expect(bundle.getEntry("/")).andReturn(Paths.get("src/test/resources/sub/").toUri().toURL()).anyTimes();
         expect(bundle.getEntry("sub/")).andReturn(Paths.get("src/test/resources/sub/").toUri().toURL()).anyTimes();
         expect(bundle.getEntryPaths("")).andReturn(createPathsEnumeration("sub/"));
         expect(bundle.getEntryPaths("sub/")).andReturn(createPathsEnumeration("sub/one.txt"));
