SO-62761903: Inject BF into Gateway's correlator
Related to https://stackoverflow.com/questions/62761903/spring-integration-reactive-streams-support-exception-in-creating-a-reactive The `MessagingGatewaySupport` creates an internal endpoint for consuming messages from the provided `replyChannel`. The endpoint type depends on the channel type. The `ReactiveStreamsConsumer` was missing a `BeanFactory` injection causing an error when `ReactiveStreamsConsumer` tries to extract a default `ErrorHandler` from `BeanFactory` * Refactor `MessagingGatewaySupport` to inject a `BeanFactory` to all the possible correlator endpoints. Also always call `afterPropertiesSet()` for all of them **Cherry-pick to 5.3.x & 5.2.x**
This commit is contained in:
committed by
Gary Russell
parent
a8c63e2991
commit
ca60db50a3
@@ -47,6 +47,7 @@ import org.springframework.integration.IntegrationPatternType;
|
||||
import org.springframework.integration.annotation.Gateway;
|
||||
import org.springframework.integration.annotation.GatewayHeader;
|
||||
import org.springframework.integration.channel.DirectChannel;
|
||||
import org.springframework.integration.channel.FluxMessageChannel;
|
||||
import org.springframework.integration.channel.QueueChannel;
|
||||
import org.springframework.integration.endpoint.EventDrivenConsumer;
|
||||
import org.springframework.integration.support.utils.IntegrationUtils;
|
||||
@@ -165,6 +166,23 @@ public class GatewayProxyFactoryBeanTests {
|
||||
.isEqualTo(IntegrationPatternType.outbound_channel_adapter);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReactiveReplyChannel() {
|
||||
QueueChannel requestChannel = new QueueChannel();
|
||||
startResponder(requestChannel);
|
||||
FluxMessageChannel replyChannel = new FluxMessageChannel();
|
||||
GatewayProxyFactoryBean proxyFactory = new GatewayProxyFactoryBean(TestService.class);
|
||||
proxyFactory.setDefaultRequestChannel(requestChannel);
|
||||
proxyFactory.setDefaultReplyChannel(replyChannel);
|
||||
|
||||
proxyFactory.setBeanFactory(mock(BeanFactory.class));
|
||||
proxyFactory.afterPropertiesSet();
|
||||
TestService service = (TestService) proxyFactory.getObject();
|
||||
|
||||
String result = service.requestReply("test");
|
||||
assertThat(result).isEqualTo("testbar");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRequestReplyWithTypeConversion() {
|
||||
final QueueChannel requestChannel = new QueueChannel();
|
||||
|
||||
Reference in New Issue
Block a user