本实例是GODU动态脚本的一个技术简化版,演示了java调groovy,groovy又调java的运行过程。 测试用例: package com.boco.godu.integration;
import java.util.HashMap;
import java.util.Map;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import com.boco.godu.gapi.ConnManager;
import com.boco.godu.gapi.Constants;
import com.boco.godu.gapi.IConnection;
import com.boco.godu.gapi.IResult;
public class SimpleExpScriptTest {
private static final Logger logger = Logger
. getLogger (SimpleExpScriptTest. class );
private IConnection conn ;
@Before
public void setUp() throws Exception {
conn = ConnManager. getDataConn ( "10.0.2.47" , 1234,
"<7001>" , "goduapp" ,
Constants. TYPE_DATA_CMD_SYNC , 5);
}
&#64;After
public void tearDown() throws Exception {
conn .close();
}
&#64;Test
public void testImport() throws Exception {
Map params &#61; new HashMap();
params.put( "cmd1" , "ls" );
params.put( "id" , 3);
IResult result &#61; conn .execScript( "ImportEx" , params);
}
}
Java代码&#xff1a;
IConnection.java
package com.boco.godu.gapi;
public interface IConnection {
......// other method definition
public IResult execScript (String name, Map params)
throws Exception;
}
GoduDataConnection.java
package com.boco.godu.gapi.conn;
public class GoduDataConnection extends AbstractConnection {
......// Other IConnection Methods
public IResult execScript(String name, Map params)
throws Exception {
String[] roots &#61; new String[] { "e:/MyDoc/Project/GoduScript" };
GroovyScriptEngine gse &#61; new GroovyScriptEngine(roots);
Binding binding &#61; new Binding();
for (Entry item : params.entrySet()) {
binding.setVariable(item.getKey(), item.getValue());
}
GapiIosessionUtils giu &#61; new GapiIosessionUtils();
binding.setVariable( "giu" , giu );
gse.run(name, binding);
System. out .println(binding.getVariable( "result" )); // 运行结果是这里输出“11”&#xff0c;即3*2&#43;5。
return null ;
}
}
GapiIosessionUtils.java
package com.boco.godu.gapi.util;
public class GapiIosessionUtils {
......// other method
public int testM( int x, int y) {
return x * 2 &#43; y;
}
}
groovy代码&#xff1a;
e:\MyDoc\Project\GoduScript\ImportEx
def send(cmd){
def result &#61; giu.testM(cmd,5);
return result;
}
result &#61; send(id)
运行过程
测试用例 ->GoduDataConnection.java -> groovy代码 -> GapiIosessionUtils.java&#xff1b;
总结
binding的setVariable中定义的变量(如giu是com.boco.godu.gapi.util.GapiIosessionUtils对象&#xff0c;id是int型数据)在groovy脚本里直接使用&#xff0c;可以出现在脚本的任何地方&#xff0c;且无需声明类型&#xff0c;无需使用import导入定义该变量的类(例如对于giu来说&#xff0c;如果在java代码中&#xff0c;需要import com.boco.godu.gapi.util.GapiIosessionUtils)。