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

Reply via email to