`
deyum
  • 浏览: 35888 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Beanshell : Setting variables in WebHarvest scripts

    博客分类:
  • Web
阅读更多
print("sys.isVariableDefined(\"headerList2\"):" + sys.isVariableDefined("headerList2"));


sys (即SystemUtilities) 的getVar( )的取值顺序是:先从FunctionContext中取,再从Scraper的Context中取。
<var/>的取值是:会从传入的Context实例中取,如果<var/>标签中<Fuction/>标签中,当然传入的是FunctionContext。

SystemUtilities.java

public Variable getVar(String varName) {
    CallProcessor runningFunction = scraper.getRunningFunction();
    ScraperContext activeContext = runningFunction == null ? scraper.getContext() : runningFunction.getFunctionContext();
    return activeContext.getVar(varName);
}



SetContextVar.java只有下面这个invoke方法(看到interpreter得到的Context是当前Context而不只是scraper.getContext()得到的Context)
这是一个BeanShell的预定义方法(关于BeanShell中预定义方法的使用,参见BeanShell的用户手册的Compiled Commands一节)。

public static void invoke(Interpreter interpreter, CallStack callstack, String name, Object value) {
    try {
        ScraperContext context = (ScraperContext) interpreter.get(ScriptEngine.CONTEXT_VARIABLE_NAME);
        if (context != null) {
            context.setVar(name, value);
        }
    } catch (EvalError e) {
        throw new ScriptException("Cannot get web-Harvest context from interpreter: " + e.getMessage(), e);
    }
}


下面是BeanShell脚本引擎的创建过程堆栈:

org.webharvest.runtime.scripting.BeanShellScriptEngine.BeanShellScriptEngine(Map)
	org.webharvest.definition.ScraperConfiguration.createScriptEngine(Map, String)
		org.webharvest.definition.ScraperConfiguration.createScriptEngine(Map)
			org.webharvest.runtime.processors.CallProcessor.CallProcessor(CallDef, ScraperConfiguration, Scraper)


在构造CallProcessor时传入的就是FunctionContext:

public CallProcessor(CallDef callDef, ScraperConfiguration configuration, Scraper scraper) {
        super(callDef);
        CallProcessor runningFunction = scraper.getRunningFunction();
        ScraperContext callerContext = runningFunction == null ? scraper.getContext() : runningFunction.getFunctionContext();

        try {
        	this.functionContext = new ScraperContext(scraper, callerContext);
        	this.scriptEngine = configuration.createScriptEngine(functionContext);
        	this.callDef = callDef;
	} catch (Exception e) {
		e.printStackTrace();
	}
    }



org.webharvest.runtime.variables.ListVariable headerList = new org.webharvest.runtime.variables.ListVariable();
String tmpHeader = "";
for ( org.webharvest.utils.KeyValuePair item : http.headers ) {
 	tmpHeader = "header (" + item.getKey() + ") is: "+ item.getValue() ;
 	headerList.addVariable(new org.webharvest.runtime.variables.NodeVariable(tmpHeader));
}
print("====headerList:" + headerList);
sys.defineVariable("headerList2", headerList);
//print("sys.isVariableDefined(\"headerList2\"):" + sys.isVariableDefined("headerList2"));
//print("====headerList2:" + headerList2);
//print("====sys.getVar(\"headerList2\"):" + sys.getVar("headerList2"));


<loop item="respHeader" index="i">
	<list>
	    <var name="headerList2"/>
	</list>
	<body>
		<log message=" ${i} : ${respHeader}" level="debug"/>
	</body>
</loop>

 

 

分享到:
评论

相关推荐

    beanshell:Beanshell脚本语言

    BeanShell-简单的Java脚本 BeanShell的官方活动项目主页。注意:待发布新版本唯一推荐的版本是master分支的手动构建。 对旧版本的支持达到了行尾,只能接受针对主版本的问题和拉取请求。 下一个版本将是概述的...

    bean shell 相关JAR 包

    Bean Shell 是一个轻量级的Java脚本环境,它允许用户在运行时动态地执行Java代码,进行交互式编程或自动化任务。这个压缩包包含了Bean Shell的核心组件和一些相关资源,便于用户在Java环境中进行脚本操作。...

    iso8583-server-simulator-beanshell:使用一个beanshell作为请求侦听器的ISO8583服务器模拟器

    在本项目中,我们关注的是一个特定实现——"iso8583-server-simulator-beanshell",它利用了Beanshell脚本语言作为请求监听器。Beanshell是一个轻量级、动态的Java脚本环境,允许开发者在运行时执行和修改Java代码,...

    bsh2.0源码

    bsh(BeanShell)是一个轻量级的、动态的Java语言解释器,它允许在运行时执行Java语法和一些扩展语法的脚本。作为Java开发工具,bsh提供了一个强大的环境,开发者可以快速测试代码片段、原型设计、自动化任务,甚至...

    beanshell的使用,介绍以及源码

    在实践中,你可以通过以下步骤学习 Beanshell: 1. 下载 Beanshell 源码,通常以 `.jar` 文件形式提供。 2. 使用反编译工具(如jd-gui)查看源码,了解其内部工作原理。 3. 实验并调试 Beanshell 脚本,观察其如何...

    bsh-2.0b6-API文档-中文版.zip

    Maven坐标:org.apache-extras.beanshell:bsh:2.0b6; 标签:apache、extras、beanshell、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译...

    bsh-2.0b6-API文档-中英对照版.zip

    Maven坐标:org.apache-extras.beanshell:bsh:2.0b6; 标签:apache、extras、beanshell、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...

    用BeanShell来运行java脚本

    标题中的“用BeanShell来运行Java脚本”指的是利用BeanShell这个开源库在Java环境中执行动态的、交互式的Java代码。BeanShell是一个轻量级的Java Scripting引擎,它允许你在运行时执行Java代码,无需编译,极大地...

    BeanShell帮助文档和jar包

    BeanShell 是一个轻量级的Java脚本语言,它允许开发者使用类似JavaScript的语法来编写和执行Java代码。这个“BeanShell帮助文档和jar包”包含了一切你需要开始使用BeanShell的资源。以下是对BeanShell及其相关文件的...

    jmeter-BeanShell简介

    【标题】:“深入理解JMeter中的BeanShell组件” 【描述】:“本文将详细介绍JMeter的BeanShell组件,包括其使用场景、内置变量和方法,帮助读者掌握如何在接口测试中运用BeanShell进行脚本编写。” 【标签】:...

    BeanShell

    BeanShell 是一个轻量级的Java脚本环境,它允许开发者使用类似JavaScript的语法来编写和执行Java代码。BeanShell 的设计目标是提供一个灵活、动态的工具,用于测试、原型设计、脚本以及对Java应用程序进行调试。由于...

    beanshell 源码

    Beanshell 是一个轻量级的Java脚本引擎,它允许你在运行时动态执行Java代码。这个源码包可能包含了 Beanshell 的完整源代码,对于学习和理解其内部工作原理非常有帮助。Beanshell 可以作为Java应用程序的一部分,...

    beanshell 源码 jar doc sound

    Beanshell 是一个轻量级的Java脚本引擎,它允许用户在运行时直接执行Java语法的脚本。这个压缩包包含三个重要的组成部分:`bsh-2.0b4.jar`、`bshjavadoc.zip` 和 `beanshell` 文件夹,这些都是与Beanshell相关的资源...

    用BeanShell实现公式管理

    【标题】: 使用BeanShell构建公式管理系统的实践 【描述】: 在复杂的企业级应用如SCM、CRM和ERP中,常常需要用户根据自身需求调整计算参数,以满足特定时期的业务规则。例如,商品折扣率、员工奖金计算等都需要动态...

    BeanShell和Mozilla Rhino详细介绍和例子

    BeanShell和Mozilla Rhino是两种在Java环境中用于动态执行和脚本化的工具,它们各自具有独特的特性和用途。 BeanShell是一个轻量级的Java代码解释器,它的主要特点是免费、可嵌入和具备面向对象的脚本语言特性。...

    how to use beanshell to debug java application

    ### 使用BeanShell调试Java应用程序的关键知识点 #### 一、引言 在评估Java应用程序的安全性时,特别是客户端-服务器架构的应用程序,往往涉及到修改代码、编译、部署、测试等一系列繁琐的过程。当无法获取源代码时...

    BeanShell介绍

    **BeanShell介绍** BeanShell是一款轻量级的Java脚本引擎,它允许用户在运行时动态地编写和执行Java代码。作为一个开源项目,BeanShell在IT行业中被广泛应用于快速原型开发、测试、脚本自动化以及教学等场景。其...

Global site tag (gtag.js) - Google Analytics