sanders 01/07/19 13:55:52
Modified: digester/src/java/org/apache/commons/digester
CallMethodRule.java Digester.java
ObjectCreateRule.java SetNextRule.java
SetTopRule.java
Log:
Update to be able to enable/disable use of the context classloader.
Partial patch contributed by Immanuel, Gidado-Yisa <[EMAIL PROTECTED]>
Should we be setting the default to true(use) or false(do not use)?
Revision Changes Path
1.3 +14 -11
jakarta-commons/digester/src/java/org/apache/commons/digester/CallMethodRule.java
Index: CallMethodRule.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/CallMethodRule.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- CallMethodRule.java 2001/05/12 17:25:52 1.2
+++ CallMethodRule.java 2001/07/19 20:55:52 1.3
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/CallMethodRule.java,v
1.2 2001/05/12 17:25:52 sanders Exp $
- * $Revision: 1.2 $
- * $Date: 2001/05/12 17:25:52 $
+ * $Header:
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/CallMethodRule.java,v
1.3 2001/07/19 20:55:52 sanders Exp $
+ * $Revision: 1.3 $
+ * $Date: 2001/07/19 20:55:52 $
*
* ====================================================================
*
@@ -77,7 +77,7 @@
*
* @author Craig McClanahan
* @author Scott Sanders
- * @version $Revision: 1.2 $ $Date: 2001/05/12 17:25:52 $
+ * @version $Revision: 1.3 $ $Date: 2001/07/19 20:55:52 $
*/
public class CallMethodRule extends Rule {
@@ -129,16 +129,19 @@
this.paramTypes = new Class[paramTypes.length];
for (int i = 0; i < this.paramTypes.length; i++) {
try {
- // Check to see if the context class loader is set,
- // and if so, use it, as it may be set in server-side
- // environments and Class.forName() may cause issues
- ClassLoader ctxLoader =
+
+ // Check to see if the context class loader is set, and if so,
use
+ // it (only if allowed to by the associated digester), as it may
+ // be set in server-side environments and Class.forName() may
+ // cause issues
+ ClassLoader ctxLoader =
Thread.currentThread().getContextClassLoader();
- if (ctxLoader == null) {
- this.paramTypes[i] = Class.forName(paramTypes[i]);
- } else {
+ if (ctxLoader!=null && digester.getUseContextClassLoader()) {
this.paramTypes[i] = ctxLoader.loadClass(paramTypes[i]);
+ } else {
+ this.paramTypes[i] = Class.forName(paramTypes[i]);
}
+
} catch (ClassNotFoundException e) {
this.paramTypes[i] = null; // Will cause NPE later
}
1.7 +38 -4
jakarta-commons/digester/src/java/org/apache/commons/digester/Digester.java
Index: Digester.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/Digester.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- Digester.java 2001/06/24 17:02:21 1.6
+++ Digester.java 2001/07/19 20:55:52 1.7
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/Digester.java,v
1.6 2001/06/24 17:02:21 sanders Exp $
- * $Revision: 1.6 $
- * $Date: 2001/06/24 17:02:21 $
+ * $Header:
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/Digester.java,v
1.7 2001/07/19 20:55:52 sanders Exp $
+ * $Revision: 1.7 $
+ * $Date: 2001/07/19 20:55:52 $
*
* ====================================================================
*
@@ -105,7 +105,8 @@
* even from the same thread.</p>
*
* @author Craig McClanahan
- * @version $Revision: 1.6 $ $Date: 2001/06/24 17:02:21 $
+ * @author Scott Sanders
+ * @version $Revision: 1.7 $ $Date: 2001/07/19 20:55:52 $
*/
public class Digester extends DefaultHandler {
@@ -143,6 +144,13 @@
/**
+ * Do we want to use the Context ClassLoader when loading classes
+ * for instantiating new objects? Default is <code>false</code>.
+ */
+ protected boolean useContextClassLoader = false;
+
+
+ /**
* The body text of the current element.
*/
protected StringBuffer bodyText = new StringBuffer();
@@ -390,6 +398,32 @@
this.writer = writer;
}
+
+
+ /**
+ * Return the boolean as to whether the context classloader should be used.
+ */
+ public boolean getUseContextClassLoader() {
+
+ return useContextClassLoader;
+
+ }
+
+
+ /**
+ * Determine whether to use the Context ClassLoader (the one found by
+ * calling <code>Thread.currentThread().getContextClassLoader()</code>)
+ * to resolve/load classes that are defined in various rules. If not
+ * using Context ClassLoader, then the class-loading defaults to
+ * using the calling-class' ClassLoader.
+ *
+ * @param boolean determines whether to use Context ClassLoader.
+ */
+ public void setUseContextClassLoader(boolean use) {
+
+ useContextClassLoader = use;
+
+ }
// ---------------------------------------------- DocumentHandler Methods
1.3 +12 -12
jakarta-commons/digester/src/java/org/apache/commons/digester/ObjectCreateRule.java
Index: ObjectCreateRule.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/ObjectCreateRule.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ObjectCreateRule.java 2001/05/12 17:25:54 1.2
+++ ObjectCreateRule.java 2001/07/19 20:55:52 1.3
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/ObjectCreateRule.java,v
1.2 2001/05/12 17:25:54 sanders Exp $
- * $Revision: 1.2 $
- * $Date: 2001/05/12 17:25:54 $
+ * $Header:
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/ObjectCreateRule.java,v
1.3 2001/07/19 20:55:52 sanders Exp $
+ * $Revision: 1.3 $
+ * $Date: 2001/07/19 20:55:52 $
*
* ====================================================================
*
@@ -74,7 +74,7 @@
*
* @author Craig McClanahan
* @author Scott Sanders
- * @version $Revision: 1.2 $ $Date: 2001/05/12 17:25:54 $
+ * @version $Revision: 1.3 $ $Date: 2001/07/19 20:55:52 $
*/
public class ObjectCreateRule extends Rule {
@@ -153,15 +153,15 @@
// Instantiate the new object and push it on the context stack
Class clazz = null;
- // Check to see if the context class loader is set,
- // and if so, use it, as it may be set in server-side
- // environments and Class.forName() may cause issues
- ClassLoader ctxLoader =
- Thread.currentThread().getContextClassLoader();
- if (ctxLoader == null) {
- clazz = Class.forName(realClassName);
- } else {
+ // Check to see if the context class loader is set, and if so, use
+ // it (only if allowed to by the associated digester), as it may
+ // be set in server-side environments and Class.forName() may
+ // cause issues
+ ClassLoader ctxLoader = Thread.currentThread().getContextClassLoader();
+ if (ctxLoader!=null && digester.getUseContextClassLoader()) {
clazz = ctxLoader.loadClass(realClassName);
+ } else {
+ clazz = Class.forName(realClassName);
}
Object instance = clazz.newInstance();
1.3 +12 -11
jakarta-commons/digester/src/java/org/apache/commons/digester/SetNextRule.java
Index: SetNextRule.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/SetNextRule.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SetNextRule.java 2001/05/12 17:25:54 1.2
+++ SetNextRule.java 2001/07/19 20:55:52 1.3
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/SetNextRule.java,v
1.2 2001/05/12 17:25:54 sanders Exp $
- * $Revision: 1.2 $
- * $Date: 2001/05/12 17:25:54 $
+ * $Header:
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/SetNextRule.java,v
1.3 2001/07/19 20:55:52 sanders Exp $
+ * $Revision: 1.3 $
+ * $Date: 2001/07/19 20:55:52 $
*
* ====================================================================
*
@@ -75,7 +75,7 @@
*
* @author Craig McClanahan
* @author Scott Sanders
- * @version $Revision: 1.2 $ $Date: 2001/05/12 17:25:54 $
+ * @version $Revision: 1.3 $ $Date: 2001/07/19 20:55:52 $
*/
public class SetNextRule extends Rule {
@@ -153,15 +153,16 @@
Class paramTypes[] = new Class[1];
if (paramType != null) {
- // Check to see if the context class loader is set,
- // and if so, use it, as it may be set in server-side
- // environments and Class.forName() may cause issues
- ClassLoader ctxLoader =
+ // Check to see if the context class loader is set, and if so, use
+ // it (only if allowed to by the associated digester), as it may
+ // be set in server-side environments and Class.forName() may
+ // cause issues
+ ClassLoader ctxLoader =
Thread.currentThread().getContextClassLoader();
- if (ctxLoader == null) {
- paramTypes[0] = Class.forName(paramType);
- } else {
+ if (ctxLoader!=null && digester.getUseContextClassLoader()) {
paramTypes[0] = ctxLoader.loadClass(paramType);
+ } else {
+ paramTypes[0] = Class.forName(paramType);
}
} else {
1.3 +12 -11
jakarta-commons/digester/src/java/org/apache/commons/digester/SetTopRule.java
Index: SetTopRule.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/SetTopRule.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SetTopRule.java 2001/05/12 17:25:55 1.2
+++ SetTopRule.java 2001/07/19 20:55:52 1.3
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/SetTopRule.java,v
1.2 2001/05/12 17:25:55 sanders Exp $
- * $Revision: 1.2 $
- * $Date: 2001/05/12 17:25:55 $
+ * $Header:
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/SetTopRule.java,v
1.3 2001/07/19 20:55:52 sanders Exp $
+ * $Revision: 1.3 $
+ * $Date: 2001/07/19 20:55:52 $
*
* ====================================================================
*
@@ -74,7 +74,7 @@
*
* @author Craig McClanahan
* @author Scott Sanders
- * @version $Revision: 1.2 $ $Date: 2001/05/12 17:25:55 $
+ * @version $Revision: 1.3 $ $Date: 2001/07/19 20:55:52 $
*/
public class SetTopRule extends Rule {
@@ -152,15 +152,16 @@
Class paramTypes[] = new Class[1];
if (paramType != null) {
- // Check to see if the context class loader is set,
- // and if so, use it, as it may be set in server-side
- // environments and Class.forName() may cause issues
- ClassLoader ctxLoader =
+ // Check to see if the context class loader is set, and if so, use
+ // it (only if allowed to by the associated digester), as it may
+ // be set in server-side environments and Class.forName() may
+ // cause issues
+ ClassLoader ctxLoader =
Thread.currentThread().getContextClassLoader();
- if (ctxLoader == null) {
- paramTypes[0] = Class.forName(paramType);
- } else {
+ if (ctxLoader!=null && digester.getUseContextClassLoader()) {
paramTypes[0] = ctxLoader.loadClass(paramType);
+ } else {
+ paramTypes[0] = Class.forName(paramType);
}
} else {