You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2008/05/30 13:36:16 UTC

svn commit: r661660 - in /incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher: app/ClassLoaderResourceProvider.java app/main/ClassLoaderResourceProvider.java app/main/Main.java webapp/SlingServlet.java

Author: fmeschbe
Date: Fri May 30 04:36:16 2008
New Revision: 661660

URL: http://svn.apache.org/viewvc?rev=661660&view=rev
Log:
SLING-472 Have SlingServlet's ResourceProvider extend from
ClassLoaderResourceProvider and fallback to the latter in case
the web app does not provide resources.

Added:
    incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/ClassLoaderResourceProvider.java
      - copied, changed from r660415, incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/main/ClassLoaderResourceProvider.java
Removed:
    incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/main/ClassLoaderResourceProvider.java
Modified:
    incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/main/Main.java
    incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/webapp/SlingServlet.java

Copied: incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/ClassLoaderResourceProvider.java (from r660415, incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/main/ClassLoaderResourceProvider.java)
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/ClassLoaderResourceProvider.java?p2=incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/ClassLoaderResourceProvider.java&p1=incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/main/ClassLoaderResourceProvider.java&r1=660415&r2=661660&rev=661660&view=diff
==============================================================================
--- incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/main/ClassLoaderResourceProvider.java (original)
+++ incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/ClassLoaderResourceProvider.java Fri May 30 04:36:16 2008
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.launcher.app.main;
+package org.apache.sling.launcher.app;
 
 import java.io.IOException;
 import java.net.JarURLConnection;
@@ -29,13 +29,11 @@
 import java.util.jar.JarFile;
 import java.util.regex.Pattern;
 
-import org.apache.sling.launcher.app.ResourceProvider;
-import org.apache.sling.launcher.app.Sling;
 
 /**
  * The <code>ClassLoaderResourceProvider</code> TODO
  */
-class ClassLoaderResourceProvider extends ResourceProvider {
+public class ClassLoaderResourceProvider extends ResourceProvider {
 
     private final ClassLoader classLoader;
 

Modified: incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/main/Main.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/main/Main.java?rev=661660&r1=661659&r2=661660&view=diff
==============================================================================
--- incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/main/Main.java (original)
+++ incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/main/Main.java Fri May 30 04:36:16 2008
@@ -23,6 +23,7 @@
 
 import org.apache.felix.framework.Logger;
 import org.apache.sling.commons.log.LogManager;
+import org.apache.sling.launcher.app.ClassLoaderResourceProvider;
 import org.apache.sling.launcher.app.ResourceProvider;
 import org.apache.sling.launcher.app.Sling;
 import org.osgi.framework.BundleException;

Modified: incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/webapp/SlingServlet.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/webapp/SlingServlet.java?rev=661660&r1=661659&r2=661660&view=diff
==============================================================================
--- incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/webapp/SlingServlet.java (original)
+++ incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/webapp/SlingServlet.java Fri May 30 04:36:16 2008
@@ -38,6 +38,7 @@
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.felix.framework.Logger;
+import org.apache.sling.launcher.app.ClassLoaderResourceProvider;
 import org.apache.sling.launcher.app.ResourceProvider;
 import org.apache.sling.launcher.app.Sling;
 import org.eclipse.equinox.http.servlet.HttpServiceServlet;
@@ -358,7 +359,7 @@
     }
 
     private static class ServletContextResourceProvider extends
-            ResourceProvider {
+            ClassLoaderResourceProvider {
 
         /**
          * The root folder for internal web application files (value is
@@ -367,8 +368,9 @@
         private static final String WEB_INF = "/WEB-INF";
 
         private ServletContext servletContext;
-
+        
         private ServletContextResourceProvider(ServletContext servletContext) {
+            super(SlingServlet.class.getClassLoader());
             this.servletContext = servletContext;
         }
 
@@ -385,6 +387,23 @@
                 resources = servletContext.getResourcePaths(WEB_INF + path); // unchecked
             }
 
+            Iterator resourceIterator;
+            if ( resources == null || resources.isEmpty() ) {
+                // fall back to the class path
+                resourceIterator = super.getChildren(path);
+                
+                if(resourceIterator.hasNext()) {
+                    return resourceIterator;
+                }
+
+                // fall back to WEB-INF within the class path
+                resourceIterator = super.getChildren(WEB_INF + path);
+
+                if(resourceIterator.hasNext()) {
+                    return resourceIterator;
+                }
+            }
+            
             if ( resources == null ) {
                 return Collections.EMPTY_LIST.iterator();
             }
@@ -410,7 +429,22 @@
                 }
 
                 // otherwise try WEB-INF location
-                return servletContext.getResource(WEB_INF + path);
+                resource = servletContext.getResource(WEB_INF + path);
+                if(resource != null) {
+                    return resource;
+                }
+                
+                // try classpath
+                resource = super.getResource(path);
+                if(resource != null) {
+                    return resource;
+                }
+
+                // try WEB-INF within the classpath
+                resource = super.getResource(WEB_INF + path);
+                if(resource != null) {
+                    return resource;
+                }
 
             } catch (MalformedURLException mue) {
                 servletContext.log("Failure to get resource " + path, mue);