Reputation: 4031
Given I have 2 IntegrationFlow
s which reference the same 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;
}
When I execute the code I am getting:
Caused by: java.lang.IllegalArgumentException: An AbstractMessageProducingHandler may only be referenced once (webServiceOutboundGateway) - use @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) on @Bean definition.
When I add @Scope(SCOPE_PROTOTYPE)
to webServiceOutboundGateway
, I'm getting the same exception
How can I reuse webServiceOutboundGateway
in both flows?
Upvotes: 0
Views: 213
Reputation: 174729
I just copied your code into a new app, fixed the channel names and putting the gatway in prototype scope worked for me...
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
SimpleWebServiceOutboundGateway webServiceOutboundGateway() {
SimpleWebServiceOutboundGateway outboundGateway = new SimpleWebServiceOutboundGateway("url");
return outboundGateway;
}
Upvotes: 0