Spring IntegrationFlow Filter и Transform - PullRequest
0 голосов
/ 14 марта 2020

У меня есть XML, который я пытаюсь пройти через Интеграционный поток. Вот шаги, которые я делаю:

  • Отфильтруйте сообщение, если оно содержит узел XML: "filterMe" И имеет type = "filterType" - Если это так, я не хочу обработайте это.
  • Преобразуйте его из XML в класс Kotlin и добавьте несколько заголовков в сообщение.

Не могу найти способ правильно отфильтровать сообщение по 2 XML свойствам. Любая помощь очень ценится.

Вот пример XML

<?xml version="1.0" encoding="UTF-8"?>
<Response type="filterType">//Filter on this
   <event>
      <header>
         <type>Test</type>
      </header>
      <body>
         <filterMe>filter me out</filterMe> //Filter this too
      </body>
   </event>
</Response>

Поток интеграции

        return IntegrationFlows
                .from(inputChannel)
                .filter("filterMe"::contains)
                .transform { payload: String ->
                    val jsonMessage = XML.toJSONObject(payload).toString()

1 Ответ

2 голосов
/ 14 марта 2020

Подумайте о худой XPath .

С Spring Integration в filter() вы можете сделать так:

.filter(payload -> 
                XPathUtils.evaluate(payload, "/Response/@type = \"filterType\" and //filterMe", 
                                    XPathUtils.BOOLEAN))

Примечание: у вас должен быть spring-integration-xml в classpath, чтобы получить доступ к этому XPathUtils.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...