Повторное использование SimpleWebServiceOutboundGateway в нескольких IntegrationFlow в Spring Integration - PullRequest
0 голосов
/ 30 апреля 2020

Учитывая, что у меня есть 2 IntegrationFlow s, которые ссылаются на один и тот же SimpleWebServiceOutboundGateway bean:

@Bean
IntegrationFlow getDataA(
        Jaxb2Marshaller xmlMarshaller,
        SimpleWebServiceOutboundGateway webServiceOutboundGateway) {
    return IntegrationFlows.from("getDataA")
            .transform(marshaller(xmlMarshaller))
            .transform(new ResultToStringTransformer())
            .handle(webServiceOutboundGateway)
            .transform(unmarshaller(xmlMarshaller))
            .get();
}

@Bean
IntegrationFlow getDataB(
        Jaxb2Marshaller xmlMarshaller,
        SimpleWebServiceOutboundGateway webServiceOutboundGateway) {
    return IntegrationFlows.from("getDataB")
            .transform(marshaller(xmlMarshaller))
            .transform(new ResultToStringTransformer())
            .handle(webServiceOutboundGateway)
            .transform(unmarshaller(xmlMarshaller))
            .get();
}

@Bean
SimpleWebServiceOutboundGateway webServiceOutboundGateway(HttpComponentsMessageSender httpComponentsMessageSender) {
    SimpleWebServiceOutboundGateway outboundGateway = new SimpleWebServiceOutboundGateway("url");
    outboundGateway.setMessageSender(httpComponentsMessageSender);
    return outboundGateway;
}

Когда я выполняю код, я получаю:

Caused by: java.lang.IllegalArgumentException: An AbstractMessageProducingHandler may only be referenced once (webServiceOutboundGateway) - use @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) on @Bean definition.

Когда я добавляю @Scope(SCOPE_PROTOTYPE) до webServiceOutboundGateway, я получаю одно и то же исключение

Как я могу повторно использовать webServiceOutboundGateway в обоих потоках?

1 Ответ

0 голосов
/ 30 апреля 2020

Я просто скопировал ваш код в новое приложение, исправил названия каналов и поместил проход в область действия прототипа, что сработало для меня ...

@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
SimpleWebServiceOutboundGateway webServiceOutboundGateway() {
    SimpleWebServiceOutboundGateway outboundGateway = new SimpleWebServiceOutboundGateway("url");
    return outboundGateway;
}
...