Author: rgoers
Date: Wed Mar 14 18:26:29 2012
New Revision: 1300677

URL: http://svn.apache.org/viewvc?rev=1300677&view=rev
Log:
Allow vfsfile as a protocol. Try to return a File for monitoring when possible

Modified:
    
logging/log4j/log4j2/trunk/log4j2-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java
    
logging/log4j/log4j2/trunk/log4j2-core/src/main/java/org/apache/logging/log4j/core/helpers/FileUtils.java
    
logging/log4j/log4j2/trunk/log4j2-core/src/main/java/org/apache/logging/log4j/core/helpers/Loader.java

Modified: 
logging/log4j/log4j2/trunk/log4j2-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j2-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java?rev=1300677&r1=1300676&r2=1300677&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j2-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j2-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java
 Wed Mar 14 18:26:29 2012
@@ -31,6 +31,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
@@ -188,6 +189,11 @@ public abstract class ConfigurationFacto
         return null;
     }
 
+    /**
+     * Load the configuration from a URI.
+     * @param configLocation A URI representing the location of the 
configuration.
+     * @return The InputSource for the configuration.
+     */
     protected InputSource getInputFromURI(URI configLocation) {
         configFile = FileUtils.fileFromURI(configLocation);
         if (configFile != null && configFile.exists() && configFile.canRead()) 
{
@@ -211,20 +217,31 @@ public abstract class ConfigurationFacto
         return null;
     }
 
-    protected InputSource getInputFromString(ClassLoader loader, String 
configFile) {
+    /**
+     * Load the configuration from the location represented by the String.
+     * @param config The configuration location.
+     * @param loader The default ClassLoader to use.
+     * @return The InputSource to use to read the configuration.
+     */
+    protected InputSource getInputFromString(String config, ClassLoader 
loader) {
         InputSource source;
         try {
-            URL url = new URL(configFile);
+            URL url = new URL(config);
             source = new InputSource(url.openStream());
-            source.setSystemId(configFile);
+            if (FileUtils.isFile(url)) {
+                configFile = FileUtils.fileFromURI(url.toURI());
+            }
+            source.setSystemId(config);
             return source;
         } catch (Exception ex) {
-            source = getInputFromResource(configFile, loader);
+            source = getInputFromResource(config, loader);
             if (source == null) {
                 try {
-                    InputStream is = new FileInputStream(configFile);
+                    File file = new File(config);
+                    FileInputStream is = new FileInputStream(file);
+                    configFile = file;
                     source = new InputSource(is);
-                    source.setSystemId(configFile);
+                    source.setSystemId(config);
                 } catch (FileNotFoundException fnfe) {
                     // Ignore the exception
                 }
@@ -233,12 +250,34 @@ public abstract class ConfigurationFacto
         return source;
     }
 
+    /**
+     * Retrieve the configuration via the ClassLoader.
+     * @param resource The resource to load.
+     * @param loader The default ClassLoader to use.
+     * @return The InputSource for the configuration.
+     */
     protected InputSource getInputFromResource(String resource, ClassLoader 
loader) {
-        InputStream is = Loader.getResourceAsStream(resource, loader);
+        URL url = Loader.getResource(resource, loader);
+        if (url == null) {
+            return null;
+        }
+        InputStream is = null;
+        try {
+            is = url.openStream();
+        } catch (IOException ioe) {
+            return null;
+        }
         if (is == null) {
             return null;
         }
         InputSource source = new InputSource(is);
+        if (FileUtils.isFile(url)) {
+            try {
+                configFile = FileUtils.fileFromURI(url.toURI());
+            } catch (URISyntaxException ex) {
+                // Just ignore the exception.
+            }
+        }
         source.setSystemId(resource);
         return source;
     }
@@ -289,7 +328,7 @@ public abstract class ConfigurationFacto
                 String config = 
System.getProperty(CONFIGURATION_FILE_PROPERTY);
                 if (config != null) {
                     ClassLoader loader = this.getClass().getClassLoader();
-                    InputSource source = getInputFromString(loader, config);
+                    InputSource source = getInputFromString(config, loader);
                     if (source != null) {
                         for (ConfigurationFactory factory : factories) {
                             String[] types = factory.getSupportedTypes();

Modified: 
logging/log4j/log4j2/trunk/log4j2-core/src/main/java/org/apache/logging/log4j/core/helpers/FileUtils.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j2-core/src/main/java/org/apache/logging/log4j/core/helpers/FileUtils.java?rev=1300677&r1=1300676&r2=1300677&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j2-core/src/main/java/org/apache/logging/log4j/core/helpers/FileUtils.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j2-core/src/main/java/org/apache/logging/log4j/core/helpers/FileUtils.java
 Wed Mar 14 18:26:29 2012
@@ -23,6 +23,7 @@ import java.io.File;
 import java.io.UnsupportedEncodingException;
 import java.net.MalformedURLException;
 import java.net.URI;
+import java.net.URL;
 import java.net.URLDecoder;
 
 /**
@@ -32,6 +33,8 @@ public final class FileUtils {
 
     /** Constant for the file URL protocol.*/
     private static final String PROTOCOL_FILE = "file";
+    
+    private static final String JBOSS_FILE = "vfsfile";
 
     private static Logger logger = StatusLogger.getLogger();
 
@@ -46,7 +49,7 @@ public final class FileUtils {
      * @return the resulting file object
      */
     public static File fileFromURI(URI uri) {
-        if (uri == null || !uri.getScheme().equals(PROTOCOL_FILE)) {
+        if (uri == null || !uri.getScheme().equals(PROTOCOL_FILE) || 
!uri.getScheme().equals(JBOSS_FILE)) {
             return null;
         } else {
             try {
@@ -59,4 +62,8 @@ public final class FileUtils {
             return null;
         }
     }
+    
+    public static boolean isFile(URL url) {
+        return url != null && (url.getProtocol().equals(PROTOCOL_FILE) || 
url.getProtocol().equals(JBOSS_FILE));
+    }
 }

Modified: 
logging/log4j/log4j2/trunk/log4j2-core/src/main/java/org/apache/logging/log4j/core/helpers/Loader.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j2-core/src/main/java/org/apache/logging/log4j/core/helpers/Loader.java?rev=1300677&r1=1300676&r2=1300677&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j2-core/src/main/java/org/apache/logging/log4j/core/helpers/Loader.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j2-core/src/main/java/org/apache/logging/log4j/core/helpers/Loader.java
 Wed Mar 14 18:26:29 2012
@@ -65,9 +65,10 @@ public final class Loader {
      * <p/>
      * </ol>
      * @param resource The resource to load.
+     * @param defaultLoader The default ClassLoader.
      * @return A URL to the resource.
      */
-    public static URL getResource(String resource) {
+    public static URL getResource(String resource, ClassLoader defaultLoader) {
         ClassLoader classLoader;
         URL url;
 
@@ -91,6 +92,14 @@ public final class Loader {
                     return url;
                 }
             }
+            // We could not find resource. Finally try with the default 
ClassLoader.
+            if (defaultLoader != null) {
+                LOGGER.trace("Trying to find [" + resource + "] using " + 
defaultLoader + " class loader.");
+                url = defaultLoader.getResource(resource);
+                if (url != null) {
+                    return url;
+                }
+            }
         } catch (IllegalAccessException t) {
             LOGGER.warn(TSTR, t);
         } catch (InvocationTargetException t) {


Reply via email to