Как заставить Camel использовать Saxon для предиката выбора xpath? - PullRequest
0 голосов
/ 07 февраля 2019

В маршруте, который я строю с Talend 6.5, использовался jar Saxon 9.5, и поэтому все предикаты XPath оценивались с использованием Saxon.

После обновления до Talend 7.1 для использования более новых версий Camel, теперьиспользуется версия saxon 9.8, и я понимаю из ( Apache Camel Xpath 2.0 с Saxon не работает в RouteBuilder / Predicates ), что 9.6+ не используется автоматически.

В идеале я бы хотел, чтобы Saxon использовался для всей оценки xslt / xpath в Camel, хотя я могу использовать модификатор saxon=true для компонента XSLT, но я не могу понять, как его использоватьс предикатом выбора.

У меня есть что-то вроде

from("direct:start")
...
.choice()
.when()
.xpath("myXpath2String")
...
.endChoice()
...

Я пытался добавить .saxon() после предложения xpath(...), но это не работает.

Конечно, есть способ сделать это, но ничего из того, что я пробовал, работает.

Кто-нибудь может предложить подходящий способ принудительного использования предиката для использования саксонского?Спасибо!

1 Ответ

0 голосов
/ 11 февраля 2019

Я нашел обходной путь к этой проблеме - несколько уродливый, но он работает.

При чтении через Javadoc Camel BuilderSupport and Expression кажется, что модификатор .saxon() не работает противвыражение .xpath, поскольку оно не возвращает объект XpathBuilder.Однако, поскольку .when() может принимать выражение в качестве самого параметра, использование формы BuilderSupport xpath() возвращает объект XPathBuilder и, таким образом, поддерживает модификатор .saxon().

Однако Talend не отображается вбыть в состоянии разрешить вам предоставить параметр для функции .when, но только потом применять квалификаторы выражений.

Чтобы обойти это, я имею следующую структуру:

Picture of Talend Route

Критериям ссылки «Критерии» присвоено постоянное выражение "false".Затем следует компонент cJavaDSLProcessor с кодом вида:

.when(xpath("myXPath2Expression").saxon())

, и это работает, хотя и с использованием неиспользуемых критериев в результирующем .choice(), что, безусловно, является плохим стилем.

...