JSR223を使ってJavaからJavaScriptを実行する時にJavaのクラスを利用する
JSR223スクリプト言語サポートでは、JavaScriptなどのスクリプト言語をJavaから利用するためのAPIを提供しています。Java6ではJavaScript(Rhino)がサポートされており、ライブラリを使えばJRubyやJythonなどが利用できます。
利用方法は簡単です。
public static void eval(String script) throws ScriptException { ScriptEngineManager mng = new ScriptEngineManager(); ScriptEngine engine = mng.getEngineByName("javascript"); engine.eval(script); }
例えばScriptはこんな感じ。
print("Hello World.");
さらに、JavaScriptの中でJavaのクラスを使う事もできます。
var now = new java.util.Date(); print(now);
これを使えばFile IOなども記述できます。
ところが・・・
new java.io.File("hoge").delete();
のようにファイルを削除しようとすると次のような例外がthrowされます。
sun.org.mozilla.javascript.internal.EvaluatorException: missing name after . operator
javascriptではdeleteは予約語なので、deleteメソッドが気にくわないのでしょう。
解決方法はこうでした。
new java.io.File("hoge")["delete"]();
参考:http://www.mail-archive.com/dev-tech-js-engine-rhino@lists.mozilla.org/msg01258.html