From 990243c7851b0c2bc6c5f21a3b61deed0af7712e Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Fri, 16 Apr 2004 07:48:49 +0000 Subject: [PATCH] Set context classloader in , PR: 24802 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@276320 13f79535-47bb-0310-9956-ffa450edef68 --- WHATSNEW | 3 +++ .../tools/ant/taskdefs/XSLTProcess.java | 22 +++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/WHATSNEW b/WHATSNEW index 81555b2d2..5bc3012be 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -113,6 +113,9 @@ Fixed bugs: * and behaved identically. +* now sets the context classloader if you've specified a nested + . Bugzilla report 24802. + Other changes: -------------- diff --git a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java b/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java index 319624d96..fcfc39090 100644 --- a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java +++ b/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java @@ -120,6 +120,18 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { */ private boolean reuseLoadedStylesheet = true; + /** + * AntClassLoader for the nested <classpath> - if set. + * + *

We keep this here in order to reset the context classloader + * in execute. We can't use liaison.getClass().getClassLoader() + * since the actual liaison class may have been loaded by a loader + * higher up (system classloader, for example).

+ * + * @since Ant 1.6.2 + */ + private AntClassLoader loader = null; + /** * Creates a new XSLTProcess Task. */ @@ -170,6 +182,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { if (inFile != null && !inFile.exists()) { throw new BuildException("input file " + inFile.toString() + " does not exist", getLocation()); } + try { if (baseDir == null) { baseDir = getProject().resolveFile("."); @@ -233,6 +246,10 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { } } } finally { + if (loader != null) { + loader.resetThreadContextLoader(); + loader = null; + } liaison = null; stylesheetLoaded = false; baseDir = savedBaseDir; @@ -379,8 +396,9 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { if (classpath == null) { return Class.forName(classname); } else { - AntClassLoader al = getProject().createClassLoader(classpath); - Class c = Class.forName(classname, true, al); + loader = getProject().createClassLoader(classpath); + loader.setThreadContextLoader(); + Class c = Class.forName(classname, true, loader); return c; } }