Я хочу перевести запрос OData в запрос MongoDB. У меня есть код olingo-odata4
и я изолировал вызовы, необходимые для ввода строки ввода, например,
Name eq 'Buzz' and (amount gt 1.99 or size lt 10)
и запустить его через ExpressionParser
с моей собственной реализацией ExpressionVisitor
для перехвата различных состояний анализа, таких как visitLiteral
, visitBinaryOperator
и т. Д. Оттуда тривиально создать эквивалентный запрос MongoDB. Мой main
по сути является урезанной копией тестовых драйверов odata, включая макет класса Edm
для запуска:
ExpressionParser ep = new ExpressionParser(mock(Edm.class), odata);
Моя проблема в том, что я не могу правильно настроить среду, чтобы синтаксический анализатор распознавал поля, например, члены. Я бы надеялся, что Name eq 'Buzz'
вызовет метод visitMember
для вызова Name
, но это не так; вместо этого я получаю сообщение об ошибке: Property paths must follow a structured type
.
Таким образом, мой общий вопрос звучит так: если аргумент $filter
для OData показывает синтаксис выражения как Name eq 'Buzz'
, то что должно произойти в реализации сервера для распознавания Name
в качестве члена?