Jexl получить родителя из дерева - PullRequest
0 голосов
/ 21 мая 2019

Вкратце: как я могу использовать вызов метода в выражениях 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.Есть идеи?

...