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) {