脚本中的所有 Jexl 对象在任何方法调用时都会返回 null

问题描述 投票:0回答:1

我正在尝试让 jexl 脚本正常工作。

// arranging namespace Print
Map<String, Object> ns = new HashMap<>(1);
ns.put("Print", System.out); // make System.out.println available in expressions
JexlEngine je = new JexlBuilder().namespaces(ns).create();

// arranging custom Map for accessible variable 'agent' in script
Map<String, Object> myMap = ....;
myMap.put("agent", agentRef);
JexlContext jc = new MapContext(myMap);

// arranging script
JexlScript script = je.createScript(expression);
Object result = script.execute(jc);

表达方式是这样的:

{
   Print:println("blabla");
   const x = agent.getId();
   Print:println(x);
   return true;
}

第一个命令只是将“blabla”打印到控制台,因此通过 System.out.println 的打印工作完美。

但是,对于变量代理:它确实存在,因为jexl不报告“无法解决的变量”。但是,我尝试调用的代理对象的任何方法总是返回 null。 我只是在控制台上打印了一个空值。 当我调试时,在我将 agentRef 放入 Map 之前,其字段上确实有除 null 以外的值。所以这些字段不为空。

另外,当我调用agent.id(这应该是可能的,它只是一个POJO)时,我得到“未定义的属性'id',假设为假”。而 agent.getId() 仅返回 null。

有人知道这里可能出什么问题吗?

我尝试了其他语法,但无济于事。我尝试使用 jc.set("agent", agentRef),但结果相同。

java variables jexl
1个回答
0
投票

JEXL 只会查看/内省通过权限允许的公共类;必须允许您自己的类/包(默认情况下不允许)并且它们必须是公共的。 要了解如何创建适当的权限并避免在生产中使用 JexlPermissions.UNRESTRICTED,请参阅 JexlPermissions

© www.soinside.com 2019 - 2024. All rights reserved.