简而言之:如何在提供的类没有的Jexl表达式中使用方法调用?我需要以某种方式伪造。 使用JexlContext,我可以在实际数据类上添加包装器,但仅用于根级别。是JexlUberspect我在寻找什么吗?
我的输入是一棵嵌套树,例如具有一系列地址类别的雇员类别。换句话说,一个雇员可以有两个地址。
转发表达式没有问题,例如jexl.createExpression(“ address [0] .city”);
但是,如果我在一个地址内并且想访问员工级别怎么办? 喜欢 address_line2 = jexl.createExpression(“邮政编码+ =城市”); address_line1 = jexl.createExpression(“ getParent()。firstname + = getParent()。lastname”);
麻烦的是,地址类没有getParent()方法来返回该地址所属的员工。
如何使此类getParent()出现?
一个选择显然是更改类,以便它们具有getParent()方法。但是我无法控制树类,它是Avro GenericRecord。 因此,我需要将所有值都复制到一个新类中,以便将getParent()方法添加到所有嵌套级别。太贵了。
使用上下文将起作用。在上下文中,我可以添加一个指向雇员的变量“父母”。但仅适用于一个级别。像“ getParent()。getParent()。xyz”之类的表达式不会。该上下文仅用于首次访问,返回实际的Java对象,并且该对象再次没有getParent()方法。
我想知道是否可以使用JexlUberspect。 有什么想法吗?