Java和Groovy脚本互相调用实例
本实例是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,
"< aa ><7001><administrator><autocmd>" , "goduapp" ,
Constants. TYPE_DATA_CMD_SYNC , 5);
}
@After
public void tearDown() throws Exception {
conn .close();
}
@Test
public void testImport() throws Exception {
Map<String, String> params = new HashMap<String, String>();
params.put( "cmd1" , "ls" );
params.put( "id" , 3);
IResult result = conn .execScript( "ImportEx" , params);
}
}
Java代码:
IConnection.java
package com.boco.godu.gapi;
public interface IConnection {
......// other method definition
public IResult execScript (String name, Map<String, Object> 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<String, Object> params)
throws Exception {
String[] roots = new String[] { "e:/MyDoc/Project/GoduScript" };
GroovyScriptEngine gse = new GroovyScriptEngine(roots);
Binding binding = new Binding();
for (Entry<String, Object> item : params.entrySet()) {
binding.setVariable(item.getKey(), item.getValue());
}
GapiIosessionUtils giu = new GapiIosessionUtils();
binding.setVariable( "giu" , giu );
gse.run(name, binding);
System. out .println(binding.getVariable( "result" )); // 运行结果是这里输出“11”,即3*2+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 + y;
}
}
groovy代码:
e:\MyDoc\Project\GoduScript\ImportEx
def send(cmd){
def result = giu.testM(cmd,5);
return result;
}
result = send(id)
运行过程
测试用例 ->GoduDataConnection.java -> groovy代码 -> GapiIosessionUtils.java;
总结
binding的setVariable中定义的变量(如giu是com.boco.godu.gapi.util.GapiIosessionUtils对象,id是int型数据)在groovy脚本里直接使用,可以出现在脚本的任何地方,且无需声明类型,无需使用import导入定义该变量的类(例如对于giu来说,如果在java代码中,需要import com.boco.godu.gapi.util.GapiIosessionUtils)。
Java和Groovy脚本互相调用实例的更多相关文章
- 使用 Java 执行 groovy 脚本或方法
1. 引入依赖 <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groo ...
- Java执行groovy脚本的两种方式
记录Java执行groovy脚本的两种方式,简单粗暴: 一种是通过脚本引擎ScriptEngine提供的eval(String)方法执行脚本内容:一种是执行groovy脚本: 二者都通过Invocab ...
- Java中通过脚本引擎调用js函数
import java.io.*; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.scri ...
- java项目中rmi远程调用实例
1.创建一个学生实体类Student.java: package com.RMIdemo.entity; @SuppressWarnings("serial") public cl ...
- Java执行groovy脚本
Binding binding = new Binding(); binding.setVariable("foo", new Integer(2)); GroovyShell s ...
- java 和groovy的混合使用
在应用中,我们可以在一个Java类.一个Groovy类或者一个Groovy脚本中实现某个特定功能.之后可以在Java类.Groovy类或Groovy脚本中调用该功能. 在groovy 使用groovy ...
- C程序与Lua脚本相互调用
Lua脚本是一种可用于C程序开发/测试的工具,本篇介绍一下C程序与Lua脚本如何进行相互调用,更加详细的操作参见<Programing in Lua>.本文分为3个部分:1.Windows ...
- Java 调用 groovy 脚本文件,groovy 访问 MongoDB
groovy 访问 MongoDB 示例: shell.groovy package db import com.gmongo.GMongoClient import com.mongodb.Basi ...
- JAVA嵌入运行Groovy脚本
摘自: http://shift-alt-ctrl.iteye.com/blog/1938238 . 最近设计一个数据统计系统,系统中上百种数据统计维度,而且这些数据统计的指标可能随时会调整.如果基于 ...
随机推荐
- hdu 4686 Arc of Dream 自己推 矩阵快速幂
A.mat[0][0] = 1, A.mat[0][1] = 1, A.mat[0][2] = 0, A.mat[0][3] = 0, A.mat[0][4] = 0; A.mat[1][0] = 0 ...
- 用阻塞队列实现一个生产者消费者模型?synchronized和lock有什么区别?
多线程当中的阻塞队列 主要实现类有 ArrayBlockingQueue是一个基于数组结构的有界阻塞队列,此队列按FIFO原则对元素进行排序 LinkedBlockingQueue是一个基于链表结构的 ...
- WebService:CXF的JaxWsDynamicClientFactory实现调用WebService接口
首先需要引入依赖jar包 #版本只供参考,具体看项目 <dependency> <grouId>org.apache.cxf</grouId> <artifa ...
- 资源:Hadoop安装包下载路径
下载路径 Hadoop所有版本:http://archive.apache.org/dist/hadoop/common/
- leetcode第157场周赛5213
当时居然没想到,我真菜,就当记录一下了. 思路分析: 分为两种: 第一种:走两步的,无论是奇或偶的位置,只要走两步,代价为0: 第二种:走一步的,就是偶数到奇数,或者奇数到偶数,代价为1: 那么实际上 ...
- Linux | 配置主机名称
配置主机名称 为了便于在局域 网中查找某台特定的主机,或者对主机进行区分,除了要有 IP 地址外,还要为主机配置一个主机名,主机之间可以通过这个类似于域名的名称来相互访问. 在 Linux 系统中,主 ...
- 前端-js基础
HTML三把利剑之一,浏览器具有解析js的能力 一.js基础 在HTML中可以将JavaScript/JS的代码写在head中,被script标签所包裹,当浏览器解释HTML时,遇到style标签时, ...
- Scala学习——函数高级操作
scala函数高级操作 一.字符串高级操作 多行字符串和插值 package top.ruandb.scala.Course06 object StringApp { def main(args: A ...
- Linux 安装exclipse
1,在官网下载:https://www.eclipse.org/downloads/packages/ 2,前提:安装好jdk 3,使用命令解压:tar -zxvf eclipse_xxxxxx.ta ...
- 图像处理算法的仿真平台之VGA时序
一 概述 图像处理算法一般是用matla或OpenCV实现的,若是用FPGA实现,设计思路差别极大.matlab和opencv的优势:这些工具的优势在于可以方便地载入图像文件,或输出数据到图像文件, ...