Skip to content

GatewayProxyFactoryBean for unannotated interface creates gateway with empty string errorChannel #2799

Closed
@dschulten

Description

@dschulten

Affects Version(s): 5.1.3

Bug report

It is possible to start a flow from an interface class with IntegrationFlows.from(Class).
That interface must not be annotated with @MessagingGateway. However, if I use it that way, the errorChannel becomes the default "", which leads to problems with error handling subsequently in org.springframework.integration.channel.MessagePublishingErrorHandler#resolveErrorChannel.

If I do annotate the interface with @MessagingGateway and supply an error channel, it also wants me to define a request channel, which defeats the purpose of IntegrationFlows.from(Class).
I should note that my interface has a single void method.

Exception in thread "pool-1-thread-1" org.springframework.messaging.core.DestinationResolutionException: failed to look up MessageChannel with name '' in the BeanFactory.; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named '' available
	at org.springframework.integration.support.channel.BeanFactoryChannelResolver.resolveDestination(BeanFactoryChannelResolver.java:117)
	at org.springframework.integration.support.channel.BeanFactoryChannelResolver.resolveDestination(BeanFactoryChannelResolver.java:46)
	at org.springframework.integration.channel.MessagePublishingErrorHandler.resolveErrorChannel(MessagePublishingErrorHandler.java:144)
	at org.springframework.integration.channel.MessagePublishingErrorHandler.handleError(MessagePublishingErrorHandler.java:91)
	at org.springframework.integration.util.ErrorHandlingTaskExecutor.lambda$execute$0(ErrorHandlingTaskExecutor.java:60)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named '' available
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:775)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1221)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:294)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:273)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)
	at org.springframework.integration.support.channel.BeanFactoryChannelResolver.resolveDestination(BeanFactoryChannelResolver.java:89)
	... 7 more

Expected: the errorChannel should be undefined or set to a sensible default value, not to an empty string.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions