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 . 最近设计一个数据统计系统,系统中上百种数据统计维度,而且这些数据统计的指标可能随时会调整.如果基于 ...
随机推荐
- Java高质量面试总结
面试 一般都是由浅到深去问,思路是: 先考察基础是否过关,因为基础知识决定了一个技术人员发展的上限 再通过深度考察是否有技术热情和深度以及技术的广度 同时可能会提出一些质疑和挑战来考察候选人能否与有不 ...
- 实现opcache加速php7.X
一.环境准备 操作系统:Centos8.3.2011 软件:PHP7.2.24 二.安装过程 1.安装软件 [20:03:29 root@centos8 src]#dnf -y install php ...
- CentOS-yum安装chrome+chromeDriver+xvfb
安装chrome 创建yum源文件 $ vim /etc/yum.repos.d/google-chrome.repo [google-chrome] name=google-chrome baseu ...
- 其他:Windows10安装自带的Linux
1.首先我们要打开Windows功能 2.在这里把勾打上 3.然后打开 设置 --- 更新和安全 --- 针对开发人员 --- (选择)开发人员模式 --- 确定启动 就行了 4.打开PowerShe ...
- linux 中只显示目录的几种方法
ls 参数 -a 表示显示所有文件,包含隐藏文件-d 表示显示目录自身的属性,而不是目录中的内容-F 选项会在显示目录条目时,在目录后加一个/ ls -l total 8 drwxrwxr-x 2 r ...
- bugKu管理员系统
先F12看看,有啥发现的,发现一段注释... 感谢那个群友分享了怎么辨别base64编码,通常是A-Z,a-z,0-9,+,/,=.最后通常有0个到2个等号,我也成功用在线解码器,确实是base64编 ...
- 架构之:REST和RESTful
目录 简介 REST REST和RESTful API REST架构的基本原则 Uniform interface统一的接口 Client–server 客户端和服务器端独立 Stateless无状态 ...
- Spring boot中相关的注解
一.相关类中使用的注解 @RestController:REST风格的控制器 @RequestMapping:配置URL和方法之间的映射 @SpringBootApplication:应用程序入口类 ...
- abp知识
领域驱动开发的特点:1.分层更多,前期代码量大,后期维护方便2.业务进行了专业的领域划分,业务逻辑更加清晰,便于业务扩展.3.代码工程高内聚,更加精简.4.主要是解决复杂业务逻辑编写问题 为什么要使用 ...
- python使用笔记10--os,sy模块
os操作文件,可以输入绝对路径,也可以输入相对路径 windows使用路径用\连接 Linux使用路径用/连接 但是我的电脑是windows 用/也没问题 1.os常用方法 1 import os 2 ...