Adding js functionality to existing ScriptObjectMirror
A. Sundararajan
sundararajan.athijegannathan at oracle.com
Mon Mar 23 14:26:01 UTC 2015
You could implement additional function in Java as given below..
import javax.script.*;
import jdk.nashorn.api.scripting.*;
public class Main {
public static void main(String[] a) throws Exception {
ScriptEngineManager m = new ScriptEngineManager();
ScriptEngine e = m.getEngineByName("nashorn");
ScriptObjectMirror obj = (ScriptObjectMirror)
e.eval("var obj = ({ foo: 33 }); obj");
// implement a function object in Java using AbstractJavaObject
obj.setMember("func", new AbstractJSObject() {
@Override
// hook for actual call of "func"
public Object call(Object thiz, Object... args) {
return args[0].toString().toUpperCase();
}
@Override
// yes, I am a function!
public boolean isFunction() { return true; }
});
// call it from script
System.out.println(e.eval("obj.func('hello')"));
// call it from java
System.out.println(obj.callMember("func", "hello"));
}
}
Thanks
-Sundar
On Monday 23 March 2015 06:36 PM, BURRIS Thomas wrote:
> Hi ... I have a cache of ScriptObjectMirrors (SOM) that wrap some compiled javascript and -- at runtime -- I need to inject an additional function into the SOMs. Something like this
>
> ScriptObjectMirror som = SOMPool.get();
> som.setMember("someFn", <WHAT-HERE?>);
>
> // so that I am now enabled to do this:
> som.callMember("someFn", "arg1", "arg2");
>
>
> Possible? I've tried a bunch of approaches, none have worked.
>
> thanks!
>
> This email and any attachments are intended solely for the use of the individual or entity to whom it is addressed and may be confidential and/or privileged.
>
> If you are not one of the named recipients or have received this email in error,
>
> (i) you should not read, disclose, or copy it,
>
> (ii) please notify sender of your receipt by reply email and delete this email and all attachments,
>
> (iii) Dassault Systemes does not accept or assume any liability or responsibility for any use of or reliance on this email.
>
> For other languages, go to http://www.3ds.com/terms/email-disclaimer
More information about the nashorn-dev
mailing list