Интеграция Spring — обработка ошибок SimpleWsOutboundGateway (SOAP WS)

#spring-integration-dsl #spring-integration-ws

#весенняя интеграция-dsl #весенняя интеграция-ws

Вопрос:

У меня есть поток интеграции spring, в котором я прослушиваю канал и вызываю SOAP WS и возвращаю ответ от WS в исходящий канал

  return IntegrationFlows.from(CHANNEL)
            .<byte[], String>transform(String::new)
            .handle(
                    Ws.simpleOutboundGateway(template)
                        .uri(webServiceUrl )
            )

            .<String, byte[]>transform(String::getBytes)
            . // send out the output topic
            .get();

@Bean
public WebServiceTemplate webServiceTemplate() {
    WebServiceTemplate template = new WebServiceTemplate();
    return template;
}
  

Я использую этот поток как часть интеграционного теста, и это работает нормально.

вопросы: если я запускаю тест с недоступным SOAP WS, я получаю следующее

Вызвано: org.springframework.ws.client.Исключение WebServiceIOException: ошибка ввода-вывода: отказано в подключении: подключитесь; вложенным исключением является java.net.ConnectException: отказано в подключении: подключитесь к org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:561) ~ [spring-ws-core-3.0.10.RELEASE.jar:na] в org.springframework.integration.ws.SimpleWebServiceOutboundGateway.doHandle(SimpleWebServiceOutboundGateway.java:120) ~ [spring-integration-ws-5.3.2.RELEASE.jar:5.3.2.RELEASE] в org.springframework.integration.ws.AbstractWebServiceOutboundGateway.handleRequestMessage(AbstractWebServiceOutboundGateway.java:224 ) ~[spring-integration-ws-5.3.2.RELEASE.jar:5.3.2.RELEASE] в org.springframework.integration.обработчик.Абстрактныйпроизведениеmessagehandler.handleMessageInternal

Как мне зафиксировать эту ошибку / ошибки в целом в этом потоке и каковы наилучшие методы обработки ошибок в ответах WS на базе soap, например: служба недоступна Ошибки запроса / ответа SOAP ext

Ответ №1:

Обычно это зависит от того, что находится выше по потоку CHANNEL ; вы можете добавить канал ошибок к тому, что запускает поток, или вы можете добавить an ExpressionEvaluatingRequestHandlerAdvice к шлюзу. Документы здесь.

Комментарии:

1. Спасибо, Гэри, КАНАЛ в данном случае — тема Кафки. то, что я пытаюсь сделать, это захватить «исключение WebServiceIOException: ошибка ввода-вывода: отказано в подключении», исключение и создать с ним ответное сообщение и вернуть его в исходящую тему kafka. Буду признателен, если вы могли бы указать мне на пример того, что вы упомянули выше.