My patch is attatched. I also posted bug 2669 regarding this issue: http://nagoya.apache.org/bugzilla/show_bug.cgi?id=2669 - Gidado > I am aware of this issue, and in talking with Craig, the solution is to add > a boolean useContextClassLoader to digester to turn this on and off. I will > be updating the Commons Digester to handle this hopefully in the next week > or two. If you want to send a patch, feel free ;-) > > Scott Sanders
Index: ObjectCreateRule.java =================================================================== RCS file: /home/cvspublic/jakarta-commons/digester/src/java/org/apache/commons/digester/ObjectCreateRule.java,v retrieving revision 1.2 diff -u -r1.2 ObjectCreateRule.java --- ObjectCreateRule.java 2001/05/12 17:25:54 1.2 +++ ObjectCreateRule.java 2001/07/18 14:12:57 @@ -153,16 +153,19 @@ // 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 { - clazz = ctxLoader.loadClass(realClassName); - } + // 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(); + boolean ucl = digester.getUseContextClassLoader(); + if (ctxLoader!=null && digester.getUseContextClassLoader()) { + System.out.println("UseCCL [" + ucl + "] Using CCL: " + ctxLoader); + clazz = ctxLoader.loadClass(realClassName); + } else { + System.out.println("UseCCL [" + ucl + "] Using Class.forName()"); + clazz = Class.forName(realClassName); + } Object instance = clazz.newInstance(); digester.push(instance); Index: Digester.java =================================================================== RCS file: /home/cvspublic/jakarta-commons/digester/src/java/org/apache/commons/digester/Digester.java,v retrieving revision 1.6 diff -u -r1.6 Digester.java --- Digester.java 2001/06/24 17:02:21 1.6 +++ Digester.java 2001/07/18 14:13:02 @@ -239,6 +239,13 @@ protected PrintWriter writer = null; + /** + * Do we want to use the Context ClassLoader when loading classes + * for instantiating new objects? Default is <code>false</code>. + */ + protected boolean useContextClassLoader = false; + + // ----------------------------------------------------------- Properties @@ -388,6 +395,33 @@ public void setWriter(PrintWriter writer) { this.writer = writer; + + } + + + + /** + * Return the logging writer for this Digester. + */ + 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; }