Author: bodewig Date: Thu Aug 5 18:45:11 2010 New Revision: 982729 URL: http://svn.apache.org/viewvc?rev=982729&view=rev Log: better fix for bug 49271 as suggested by Jesse
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java?rev=982729&r1=982728&r2=982729&view=diff ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java (original) +++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java Thu Aug 5 18:45:11 2010 @@ -108,10 +108,6 @@ public class XSLTProcess extends Matchin /** for resolving entities such as dtds */ private XMLCatalog xmlCatalog = new XMLCatalog(); - /** Name of the TRAX Liaison class */ - private static final String TRAX_LIAISON_CLASS = - "org.apache.tools.ant.taskdefs.optional.TraXLiaison"; - /** Utilities used for file operations */ private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); @@ -340,6 +336,8 @@ public class XSLTProcess extends Matchin return; } try { + setupLoader(); + if (sysProperties.size() > 0) { sysProperties.setSystem(); } @@ -676,13 +674,12 @@ public class XSLTProcess extends Matchin private void resolveProcessor(String proc) throws Exception { String classname; if (proc.equals(PROCESSOR_TRAX)) { - classname = TRAX_LIAISON_CLASS; + liaison = new org.apache.tools.ant.taskdefs.optional.TraXLiaison(); } else { //anything else is a classname - classname = proc; + Class clazz = loadClass(proc); + liaison = (XSLTLiaison) clazz.newInstance(); } - Class clazz = loadClass(classname); - liaison = (XSLTLiaison) clazz.newInstance(); } /** @@ -695,15 +692,26 @@ public class XSLTProcess extends Matchin * @exception Exception if the class could not be loaded. */ private Class loadClass(String classname) throws Exception { - if (classpath == null) { + setupLoader(); + if (loader == null) { return Class.forName(classname); } - loader = getProject().createClassLoader(classpath); - loader.setThreadContextLoader(); return Class.forName(classname, true, loader); } /** + * If a custom classpath has been defined but no loader created + * yet, create the classloader and set it as the context + * classloader. + */ + private void setupLoader() { + if (classpath != null && loader == null) { + loader = getProject().createClassLoader(classpath); + loader.setThreadContextLoader(); + } + } + + /** * Specifies the output name for the styled result from the * <tt>in</tt> attribute; required if <tt>in</tt> is set *