本实例是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脚本互相调用实例的更多相关文章

  1. 使用 Java 执行 groovy 脚本或方法

    1. 引入依赖 <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groo ...

  2. Java执行groovy脚本的两种方式

    记录Java执行groovy脚本的两种方式,简单粗暴: 一种是通过脚本引擎ScriptEngine提供的eval(String)方法执行脚本内容:一种是执行groovy脚本: 二者都通过Invocab ...

  3. Java中通过脚本引擎调用js函数

    import java.io.*; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.scri ...

  4. java项目中rmi远程调用实例

    1.创建一个学生实体类Student.java: package com.RMIdemo.entity; @SuppressWarnings("serial") public cl ...

  5. Java执行groovy脚本

    Binding binding = new Binding(); binding.setVariable("foo", new Integer(2)); GroovyShell s ...

  6. java 和groovy的混合使用

    在应用中,我们可以在一个Java类.一个Groovy类或者一个Groovy脚本中实现某个特定功能.之后可以在Java类.Groovy类或Groovy脚本中调用该功能. 在groovy 使用groovy ...

  7. C程序与Lua脚本相互调用

    Lua脚本是一种可用于C程序开发/测试的工具,本篇介绍一下C程序与Lua脚本如何进行相互调用,更加详细的操作参见<Programing in Lua>.本文分为3个部分:1.Windows ...

  8. Java 调用 groovy 脚本文件,groovy 访问 MongoDB

    groovy 访问 MongoDB 示例: shell.groovy package db import com.gmongo.GMongoClient import com.mongodb.Basi ...

  9. JAVA嵌入运行Groovy脚本

    摘自: http://shift-alt-ctrl.iteye.com/blog/1938238 . 最近设计一个数据统计系统,系统中上百种数据统计维度,而且这些数据统计的指标可能随时会调整.如果基于 ...

随机推荐

  1. 基于uni-app全端弹框组件uaPopup「兼容h5+小程序+app端|nvue」

    uniapp兼容多端自定义模态弹框组件UAPopup ua-popup 一款轻量级的uniapp自定义弹窗组件.汇集了android.ios和微信弹窗效果(msg消息.alert提示框.dialog对 ...

  2. Python自动化之封装日志模块(一)

    ------------恢复内容开始------------ 简介: 自己也在训练营学习之中,闲来之余,自己写着玩的,主要还是为了学习,希望和前辈和大佬相互学习共进. 日志模块主要有四大组件:日志器, ...

  3. Linux:Ubuntu银河麒麟防火墙操作

    查看防火墙状态 #防火墙状态 sudo ufw status inactive状态是防火墙 关闭 状态 active状态是防火墙 开启 状态 开启防火墙 #开启防火墙 sudo ufw enable ...

  4. error more than one devices and emulator

    问题秒速 莫名的多了一个设备,然后再输入adb shell 解决方法: 1.如果确实有多种设备,要指定设备号 adb -s 设备号 shell(设备号在这里是 emulator-5554,其他同理) ...

  5. Vue | 路由守卫面试常考

    前言 最近在整理基础,欢迎掘友们一起交流学习 结尾有彩蛋哦! Vue Router 路由守卫 导图目录 路由守卫分类 全局路由守卫 单个路由守卫 组件路由守卫 路由守卫执行的完整过程 路由守卫分类 全 ...

  6. 什么是 Acunetix 目标知识库

    随着Acunetix 的最新更新,我们引入了一个称为目标知识库的新功能.每次扫描目标时,Acunetix 都会收集并存储有关它的信息.此信息包括构成站点结构的路径.表单的位置及其输入.Web 应用程序 ...

  7. 递推算法,AI衍生

    引言 最近在刷leetcode算法题的时候,51题很有意思: 题目是这样的: n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击.给你一个整数 n ,返回 ...

  8. STM32笔记二

    1.STM32编程通常有两种方法:一种是寄存器编程,另外一种是固件库编程.寄存器编程是基础,而固件库是寄存器编程的基础上升级而来的编程方法,是需要重点掌握的编程方法. 2.STM32F103采用的是C ...

  9. Outlook配置163邮箱

    一.在163邮箱设置处设置POP3/SMTP/IMAP 二.开启客户端授权码 三.打开Outlook,选择手动设置 选择POP/IMAP 密码是上文中的授权码 点击其它设置,勾选以下选项 点击完成即可

  10. scrapy设置自己的headers referer字段

    1.在middlewares中添加自己的新类: class Mylei(object): def process_request(self,request,spider): referer=reque ...