问题标签 [jexl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JexlEngine 构造函数不起作用?(不能应用于给定类型)
我正在尝试初始化一个 JexlEngine 对象,但构造函数不允许我这样做(尽管文档说明它应该这样做)。
这是 JexlEngine 类的文档(在 jexl3 中): https ://people.apache.org/~henrib/jexl-3.0/apidocs/org/apache/commons/jexl3/JexlEngine.html
最初代码与 jexl2 导入一起使用,但我最近将项目转换为 Maven,而不得不换成 jexl3。现在构造函数不再起作用。
我错过了什么吗?
我在 Java 1.8 上的 Netbeans 中运行这个项目 - 它是一个 Maven 项目,包含对 jexl3 的依赖项(但是曾经与 jexl2 一起使用)
我的代码:
根据文档,应该有一个带有 4 个参数的构造函数,因为我正在尝试运行它,但由于某些奇怪的原因,它不会让我运行它。任何想法为什么?(再次 - 它曾经与 Jexl2 一起使用)
错误日志:
java - Jexl 执行动态字符串转换
我正在构建一个使用 JEXL 的评估器。我知道如何在 Jexl 中引入工作区,但是只允许类定义,我需要定义一个方法定义。在以下示例中,为了访问 Math 的 log 函数,我必须将其添加到函数上下文中。我希望能够评估一个表达式:“log(5)”,即不使用限定符。
jsp - 如何在 Jexl 中设置 Jetty 以使用非严格评估模式?
我们正在尝试将主要由 JSP 构建的网站从 Websphere 迁移到 Jetty。我们在NullPointerException
评估test
属性中的 EL 代码时遇到问题:
问题是该domainSpecificName
属性要么设置为 true,要么在请求中不存在。
在 Websphere 中,这一行被编译为
(注意类是boolean
,默认值是false
。)
Jetty 中 JSP 的同一行编译为
这里我们有一个类Boolean
和一个默认值null
,如果属性不存在,它显然会抛出一个 NPE。
从文档中,听起来如果我们可以设置JexlBuilder.strict(false)
它不会将null
值视为错误。(虽然我不确定如何编译。)
有谁知道如何在 Jetty 中配置 JexlBuilder?
或者,如果我走错了路;有谁知道处理这个的正确方法?有数百个实例<c:if test="${...}">
可能会引发 NPE,因此至少在短期内将它们全部修复是不切实际的。
java - JEXL 在哪里存储本地变量以及通过什么机制分配本地变量?
Apache JEXL 脚本引擎调用上下文的 setter 方法来完成脚本中的分配。我提供的上下文将接管存储分配。
声明局部变量时,上下文的等价物是什么?
在我的应用程序设计中,我需要拦截每个分配,并且每个变量都可以定位。
本地变量的分配机制是什么,它们存储在哪里?我如何能够重载/覆盖/拦截该机制?
functional-programming - Java兼容的简单表达式语言
我正在 Scala 中构建一个用于特征工程的系统,其中最终用户 API 接收对象/事件列表上的聚合。例如,该工具的客户端可能会向其传递一个函数,该函数为特定网络用户提供一组过去的综合浏览量,过滤来自指定国家的浏览量并计算它们。此调用的输出将是一个数字。
它可以被认为是一个非常简单的reduce操作。我正在研究如何为此类系统构建 API。我可以编写一个简单的自定义语言来执行计数和过滤,但我确信这不是最好的方法,尤其是因为它不够表达,除非经过精心设计。
您是否知道诸如表达式语言之类的东西,它可以用来表达简单的功能,而无需我从头开始构建一个?另一种选择是允许最终用户将自定义代码传递给这个库,这在运行时可能很危险。
我知道 apache Calcite 可以将 SQL 插入不同的数据结构和数据库。这是一个不错的选择,但是它迫使我以“列” sql 方式思考,而在这里我正在寻找更多基于行的东西,类似于 map-reduce 编程方式。
java - JEXL:如何自定义属性访问器
我有数据对象,您可以将其视为“简化地图”。有方法get(String)
,和put(String,Object)
,但基本上就是这样。
现在,我想使用 JEXL 来评估我的数据对象上的复杂表达式。我可以通过创建一个自定义 JexlContext 来做到这一点,它适用于"foo"或foo != null
. 但是,一旦我尝试使用类似"foo.bar"的表达式,Jexl 就会失败并显示错误消息“无法解析的属性”。显然,Jexl 使用我的自定义 JexlContext 来评估"foo",但不能评估foo 对象上的"bar" 。我的印象是,我必须使用自定义的 PropertyResolver。我可以实现它,但我无法弄清楚。如何将其带入游戏,因为 JexlUberspect 不包含setResolvers
, 或addResolver
.
google-cloud-data-fusion - 在云数据融合中使用 JEXL
我正在使用云数据融合的牧马人组件。我想用当前日期设置新列。
抛出“管道“测试”的预览失败。请查看日志以获取更多信息。” 对我来说错误和许多类似的代码也不起作用。日志没有显示任何与代码相关的信息,只有“无法将文件添加到 Spark 环境”或“正在中止任务”之类的消息。我确定问题出在 JEXL 表达式中,因为没有它或使用简单的表达式,例如:
它工作正常。
是否可以使用当前日期设置列?
java - JEXL如何用自定义分隔符替换点
我正在使用 JEXL 来评估一个字符串,如下所示:
其中 GroupName 和 ProductName 是字符串变量,而其余的是固定字符串。
我建立了一个上下文:Map<String, Map<String, CustomClass>>
它最终如下所示:
GroupName >> ProductName >> CustomClass
在评估表达式之前,我会用空字符替换所有单引号。
问题:当ProductName本身包含点时,评估不起作用。
问题:有什么方法可以告诉 JEXL 引擎使用自定义字符而不是点作为分隔符来评估表达式?
更新:在有关速度的 Oracle 文档中,它指出:不要使用“。” 属性名称中的字符。如果我理解正确的 JEXL 使用 Velocity 解析表达式,是否意味着无法克服上述问题?
问候,文森佐
java - 当 RHS 值解析集(varname,rhs)在 Apache JEXL3 中遇到运行时异常时如何访问 varname?
对于 jexl 脚本中的以下语句,
使用该 JEXL 按以下顺序继续
- 解决 Telemat.locate(map, vehicle, newLatLong)。
- 查询 has('routeX'),以便我的 Java 代码知道声明了哪个 varname,并且如果 varname 已经存在,可以反馈给 JEXL。
- 调用方法 set('routeX', <resolved value of Telemat.locate(map, vehicle, newLatLong)> )
也就是说,RHS 之前已解析,调用了 has 或 get,因此我的 Java 代码在评估 RHS 时将不知道 LHS varname。
假设当地图无法访问时,我在 RunTimeException 中嵌入了 InAccessibleMapException 原因。碰巧的是,在某个情况下,地图无法访问。这导致 RunTimeException(InAccessibleMapException) 被抛出。
我有try-catch
当 JEXL 抛出异常时,我的 Java 代码需要向我工作的工程师反馈一条错误消息,其中包括导致脚本错误的 varname。
什么是最好的方法或策略,当在 RHS 解析期间引发异常时,我可以使用捕获 varname,以便异常捕获器可以在日志和错误消息中反馈除错误之外的 varname?
java - 如何转换 JEXL 表达式的类型?
我使用 JEXL 表达式,因此用户可以在运行时指定表达式,我的应用程序将相应地处理它们。现在作为一种特殊情况,用户想要比较浮点值,但是在 JEXL 上下文中,这些变量包含像“6.8”这样的字符串。JEXL 引擎抱怨它不能处理字符串和数字。到目前为止,一切都很好。
但是在https://commons.apache.org/proper/commons-jexl/reference/syntax.html我看不到任何类型转换的提示。
有没有办法将字符串转换为在表达式中浮动?