Может ли SpEL в Spring Integration Router использовать методы класса String Java

Это дополнительный вопрос к Как использовать SpEL для чтения полезной нагрузки и содержимого заголовка в Spring Integration Router

Технологии в моем проекте

Spring Boot 2
Spring Integration (XML style)
Java 8
Tomcat 9.x/Liberty 19.0.0.1

Как часть моего проекта Spring Integration (REST API с входящим http-шлюзом, который принимает ввод XML и производит вывод XML), это настройка для моего вопроса:

  • Существует объект Java на основе шаблона Builder (скажем, MyPOJO), который является полезной нагрузкой в ​​потоке.
  • MyPOJO имеет свойство / экземпляр переменной String (скажем, String response) вместе с геттером и сеттером.
  • Где-то в потоке создается MyPOJO и устанавливается response.
  • Внутри response есть ключевое слово / определенный фрагмент текста, который определит дальнейший ход потока.

Тем не менее, можно ли написать маршрутизатор (с использованием конфигурации XML), который может проверять, содержит ли response внутри Message<MyPOJO> это ключевое слово / конкретный фрагмент текста, чтобы определить, куда двигаться дальше?

Примерно так:

<int:router input-channel="inputChannel" expression="payload.getResponse().contains("keyword")">
    <int:mapping value="true" channel="oneRoute"/>
    <int:mapping value="false" channel="anotherRoute"/>
</int:router>

Когда я это делаю и запускаю приложение, возникает ошибка:

nested exception is org.xml.sax.SAXParseException; lineNumber: 44; columnNumber: 98; Element type "int:router" must be followed by either attribute specifications, ">" or "/>"

В частности, у части expression="payload.getResponse().contains("keyword")", похоже, возникла проблема с разрешением, и это может быть как-то связано с кавычками вокруг keyword

Любая помощь по этому поводу приветствуется.

С уважением, Бхарат


person bmylavar    schedule 23.04.2019    source источник
comment
С какой проблемой вы столкнулись? Разве это не работает для вас как есть? Я бы сделал такую ​​же настройку. В чем суть вопроса?   -  person Artem Bilan    schedule 23.04.2019
comment
Я пропустил упоминание фактической ошибки @ArtemBilan, поэтому сообщение было обновлено. Пожалуйста, проверьте.   -  person bmylavar    schedule 23.04.2019


Ответы (1)


OK. Я вижу, у вас синтаксическая ошибка XML. Исправление такое:

expression="payload.getResponse().contains('keyword')"

keyword находится в одинарных кавычках, а не двойных.

Определенно, как работает SpEL: когда вы хотите указать литерал в выражении, вам нужно использовать одинарные кавычки: https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#выражений-оценка

person Artem Bilan    schedule 23.04.2019