the places where newInstances are made and Throwable is caught. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@278346 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -29,6 +29,7 @@ import java.util.Vector; | |||||
| import org.apache.tools.ant.input.DefaultInputHandler; | import org.apache.tools.ant.input.DefaultInputHandler; | ||||
| import org.apache.tools.ant.input.InputHandler; | import org.apache.tools.ant.input.InputHandler; | ||||
| import org.apache.tools.ant.launch.AntMain; | import org.apache.tools.ant.launch.AntMain; | ||||
| import org.apache.tools.ant.util.ClasspathUtils; | |||||
| import org.apache.tools.ant.util.FileUtils; | import org.apache.tools.ant.util.FileUtils; | ||||
| @@ -698,17 +699,13 @@ public class Main implements AntMain { | |||||
| for (int i = 0; i < listeners.size(); i++) { | for (int i = 0; i < listeners.size(); i++) { | ||||
| String className = (String) listeners.elementAt(i); | String className = (String) listeners.elementAt(i); | ||||
| try { | |||||
| BuildListener listener = | |||||
| (BuildListener) Class.forName(className).newInstance(); | |||||
| if (project != null) { | |||||
| project.setProjectReference(listener); | |||||
| } | |||||
| project.addBuildListener(listener); | |||||
| } catch (Throwable exc) { | |||||
| throw new BuildException("Unable to instantiate listener " | |||||
| + className, exc); | |||||
| BuildListener listener = | |||||
| (BuildListener) ClasspathUtils.newInstance(className, | |||||
| Main.class.getClassLoader(), BuildListener.class); | |||||
| if (project != null) { | |||||
| project.setProjectReference(listener); | |||||
| } | } | ||||
| project.addBuildListener(listener); | |||||
| } | } | ||||
| } | } | ||||
| @@ -725,22 +722,11 @@ public class Main implements AntMain { | |||||
| if (inputHandlerClassname == null) { | if (inputHandlerClassname == null) { | ||||
| handler = new DefaultInputHandler(); | handler = new DefaultInputHandler(); | ||||
| } else { | } else { | ||||
| try { | |||||
| handler = (InputHandler) | |||||
| (Class.forName(inputHandlerClassname).newInstance()); | |||||
| if (project != null) { | |||||
| project.setProjectReference(handler); | |||||
| } | |||||
| } catch (ClassCastException e) { | |||||
| String msg = "The specified input handler class " | |||||
| + inputHandlerClassname | |||||
| + " does not implement the InputHandler interface"; | |||||
| throw new BuildException(msg); | |||||
| } catch (Exception e) { | |||||
| String msg = "Unable to instantiate specified input handler " | |||||
| + "class " + inputHandlerClassname + " : " | |||||
| + e.getClass().getName(); | |||||
| throw new BuildException(msg); | |||||
| handler = (InputHandler) ClasspathUtils.newInstance( | |||||
| inputHandlerClassname, Main.class.getClassLoader(), | |||||
| InputHandler.class); | |||||
| if (project != null) { | |||||
| project.setProjectReference(handler); | |||||
| } | } | ||||
| } | } | ||||
| project.setInputHandler(handler); | project.setInputHandler(handler); | ||||
| @@ -760,17 +746,13 @@ public class Main implements AntMain { | |||||
| BuildLogger logger = null; | BuildLogger logger = null; | ||||
| if (loggerClassname != null) { | if (loggerClassname != null) { | ||||
| try { | try { | ||||
| Class loggerClass = Class.forName(loggerClassname); | |||||
| logger = (BuildLogger) (loggerClass.newInstance()); | |||||
| } catch (ClassCastException e) { | |||||
| logger = (BuildLogger) ClasspathUtils.newInstance( | |||||
| loggerClassname, Main.class.getClassLoader(), | |||||
| BuildLogger.class); | |||||
| } catch (BuildException e) { | |||||
| System.err.println("The specified logger class " | System.err.println("The specified logger class " | ||||
| + loggerClassname | + loggerClassname | ||||
| + " does not implement the BuildLogger interface"); | |||||
| throw new RuntimeException(); | |||||
| } catch (Exception e) { | |||||
| System.err.println("Unable to instantiate specified logger " | |||||
| + "class " + loggerClassname + " : " | |||||
| + e.getClass().getName()); | |||||
| + " could not be used because " + e.getMessage()); | |||||
| throw new RuntimeException(); | throw new RuntimeException(); | ||||
| } | } | ||||
| } else { | } else { | ||||
| @@ -27,11 +27,13 @@ import java.util.Enumeration; | |||||
| import java.util.StringTokenizer; | import java.util.StringTokenizer; | ||||
| import org.apache.tools.ant.BuildEvent; | import org.apache.tools.ant.BuildEvent; | ||||
| import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.DefaultLogger; | import org.apache.tools.ant.DefaultLogger; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.taskdefs.email.EmailAddress; | import org.apache.tools.ant.taskdefs.email.EmailAddress; | ||||
| import org.apache.tools.ant.taskdefs.email.Message; | import org.apache.tools.ant.taskdefs.email.Message; | ||||
| import org.apache.tools.ant.taskdefs.email.Mailer; | import org.apache.tools.ant.taskdefs.email.Mailer; | ||||
| import org.apache.tools.ant.util.ClasspathUtils; | |||||
| import org.apache.tools.ant.util.DateUtils; | import org.apache.tools.ant.util.DateUtils; | ||||
| import org.apache.tools.ant.util.StringUtils; | import org.apache.tools.ant.util.StringUtils; | ||||
| import org.apache.tools.mail.MailMessage; | import org.apache.tools.mail.MailMessage; | ||||
| @@ -239,14 +241,15 @@ public class MailLogger extends DefaultLogger { | |||||
| String message) { | String message) { | ||||
| // convert the replyTo string into a vector of emailaddresses | // convert the replyTo string into a vector of emailaddresses | ||||
| Mailer mailer = null; | Mailer mailer = null; | ||||
| try { | |||||
| mailer = | |||||
| (Mailer) Class.forName("org.apache.tools.ant.taskdefs.email.MimeMailer") | |||||
| .newInstance(); | |||||
| } catch (Throwable e) { | |||||
| log("Failed to initialise MIME mail: " + e.getMessage()); | |||||
| return; | |||||
| } | |||||
| try { | |||||
| mailer = (Mailer) ClasspathUtils.newInstance( | |||||
| "org.apache.tools.ant.taskdefs.email.MimeMailer", | |||||
| MailLogger.class.getClassLoader(), Mailer.class); | |||||
| } catch (BuildException e) { | |||||
| Throwable t = e.getCause() == null ? e : e.getCause(); | |||||
| log("Failed to initialise MIME mail: " + t.getMessage()); | |||||
| return; | |||||
| } | |||||
| Vector replyToList = vectorizeEmailAddresses(replyToString); | Vector replyToList = vectorizeEmailAddresses(replyToString); | ||||
| mailer.setHost(host); | mailer.setHost(host); | ||||
| mailer.setPort(port); | mailer.setPort(port); | ||||
| @@ -20,6 +20,7 @@ package org.apache.tools.ant.taskdefs.compilers; | |||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| import org.apache.tools.ant.util.ClasspathUtils; | |||||
| import org.apache.tools.ant.util.JavaEnvUtils; | import org.apache.tools.ant.util.JavaEnvUtils; | ||||
| /** | /** | ||||
| @@ -162,21 +163,9 @@ public final class CompilerAdapterFactory { | |||||
| */ | */ | ||||
| private static CompilerAdapter resolveClassName(String className) | private static CompilerAdapter resolveClassName(String className) | ||||
| throws BuildException { | throws BuildException { | ||||
| try { | |||||
| Class c = Class.forName(className); | |||||
| Object o = c.newInstance(); | |||||
| return (CompilerAdapter) o; | |||||
| } catch (ClassNotFoundException cnfe) { | |||||
| throw new BuildException("Compiler Adapter '" + className | |||||
| + "' can\'t be found.", cnfe); | |||||
| } catch (ClassCastException cce) { | |||||
| throw new BuildException(className + " isn\'t the classname of " | |||||
| + "a compiler adapter.", cce); | |||||
| } catch (Throwable t) { | |||||
| // for all other possibilities | |||||
| throw new BuildException("Compiler Adapter " + className | |||||
| + " caused an interesting exception.", t); | |||||
| } | |||||
| return (CompilerAdapter) ClasspathUtils.newInstance(className, | |||||
| CompilerAdapterFactory.class.getClassLoader(), | |||||
| CompilerAdapter.class); | |||||
| } | } | ||||
| } | } | ||||
| @@ -25,8 +25,10 @@ import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.DirectoryScanner; | import org.apache.tools.ant.DirectoryScanner; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| import org.apache.tools.ant.listener.MailLogger; | |||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
| import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
| import org.apache.tools.ant.util.ClasspathUtils; | |||||
| /** | /** | ||||
| * A task to send SMTP email. This is a refactoring of the SendMail and | * A task to send SMTP email. This is a refactoring of the SendMail and | ||||
| @@ -399,14 +401,16 @@ public class EmailTask extends Task { | |||||
| if (encoding.equals(MIME) | if (encoding.equals(MIME) | ||||
| || (encoding.equals(AUTO) && !autoFound)) { | || (encoding.equals(AUTO) && !autoFound)) { | ||||
| try { | try { | ||||
| mailer = (Mailer) Class.forName( | |||||
| "org.apache.tools.ant.taskdefs.email.MimeMailer") | |||||
| .newInstance(); | |||||
| mailer = (Mailer) ClasspathUtils.newInstance( | |||||
| "org.apache.tools.ant.taskdefs.email.MimeMailer", | |||||
| EmailTask.class.getClassLoader(), Mailer.class); | |||||
| autoFound = true; | autoFound = true; | ||||
| log("Using MIME mail", Project.MSG_VERBOSE); | log("Using MIME mail", Project.MSG_VERBOSE); | ||||
| } catch (Throwable e) { | |||||
| log("Failed to initialise MIME mail: " | |||||
| + e.getMessage(), Project.MSG_WARN); | |||||
| } catch (BuildException e) { | |||||
| Throwable t = e.getCause() == null ? e : e.getCause(); | |||||
| log("Failed to initialise MIME mail: " + t.getMessage(), | |||||
| Project.MSG_WARN); | |||||
| return; | |||||
| } | } | ||||
| } | } | ||||
| // SMTP auth only allowed with MIME mail | // SMTP auth only allowed with MIME mail | ||||
| @@ -423,13 +427,16 @@ public class EmailTask extends Task { | |||||
| if (encoding.equals(UU) | if (encoding.equals(UU) | ||||
| || (encoding.equals(AUTO) && !autoFound)) { | || (encoding.equals(AUTO) && !autoFound)) { | ||||
| try { | try { | ||||
| mailer = | |||||
| (Mailer) Class.forName("org.apache.tools.ant.taskdefs.email.UUMailer") | |||||
| .newInstance(); | |||||
| mailer = (Mailer) ClasspathUtils.newInstance( | |||||
| "org.apache.tools.ant.taskdefs.email.UUMailer", | |||||
| EmailTask.class.getClassLoader(), Mailer.class); | |||||
| autoFound = true; | autoFound = true; | ||||
| log("Using UU mail", Project.MSG_VERBOSE); | log("Using UU mail", Project.MSG_VERBOSE); | ||||
| } catch (Throwable e) { | |||||
| log("Failed to initialise UU mail", Project.MSG_WARN); | |||||
| } catch (BuildException e) { | |||||
| Throwable t = e.getCause() == null ? e : e.getCause(); | |||||
| log("Failed to initialise UU mail: " + t.getMessage(), | |||||
| Project.MSG_WARN); | |||||
| return; | |||||
| } | } | ||||
| } | } | ||||
| // try plain format | // try plain format | ||||
| @@ -18,6 +18,7 @@ package org.apache.tools.ant.taskdefs.optional.javah; | |||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.ProjectComponent; | import org.apache.tools.ant.ProjectComponent; | ||||
| import org.apache.tools.ant.util.ClasspathUtils; | |||||
| import org.apache.tools.ant.util.JavaEnvUtils; | import org.apache.tools.ant.util.JavaEnvUtils; | ||||
| /** | /** | ||||
| @@ -77,20 +78,8 @@ public class JavahAdapterFactory { | |||||
| * isn't an instance of JavahAdapter. | * isn't an instance of JavahAdapter. | ||||
| */ | */ | ||||
| private static JavahAdapter resolveClassName(String className) | private static JavahAdapter resolveClassName(String className) | ||||
| throws BuildException { | |||||
| try { | |||||
| Class c = Class.forName(className); | |||||
| Object o = c.newInstance(); | |||||
| return (JavahAdapter) o; | |||||
| } catch (ClassNotFoundException cnfe) { | |||||
| throw new BuildException("Can't load " + className, cnfe); | |||||
| } catch (ClassCastException cce) { | |||||
| throw new BuildException(className | |||||
| + " is not a Javah adapter", cce); | |||||
| } catch (Throwable t) { | |||||
| // for all other possibilities | |||||
| throw new BuildException(className + " caused an interesting " | |||||
| + "exception.", t); | |||||
| } | |||||
| throws BuildException { | |||||
| return (JavahAdapter) ClasspathUtils.newInstance(className, | |||||
| JavahAdapterFactory.class.getClassLoader(), JavahAdapter.class); | |||||
| } | } | ||||
| } | } | ||||
| @@ -18,6 +18,7 @@ package org.apache.tools.ant.taskdefs.optional.native2ascii; | |||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.ProjectComponent; | import org.apache.tools.ant.ProjectComponent; | ||||
| import org.apache.tools.ant.util.ClasspathUtils; | |||||
| import org.apache.tools.ant.util.JavaEnvUtils; | import org.apache.tools.ant.util.JavaEnvUtils; | ||||
| /** | /** | ||||
| @@ -77,20 +78,10 @@ public class Native2AsciiAdapterFactory { | |||||
| * isn't an instance of Native2AsciiAdapter. | * isn't an instance of Native2AsciiAdapter. | ||||
| */ | */ | ||||
| private static Native2AsciiAdapter resolveClassName(String className) | private static Native2AsciiAdapter resolveClassName(String className) | ||||
| throws BuildException { | |||||
| try { | |||||
| Class c = Class.forName(className); | |||||
| Object o = c.newInstance(); | |||||
| return (Native2AsciiAdapter) o; | |||||
| } catch (ClassNotFoundException cnfe) { | |||||
| throw new BuildException("Can't load " + className, cnfe); | |||||
| } catch (ClassCastException cce) { | |||||
| throw new BuildException(className | |||||
| + " is not a Native2Ascii adapter", cce); | |||||
| } catch (Throwable t) { | |||||
| // for all other possibilities | |||||
| throw new BuildException(className + " caused an interesting " | |||||
| + "exception.", t); | |||||
| } | |||||
| throws BuildException | |||||
| { | |||||
| return (Native2AsciiAdapter) ClasspathUtils.newInstance(className, | |||||
| Native2AsciiAdapterFactory.class.getClassLoader(), | |||||
| Native2AsciiAdapter.class); | |||||
| } | } | ||||
| } | } | ||||
| @@ -34,6 +34,7 @@ import java.util.Set; | |||||
| import java.util.HashSet; | import java.util.HashSet; | ||||
| import java.io.File; | import java.io.File; | ||||
| import org.apache.tools.ant.util.ClasspathUtils; | |||||
| import org.apache.tools.ant.util.ScriptRunner; | import org.apache.tools.ant.util.ScriptRunner; | ||||
| /** | /** | ||||
| @@ -272,27 +273,13 @@ public class ScriptDef extends DefBase { | |||||
| */ | */ | ||||
| ClassLoader loader = createLoader(); | ClassLoader loader = createLoader(); | ||||
| Class instanceClass = null; | |||||
| try { | |||||
| instanceClass = Class.forName(classname, true, loader); | |||||
| } catch (Throwable e) { | |||||
| // try normal method | |||||
| try { | |||||
| instanceClass = Class.forName(classname); | |||||
| } catch (Throwable e2) { | |||||
| throw new BuildException("scriptdef: Unable to load " | |||||
| + "class " + classname + " for nested element <" | |||||
| + elementName + ">", e2); | |||||
| } | |||||
| try | |||||
| { | |||||
| instance = ClasspathUtils.newInstance(classname, loader); | |||||
| } catch (BuildException e) { | |||||
| instance = ClasspathUtils.newInstance(classname, ScriptDef.class.getClassLoader()); | |||||
| } | } | ||||
| try { | |||||
| instance = instanceClass.newInstance(); | |||||
| } catch (Throwable e) { | |||||
| throw new BuildException("scriptdef: Unable to create " | |||||
| + "element of class " + classname + " for nested " | |||||
| + "element <" + elementName + ">", e); | |||||
| } | |||||
| getProject().setProjectReference(instance); | getProject().setProjectReference(instance); | ||||
| } | } | ||||
| @@ -19,6 +19,7 @@ package org.apache.tools.ant.taskdefs.rmic; | |||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| import org.apache.tools.ant.util.ClasspathUtils; | |||||
| /** | /** | ||||
| @@ -28,10 +29,10 @@ import org.apache.tools.ant.Task; | |||||
| */ | */ | ||||
| public final class RmicAdapterFactory { | public final class RmicAdapterFactory { | ||||
| /** The error message to be used when the compiler cannot be found. */ | /** The error message to be used when the compiler cannot be found. */ | ||||
| public static final String ERROR_UNKNOWN_COMPILER = "Cannot find the compiler or class: "; | |||||
| public static final String ERROR_UNKNOWN_COMPILER = "Class not found: "; | |||||
| /** The error message to be used when the class is not an rmic adapter. */ | /** The error message to be used when the class is not an rmic adapter. */ | ||||
| public static final String ERROR_NOT_RMIC_ADAPTER = "Not an rmic adapter: "; | |||||
| public static final String ERROR_NOT_RMIC_ADAPTER = "Class of unexpected Type: "; | |||||
| /** If the compiler has this name use a default compiler. */ | /** If the compiler has this name use a default compiler. */ | ||||
| public static final String DEFAULT_COMPILER = "default"; | public static final String DEFAULT_COMPILER = "default"; | ||||
| @@ -93,20 +94,7 @@ public final class RmicAdapterFactory { | |||||
| */ | */ | ||||
| private static RmicAdapter resolveClassName(String className) | private static RmicAdapter resolveClassName(String className) | ||||
| throws BuildException { | throws BuildException { | ||||
| try { | |||||
| Class c = Class.forName(className); | |||||
| Object o = c.newInstance(); | |||||
| return (RmicAdapter) o; | |||||
| } catch (ClassNotFoundException cnfe) { | |||||
| throw new BuildException(ERROR_UNKNOWN_COMPILER + className, | |||||
| cnfe); | |||||
| } catch (ClassCastException cce) { | |||||
| throw new BuildException(ERROR_NOT_RMIC_ADAPTER + className, | |||||
| cce); | |||||
| } catch (Throwable t) { | |||||
| // for all other possibilities | |||||
| throw new BuildException(className + " caused an interesting " | |||||
| + "exception.", t); | |||||
| } | |||||
| return (RmicAdapter) ClasspathUtils.newInstance(className, | |||||
| RmicAdapterFactory.class.getClassLoader(), RmicAdapter.class); | |||||
| } | } | ||||
| } | } | ||||
| @@ -235,18 +235,50 @@ public class ClasspathUtils { | |||||
| * @return The fresh object instance | * @return The fresh object instance | ||||
| * @throws BuildException when loading or instantiation failed. | * @throws BuildException when loading or instantiation failed. | ||||
| */ | */ | ||||
| public static Object newInstance( | |||||
| String className, | |||||
| ClassLoader userDefinedLoader) { | |||||
| return newInstance(className, userDefinedLoader, Object.class); | |||||
| } | |||||
| /** | |||||
| * Creates a fresh object instance of the specified classname. | |||||
| * | |||||
| * <p> This uses the userDefinedLoader to load the specified class, | |||||
| * and then makes an instance using the default no-argument constructor. | |||||
| * </p> | |||||
| * | |||||
| * @param className the full qualified class name to load. | |||||
| * @param userDefinedLoader the classloader to use. | |||||
| * @param expectedType the Class that the result should be assignment | |||||
| * compatible with. (No ClassCastException will be thrown in case | |||||
| * the result of this method is casted to the expectedType) | |||||
| * @return The fresh object instance | |||||
| * @throws BuildException when loading or instantiation failed. | |||||
| * @since Ant 1.7 | |||||
| */ | |||||
| public static Object newInstance( | public static Object newInstance( | ||||
| String className, | String className, | ||||
| ClassLoader userDefinedLoader) { | |||||
| ClassLoader userDefinedLoader, | |||||
| Class expectedType) { | |||||
| try { | try { | ||||
| Class clazz = userDefinedLoader.loadClass(className); | |||||
| Class clazz = Class.forName(className, true, userDefinedLoader); | |||||
| Object o = clazz.newInstance(); | Object o = clazz.newInstance(); | ||||
| if (!expectedType.isInstance(o)) | |||||
| { | |||||
| throw new BuildException( | |||||
| "Class of unexpected Type: " | |||||
| + className | |||||
| + " expected :" | |||||
| + expectedType); | |||||
| } | |||||
| return o; | return o; | ||||
| } catch (ClassNotFoundException e) { | } catch (ClassNotFoundException e) { | ||||
| throw new BuildException( | throw new BuildException( | ||||
| "Class " | |||||
| + className | |||||
| + " not found by the specific classLoader.", | |||||
| "Class not found: " | |||||
| + className, | |||||
| e); | e); | ||||
| } catch (InstantiationException e) { | } catch (InstantiationException e) { | ||||
| throw new BuildException( | throw new BuildException( | ||||
| @@ -262,9 +294,32 @@ public class ClasspathUtils { | |||||
| + ". Specified class should have a " | + ". Specified class should have a " | ||||
| + "public constructor.", | + "public constructor.", | ||||
| e); | e); | ||||
| } catch (LinkageError e) { | |||||
| throw new BuildException( | |||||
| "Class " | |||||
| + className | |||||
| + " could not be loaded because of an invalid dependency.", | |||||
| e); | |||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * Creates a fresh object instance of the specified classname. | |||||
| * | |||||
| * <p> This uses the userDefinedLoader to load the specified class, | |||||
| * and then makes an instance using the default no-argument constructor. | |||||
| * </p> | |||||
| * | |||||
| * @param className the full qualified class name to load. | |||||
| * @param userDefinedLoader the classloader to use. | |||||
| * @param expectedType the Class that the result should be assignment | |||||
| * compatible with. (No ClassCastException will be thrown in case | |||||
| * the result of this method is casted to the expectedType) | |||||
| * @return The fresh object instance | |||||
| * @throws BuildException when loading or instantiation failed. | |||||
| */ | |||||
| /** | /** | ||||
| * Obtains a delegate that helps out with classic classpath configuration. | * Obtains a delegate that helps out with classic classpath configuration. | ||||
| * | * | ||||
| @@ -19,6 +19,7 @@ package org.apache.tools.ant.util.regexp; | |||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.util.ClasspathUtils; | |||||
| /** | /** | ||||
| * Simple Factory Class that produces an implementation of | * Simple Factory Class that produces an implementation of | ||||
| @@ -99,13 +100,10 @@ public class RegexpMatcherFactory { | |||||
| * @exception BuildException if an error occurs | * @exception BuildException if an error occurs | ||||
| */ | */ | ||||
| protected RegexpMatcher createInstance(String className) | protected RegexpMatcher createInstance(String className) | ||||
| throws BuildException { | |||||
| try { | |||||
| Class implClass = Class.forName(className); | |||||
| return (RegexpMatcher) implClass.newInstance(); | |||||
| } catch (Throwable t) { | |||||
| throw new BuildException(t); | |||||
| } | |||||
| throws BuildException | |||||
| { | |||||
| return (RegexpMatcher) ClasspathUtils.newInstance(className, | |||||
| RegexpMatcherFactory.class.getClassLoader(), RegexpMatcher .class); | |||||
| } | } | ||||
| /** | /** | ||||