无法在bean shell脚本中注入服务或在bean shell中调用服务方法

时间:2014-02-05 08:59:31

标签: java beanshell

例如:

我在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中调用任何服务方法会抛出空指针异常。这里没有注入服务.. 如何在bean脚本中调用service方法?

例如:(我需要这样)

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

    }  

1 个答案:

答案 0 :(得分:0)

您希望在调用后可以在服务实例中访问JavaTest或HashMap的实例吗?在脚本评估之后,这些对象是否符合GC的条件,除非JavaTest设置了一些静态变量?

如果您希望在脚本评估后保留引用,请考虑将变量传递到脚本中:

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
}

或者,您也可以从脚本中返回变量。