in src/main/java/org/apache/bsf/BSFManager.java [551:610]
public static String getLangFromFilename(final String fileName) throws BSFException {
final int dotIndex = fileName.lastIndexOf(".");
if (dotIndex != -1) {
final String extn = fileName.substring(dotIndex + 1);
String langval = (String) extn2Lang.get(extn);
String lang = null;
int index, loops = 0;
if (langval != null) {
final ClassLoader tccl = Thread.currentThread().getContextClassLoader(); // rgf, 2009-09-10
while ((index = langval.indexOf(":", 0)) != -1) {
// Great. Multiple language engines registered
// for this extension.
// Try to find first one that is in our classpath.
lang = langval.substring(0, index);
langval = langval.substring(index + 1);
loops++;
// Test to see if in classpath
String engineName = null;
try {
engineName = (String) registeredEngines.get(lang);
boolean bTryDefinedClassLoader = false;
if (tccl != null) // context CL available, try it first
{
try {
tccl.loadClass(engineName);
} catch (final ClassNotFoundException cnfe) {
bTryDefinedClassLoader = true;
}
}
if (bTryDefinedClassLoader || tccl == null) // not found, try defined CL next
{
definedClassLoader.loadClass(engineName);
}
} catch (final ClassNotFoundException cnfe2) {
// Bummer.
lang = langval;
continue;
}
// Got past that? Good.
break;
}
if (loops == 0) {
lang = langval;
}
}
if (lang != null && lang != "") {
return lang;
}
}
throw new BSFException(BSFException.REASON_OTHER_ERROR,
"[BSFManager.getLangFromFilename] file extension missing or unknown: " + "unable to determine language for '" + fileName + "'");
}