java解析js_Java ScriptEngine 解析js

1、脚本引擎① 通过脚本名称获取:ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");

pastingScriptEngineManager manager = newScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("JavaScript");

2、方法调用

Java虚拟机支持脚本的意义在于实现函数式的编程,即脚本中最重要的便是方法。一些脚本引擎允许使用者单独调用脚本中的某个方法,支持此操作的脚本引擎可以通过实现javax.script.Invocable接口,支持顶层方法或者某对象中成员方法的调用。使用方法调用时最好先检查脚本引擎是否实现了Invocable接口,JavaSE中的JavaScript引擎已实现了Invocable接口。

① 在Java中调用脚本中的顶层方法

public voidinvokeFunction()throwsScriptException, NoSuchMethodException {

ScriptEngine engine = getJavaScriptEngine();

String scriptText = "function greet(name) { println('Hello, ' + name); } ";

engine.eval(scriptText);

Invocable invocable = (Invocable) engine;

invocable.invokeFunction("greet","Alex");

}

3、示例代码

Reader scriptReader = null ;

try {

String configFileRootDir = System.getProperty("configFileRootDir") ;

if(StringUtils.isNotBlank(configFileRootDir)){

File jsFile = new File(configFileRootDir+File.separator+"collectscript"+File.separator+scriptFileName);

LOGGER.debug("scriptReader jsFile.getAbsolutePath(): "+jsFile.getAbsolutePath());

scriptReader = new InputStreamReader(new FileInputStream(jsFile)) ;

}else{

scriptReader = new InputStreamReader(JavaScriptJMXUtil.class.getClassLoader().getResourceAsStream("collectscript/" + scriptFileName));

}

ScriptEngineManager manager = new ScriptEngineManager() ;

ScriptEngine engine = manager.getEngineByName("JavaScript");

engine.eval(scriptReader) ;

if(engine instanceof Invocable){

Invocable invEngine = (Invocable)engine ;

Map resultMap = (HashMap)invEngine.invokeFunction("collectEntranceFunction",kpiArray,jmx_hostname,jmx_port,jmx_username,jmx_pwd,mBeanUri);

}

return resultMap ;

}

被调用的 test.js 文件

var logger = org.slf4j.LoggerFactory.getLogger("jmx_activemq_kpitemp.js");

var util = new com.ai.toptea.jmx.monitor.javascript.platform.CassandraPlatformUtil();  //java 类实现公共方法

function collectEntranceFunction(kpiArray,jmx_hostname,jmx_port,jmx_username,jmx_pwd) {

logger.info("execute jmx_activemq_kpitemp.js...");

var msc = util.initMBeanServerConnAndReturn(jmx_hostname,jmx_port,jmx_username,jmx_pwd);

var resultMap = new java.util.HashMap();

for(var i=0 ; i

resultMap.put(kpiArray[i],this[kpiArray[i]](msc));

}

util.closeJMXConnector();//关闭JMXConnector连接

logger.info("execute jmx_activemq_kpitemp.js completed.");

return resultMap;

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值