You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sk...@apache.org on 2006/03/02 11:02:28 UTC
svn commit: r382339 -
/jakarta/commons/proper/logging/contrib/simon/jcl2/src/core/java/org/apache/commons/logging/Utils.java
Author: skitching
Date: Thu Mar 2 02:02:26 2006
New Revision: 382339
URL: http://svn.apache.org/viewcvs?rev=382339&view=rev
Log:
Fix bug when using explicit classloader to find java services file.
Modified:
jakarta/commons/proper/logging/contrib/simon/jcl2/src/core/java/org/apache/commons/logging/Utils.java
Modified: jakarta/commons/proper/logging/contrib/simon/jcl2/src/core/java/org/apache/commons/logging/Utils.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/logging/contrib/simon/jcl2/src/core/java/org/apache/commons/logging/Utils.java?rev=382339&r1=382338&r2=382339&view=diff
==============================================================================
--- jakarta/commons/proper/logging/contrib/simon/jcl2/src/core/java/org/apache/commons/logging/Utils.java (original)
+++ jakarta/commons/proper/logging/contrib/simon/jcl2/src/core/java/org/apache/commons/logging/Utils.java Thu Mar 2 02:02:26 2006
@@ -45,9 +45,10 @@
* <code>META-INF/services/service.name</code> where service.name
* matches the fully qualified name of the provided base class.
* <p>
- * The file contains a single non-comment line containing the name of
- * the concrete class. An instance of that type will be created, and
- * returned.
+ * The file contains one or more non-comment lines containing the
+ * names of concrete classes that provide an implementation of the
+ * base class. An instance of the first-occurring class will be
+ * created and returned.
* <p>
* The classloader that is used as the base of the search for the
* service file is the one that loaded the specified base class. The
@@ -77,14 +78,19 @@
throws LogConfigurationException {
String serviceName = baseClass.getName();
- String serviceFileName = "/META-INF/services/" + serviceName;
+ String serviceFileName = "META-INF/services/" + serviceName;
InputStream is;
if (baseLoader == null) {
// Don't call baseClass.getClassLoader here, as that may cause
// a SecurityException in some environments. Just use the method
// on the Class object which should have the same effect.
- is = baseClass.getResourceAsStream(serviceFileName);
+ //
+ // Note that when using Class.getResourceAsStream, we need a slash
+ // on the front of the path to prevent the class packagename being
+ // prefixed to the resource. However we must NOT put a slash on the
+ // front when using ClassLoader.getResourceAsStream!
+ is = baseClass.getResourceAsStream("/" + serviceFileName);
} else {
is = baseLoader.getResourceAsStream(serviceFileName);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org