Author: sco...@google.com
Date: Wed Mar 25 05:43:19 2009
New Revision: 5078

Modified:
     
releases/1.6/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java

Log:
Amending r5077:
- Catch ClassNotFound in outside loader and allow internal load
- Allow "system" resources to be loaded internally if they're not found  
externally
- jat suggestion to extract constant
- Fix comments

Review by: tobyr (TBR)

Modified:  
releases/1.6/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java
==============================================================================
---  
releases/1.6/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java     
 
(original)
+++  
releases/1.6/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java     
 
Wed Mar 25 05:43:19 2009
@@ -249,6 +249,8 @@
       */
      private class WebAppClassLoaderExtension extends WebAppClassLoader {

+      private static final String META_INF_SERVICES = "META-INF/services/";
+
        public WebAppClassLoaderExtension() throws IOException {
          super(bootStrapOnlyClassLoader, WebAppContextWithReload.this);
        }
@@ -257,17 +259,21 @@
        public URL findResource(String name) {
          // Specifically for  
META-INF/services/javax.xml.parsers.SAXParserFactory
          String checkName = name;
-        if (checkName.startsWith("META-INF/services/")) {
-          checkName = checkName.substring("META-INF/services/".length());
+        if (checkName.startsWith(META_INF_SERVICES)) {
+          checkName = checkName.substring(META_INF_SERVICES.length());
          }

-        // For system/server path, just try the outside world quietly.
+        // For a system path, load from the outside world.
+        URL found;
          if (isSystemPath(checkName)) {
-          return systemClassLoader.getResource(name);
+          found = systemClassLoader.getResource(name);
+          if (found != null) {
+            return found;
+          }
          }

          // Always check this ClassLoader first.
-        URL found = super.findResource(name);
+        found = super.findResource(name);
          if (found != null) {
            return found;
          }
@@ -303,14 +309,18 @@

        @Override
        protected Class<?> findClass(String name) throws  
ClassNotFoundException {
-        // For system/server path, just try the outside world quietly.
+        // For system path, always prefer the outside world.
          if (isSystemPath(name)) {
-          return systemClassLoader.loadClass(name);
+          try {
+            return systemClassLoader.loadClass(name);
+          } catch (ClassNotFoundException e) {
+          }
          }

          try {
            return super.findClass(name);
          } catch (ClassNotFoundException e) {
+          // Don't allow server classes to be loaded from the outside.
            if (isServerPath(name)) {
              throw e;
            }

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to