Может ли SpEL в Spring Integration Router использовать методы класса Java String - PullRequest
0 голосов
/ 23 апреля 2019

Это дополнительный вопрос к Как использовать 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

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

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

1 Ответ

2 голосов
/ 23 апреля 2019

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

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

keyword в одинарных кавычках , а не double .

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

...