0
votes

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:

  • There is a Builder-pattern-based Java object (say, MyPOJO) that is the payload in the flow.
  • MyPOJO has a String property/instance variable (say, String response) along with a getter and setter.
  • Somewhere in the flow, MyPOJO gets built and response gets set.
  • Inside response, there is a keyword/specific piece of text that will determine the further course of the flow.

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

1
What is the problem are you facing? Doesn't that just work for you as is? I would do the same configuration. What is the point of the question?Artem Bilan
I missed mentioning the actual error @ArtemBilan so the post has been updated now. Please check.bmylavar

1 Answers

2
votes

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