Boilerplate: 脚本 API Facade,boilerplatefacade,/** * This d
分享于 点击 27205 次 点评:12
Boilerplate: 脚本 API Facade,boilerplatefacade,/** * This d
/** * This default implementation tries to create and use a JavaScript script(ing) engine. * * @author Octavian Theodor NITA * @version 1.0, Feb 27, 2012 */public class ScriptEngineFacade { private static final Logger logger = Logger.getLogger(ScriptEngineFacade.class); private final ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("JavaScript"); public void put(String name, Object value) { scriptEngine.put(name, value); } public void eval(String scriptName) throws IOException, ScriptException { InputStream script = getClass().getClassLoader().getResourceAsStream(scriptName); if (script == null) { // cannot find the script in the classpath... try in the file system script = new FileInputStream(scriptName); } try { scriptEngine.eval(new InputStreamReader(script)); } finally { try { script.close(); } catch (IOException e) { logger.warn("cannot close stream for script " + scriptName + "; ignoring...", e); } } } public <T> T value(String expr, Class<T> klass) { if (klass == null) { throw new IllegalArgumentException("cannot cast the value of " + expr + " using a null class name"); } if (expr == null) { return null; } try { return klass.cast(scriptEngine.eval(expr)); } catch (NullPointerException e) { logger.error("cannot get the value of " + expr + ": a null or undefined reference was encountered", e); return null; } catch (ClassCastException e) { logger.error("cannot get the value of " + expr + ": expected value type for is " + klass.getName(), e); return null; } catch (ScriptException e) { logger.error("cannot get the value of " + expr + ": cannot evaluate expression", e); return null; } }}
用户点评