bmylavar
bmylavar

Reputation: 61

Can SpEL in Spring Integration Router use Java's String class methods

This is an extension question to How to use SpEL to read payload and header content in a Spring Integration Router

Technologies in my project

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

As a part of my Spring Integration project (REST API with an inbound-http-gateway, that takes an XML input and produces an XML output), this is the setup for my question:

This said, is it possible to write a Router (using XML configuration) that can check if the response inside Message<MyPOJO> contains that keyword/specific piece of text to determine where to go next?

Illustratively, something like this:

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

When I do this and launch the application, the error is:

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

Specifically speaking, the expression="payload.getResponse().contains("keyword")" part seems to be having an issue getting resolved and this could be something to do with the quotation marks around the keyword

Any help on this is greatly appreciated.

Sincerely, Bharath

Upvotes: 0

Views: 544

Answers (1)

Artem Bilan
Artem Bilan

Reputation: 121272

OK. I see you have an XML syntax error. The fix is like this:

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

The keyword is in single quotes, not double.

This is definitely how SpEL works: when you would like to specify a literal in the expression, you need to use single quotes: https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions-evaluation

Upvotes: 2

Related Questions