JavaScript代碼如下:
function Get_script(This_Service,This_Field,Parent)
{
if(Parent==null)
{
var l1=This_Service.Get_entity_class_list();
This_Field.setComponent_Value_List(l1);
}
else
{
This_Field.Set_field_value_consistent_with_parent(Parent);
}
}
Java 有關代碼如下:
private Object Run_script_function_2(String Function,ArrayList<Object> Parameter_List)
{
if(Function==null)
{
return null;
}
if(Parameter_List==null)
{
return null;
}
Function=Function.replace("*", "_");
ScriptEngine graaljsEngine = new ScriptEngineManager().getEngineByName("graal.js");;
try
{
graaljsEngine.eval(Function);
}
catch (Exception e)
{
return null;
}
Invocable Invocable_Engine = (Invocable) graaljsEngine;
Object Script_Return = Run_script_function_3(Invocable_Engine,Parameter_List);
return Script_Return;
}
private Object Run_script_function_3(Invocable Invocable_Engine,ArrayList<Object> Parameter_List)
{
Object Script_Return = null;
int l=Parameter_List.size();
try
{
switch(l)
{
case 0:
{
Script_Return=Invocable_Engine.invokeFunction("Get_script");
break;
}
case 1:
{
Script_Return=Invocable_Engine.invokeFunction("Get_script",Parameter_List.get (0));
break;
}
case 2:
{
Script_Return= Invocable_Engine.invokeFunction("Get_script",Parameter_List.get ( 0),Parameter_List.get(1));
break;
}
case 3:
{
Script_Return= Invocable_Engine.invokeFunction("Get_script",Parameter_List.get(0),Parameter_List.get(1),Parameter_List.get(2));
break;
}
case 4:
{
Script_Return= Invocable_Engine.invokeFunction("Get_script",Parameter_List.get(0),Parameter_List.get(1),Parameter_List.get(2),Parameter_List.get(3));
break;
}
case 5:
{
Script_Return= Invocable_Engine.invokeFunction("Get_script",Parameter_List.get(0),Parameter_List.get(1),Parameter_List.get(2),Parameter_List.get(3),Parameter_List.get(4));
break;
}
case 6:
{
Script_Return= Invocable_Engine.invokeFunction("Get_script",Parameter_List.get(0),Parameter_List.get(1),Parameter_List.get(2),Parameter_List.get(3),Parameter_List.get(4),Parameter_List.get(5));
break;
}
case 7:
{
Script_Return= Invocable_Engine.invokeFunction("Get_script",Parameter_List.get(0),Parameter_List.get(1),Parameter_List.get(2),Parameter_List.get(3),Parameter_List.get(4),Parameter_List.get(5),Parameter_List.get(6));
break;
}
case 8:
{
Script_Return= Invocable_Engine.invokeFunction("Get_script",Parameter_List.get(0),Parameter_List.get(1),Parameter_List.get(2),Parameter_List.get(3),Parameter_List.get(4),Parameter_List.get(5),Parameter_List.get(6),Parameter_List.get(7));
break;
}
case 9:
{
Script_Return= Invocable_Engine.invokeFunction("Get_script",Parameter_List.get(0),Parameter_List.get(1),Parameter_List.get(2),Parameter_List.get(3),Parameter_List.get(4),Parameter_List.get(5),Parameter_List.get(6),Parameter_List.get(7),Parameter_List.get(8));
break;
}
}
}
catch (Exception e)
{
return e;
}
return Script_Return;
}
報錯:
javax.script.ScriptException: org.graalvm.polyglot.PolyglotException: TypeError: invokeMember (Get_entity_class_list) on com.stepforward.mirrorworld.p3_application_bean.Groupunit.Groupunit_Service@6c634767 failed due to: Unknown identifier: Get_entity_class_list
“This_Service”即“Groupunit_Service”,是Java類,“Get_entity_class_list” 是該類的方法。
ScriptEngine 配置一下 polyglot.js.allowAllAccess=true
试试 put 加上 This_Service
ScriptEngine engine = new ScriptEngineManager().getEngineByName("graal.js");
Bindings bindings = engine.createBindings();
bindings.put("polyglot.js.allowAllAccess", true);
bindings.put("This_Service", new This_Service());
engine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);