#junit #apache-camel #citrus-framework
#junit #apache-camel #citrus-framework
Вопрос:
Я использую платформу Citrus для тестирования маршрутов Camel. Я отправляю запрос в приложение на базе Camel, которое, в свою очередь, отправляет несколько запросов параллельно на сервер SOAP. Я пытаюсь издеваться над SOAP-сервером с помощью Citrus, используя параллельный контейнер. Я использую селекторы для запуска правильных действий приема и отправки, аналогичных следующему примеру (реальный код немного сложнее):
parallel().actions(
sequential().actions(
soap().server("soapService")
.receive()
.selector("xpath:local-name(/*)='exampleRequest1' AND xpath://ns1:id/text()='123'")
.payload(new ClassPathResource("data/123/exampleRequest1.xml")),
echo("Received exampleRequest1"),
soap().server("soapService")
.send()
.payload(new ClassPathResource("data/123/exampleResponse1.xml")),
echo("Sent exampleResponse1"),
),
sequential().actions(
soap().server("soapService")
.receive()
.selector("xpath:local-name(/*)='exampleRequest2' AND xpath://ns1:id/text()='456'")
.payload(new ClassPathResource("data/456/exampleRequest2.xml")),
echo("Received exampleRequest2"),
soap().server("soapService")
.send()
.payload(new ClassPathResource("data/456/exampleResponse2.xml")),
echo("Sent exampleResponse2"),
),
...
)
Citrus действительно получает сообщения, но не может ответить. Сообщение об ошибке каждого параллельного потока:
13:35:36.121 [Thread-22] ERROR com.consol.citrus.container.Parallel - Parallel test action raised error
java.lang.IllegalArgumentException: Failed to find reply channel for message correlation key: citrus_message_id = 'c37eb703-4fb3-4c34-98f8-9cf8ee0414a1'
at org.springframework.util.Assert.notNull(Assert.java:198)
at com.consol.citrus.channel.ChannelSyncConsumer.send(ChannelSyncConsumer.java:73)
at com.consol.citrus.actions.SendMessageAction.doExecute(SendMessageAction.java:125)
…
Важно: citrus_message_id, который ищет каждый поток, всегда один и тот же, но должен отличаться. Поэтому, если одно из действий отправки действительно выполняется успешно, обычно оно отправляется с неправильным каналом ответа.
В чем здесь может быть проблема? Это ошибка или я что-то упускаю? Большое вам спасибо!
Ответ №1:
Проблемы здесь вызывает параллельный контейнер. Но вы можете безопасно удалить параллельный контейнер при использовании селекторов в действиях приема. Он должен работать нормально для вас, как только вы удалите параллели
Комментарии:
1. Я только что попробовал это, и это сработало как шарм. Большое вам спасибо! Это ошибка или это сделано специально? В документации есть пример последовательных контейнеров внутри параллельных контейнеров, и вы написали: «Фактическая мощность последовательных контейнеров проявляется только в сочетании с другими контейнерами, такими как итерации и параллели».