无法在Bean Shell脚本中注入服务,也无法在Bean Shell中调用服务方法



例如:

i在TextArea中输入Java代码:

package com.test.webapp.controller;
import org.activiti.engine.impl.persistence.entity
import com.test.webapp.controller;
import java.util.HashMap;

HashMap message = new HashMap();
message.put("table","TEST");
message.put("ID","1236");
message.put("NAME","Three");
message.put("AREA","chennai");
JavaTest javaTest = new JavaTest();
javaTest.saveMessage(message);

我在我的java控制器中接收到上述代码为" javaevent"的字符串

public @ResponseBody void executeJavaCode(@RequestParam("javaEvent") String javaEvent) {
    Interpreter interpreter = new Interpreter();  
    interpreter.eval(javaEvent);
}


public void saveMessage( Map<String, String> tableDetails) {
    System.out.println("===============mess============="+message.size());
    }    

Java代码中的Savemessage方法被罚款。但是在Savemessage中调用任何服务方法会引发Null指针异常。服务没有在这里注入。如何在bean脚本中调用服务方法?

例如:(我需要)

public void saveMessage( Map<String, String> tableDetails) {
    System.out.println("===============mess============="+message.size());
    testService.someMethod(tableDetails);
    }  

您如何期望呼叫后在服务实例中访问javatest的实例或hashmap的实例?评估脚本后,除非Javatest设置了一些静态变量,否则这些对象有资格获得GC?

如果您想在脚本评估后保持参考,请考虑将变量传递到脚本中:

public @ResponseBody void executeJavaCode(@RequestParam("javaEvent") 
       String javaEvent) {
    Interpreter interpreter = new Interpreter();  
    message = new HashMap();
    interpreter.set("message", message); 
    interpreter.eval(javaEvent);
    // do stuff to message
}

另外,您也可以从脚本返回变量。

最新更新