在Spring Integration的多个IntegrationFlows中重用SimpleWebServiceOutboundGateway。

问题描述 投票:0回答:1

鉴于我有2 IntegrationFlow同一个国家的 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 在两个流中?

spring-integration spring-integration-dsl spring-integration-ws
1个回答
0
投票

我刚刚把你的代码复制到一个新的应用程序中,固定了通道名称,并把网关放在原型范围内,对我来说是有效的......

@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
SimpleWebServiceOutboundGateway webServiceOutboundGateway() {
    SimpleWebServiceOutboundGateway outboundGateway = new SimpleWebServiceOutboundGateway("url");
    return outboundGateway;
}
© www.soinside.com 2019 - 2024. All rights reserved.