@@ -21,9 +21,14 @@ import org.apache.bsf.BSFException;
import org.apache.bsf.BSFManager;
import org.apache.bsf.BSFManager;
import org.apache.bsf.BSFEngine;
import org.apache.bsf.BSFEngine;
import org.apache.tools.ant.BuildException;
import java.util.Iterator;
import java.util.Iterator;
import java.util.Hashtable;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.util.ReflectUtil;
import org.apache.tools.ant.util.ScriptRunnerBase;
import org.apache.tools.ant.util.ScriptRunnerBase;
/**
/**
@@ -43,27 +48,39 @@ public class ScriptRunner extends ScriptRunnerBase {
private BSFEngine engine;
private BSFEngine engine;
private BSFManager manager;
private BSFManager manager;
/**
* Get the name of the manager prefix.
* @return "bsf"
*/
public String getManagerName() {
return "bsf";
}
/**
/**
* Check if bsf supports the language.
* Check if bsf supports the language.
* @return true if bsf can create an engine for this language.
* @return true if bsf can create an engine for this language.
*/
*/
public boolean supportsLanguage() {
public boolean supportsLanguage() {
if (manager != null) {
return true;
Hashtable table = (Hashtable) ReflectUtil.getField(
new BSFManager(), "registeredEngines");
String engineClassName = (String) table.get(getLanguage());
if (engineClassName == null) {
getProject().log(
"This is no BSF engine class for language '"
+ getLanguage() + "'",
Project.MSG_VERBOSE);
return false;
}
}
checkLanguage();
ClassLoader origLoader = replaceContextLoader();
try {
try {
BSFManager m = createManager();
BSFEngine e =
engine != null
? engine
: m.loadScriptingEngine(getLanguage());
return e != null;
} catch (Exception ex) {
getScriptClassLoader().loadClass(engineClassName);
return true;
} catch (Throwable ex) {
getProject().log(
"unable to create BSF engine class for language '"
+ getLanguage() + "'",
ex,
Project.MSG_VERBOSE);
return false;
return false;
} finally {
restoreContextLoader(origLoader);
}
}
}
}