INT-4051: Add PublisherAnnBPP when @EnableInt
JIRA: https://jira.spring.io/browse/INT-4051 Previously we can process `@Publisher` annotations only with the `<int:annotation-config>` or with an explicit `@EnablePublisher("")` * Fix `PublisherRegistrar` to relax from the fact if we have `@EnablePublisher` or not and register `PublisherAnnotationBeanPostProcessor` without `defaultChannelName`
This commit is contained in:
committed by
Marius Bogoevici
parent
dbd034c17a
commit
cabe507e0e
@@ -82,7 +82,6 @@ public class PublisherAnnotationBeanPostProcessor extends ProxyConfig
|
|||||||
return this.order;
|
return this.order;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
@Override
|
@Override
|
||||||
public void afterPropertiesSet() {
|
public void afterPropertiesSet() {
|
||||||
this.advisor = new PublisherAnnotationAdvisor();
|
this.advisor = new PublisherAnnotationAdvisor();
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import org.springframework.beans.factory.config.BeanDefinition;
|
|||||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||||
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
|
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
|
||||||
|
import org.springframework.core.annotation.AnnotationUtils;
|
||||||
import org.springframework.core.type.AnnotationMetadata;
|
import org.springframework.core.type.AnnotationMetadata;
|
||||||
import org.springframework.integration.aop.PublisherAnnotationBeanPostProcessor;
|
import org.springframework.integration.aop.PublisherAnnotationBeanPostProcessor;
|
||||||
import org.springframework.integration.context.IntegrationContextUtils;
|
import org.springframework.integration.context.IntegrationContextUtils;
|
||||||
@@ -46,10 +47,10 @@ public class PublisherRegistrar implements ImportBeanDefinitionRegistrar {
|
|||||||
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
|
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
|
||||||
Map<String, Object> annotationAttributes =
|
Map<String, Object> annotationAttributes =
|
||||||
importingClassMetadata.getAnnotationAttributes(EnablePublisher.class.getName());
|
importingClassMetadata.getAnnotationAttributes(EnablePublisher.class.getName());
|
||||||
if (annotationAttributes == null) {
|
|
||||||
return;
|
String value = (annotationAttributes == null
|
||||||
}
|
? (String) AnnotationUtils.getDefaultValue(EnablePublisher.class)
|
||||||
String value = (String) annotationAttributes.get("value");
|
: (String) annotationAttributes.get("value"));
|
||||||
if (!registry.containsBeanDefinition(IntegrationContextUtils.PUBLISHER_ANNOTATION_POSTPROCESSOR_NAME)) {
|
if (!registry.containsBeanDefinition(IntegrationContextUtils.PUBLISHER_ANNOTATION_POSTPROCESSOR_NAME)) {
|
||||||
BeanDefinitionBuilder builder =
|
BeanDefinitionBuilder builder =
|
||||||
BeanDefinitionBuilder.genericBeanDefinition(PublisherAnnotationBeanPostProcessor.class)
|
BeanDefinitionBuilder.genericBeanDefinition(PublisherAnnotationBeanPostProcessor.class)
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.integration.annotation.Poller;
|
import org.springframework.integration.annotation.Poller;
|
||||||
|
import org.springframework.integration.annotation.Publisher;
|
||||||
import org.springframework.integration.annotation.ServiceActivator;
|
import org.springframework.integration.annotation.ServiceActivator;
|
||||||
import org.springframework.integration.channel.DirectChannel;
|
import org.springframework.integration.channel.DirectChannel;
|
||||||
import org.springframework.integration.channel.QueueChannel;
|
import org.springframework.integration.channel.QueueChannel;
|
||||||
@@ -60,6 +61,7 @@ import org.springframework.messaging.MessageChannel;
|
|||||||
import org.springframework.messaging.MessageHandler;
|
import org.springframework.messaging.MessageHandler;
|
||||||
import org.springframework.messaging.MessagingException;
|
import org.springframework.messaging.MessagingException;
|
||||||
import org.springframework.messaging.PollableChannel;
|
import org.springframework.messaging.PollableChannel;
|
||||||
|
import org.springframework.messaging.handler.annotation.Payload;
|
||||||
import org.springframework.test.annotation.DirtiesContext;
|
import org.springframework.test.annotation.DirtiesContext;
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||||
@@ -67,6 +69,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Gary Russell
|
* @author Gary Russell
|
||||||
|
* @author Artem Bilan
|
||||||
* @since 4.2
|
* @since 4.2
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@@ -84,6 +87,9 @@ public class BarrierMessageHandlerTests {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private MessageChannel release;
|
private MessageChannel release;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PollableChannel publisherChannel;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRequestBeforeReply() throws Exception {
|
public void testRequestBeforeReply() throws Exception {
|
||||||
final BarrierMessageHandler handler = new BarrierMessageHandler(10000);
|
final BarrierMessageHandler handler = new BarrierMessageHandler(10000);
|
||||||
@@ -256,6 +262,10 @@ public class BarrierMessageHandlerTests {
|
|||||||
Message<?> out = this.out.receive(10000);
|
Message<?> out = this.out.receive(10000);
|
||||||
assertNotNull(out);
|
assertNotNull(out);
|
||||||
assertEquals("[foo, bar]", out.getPayload().toString());
|
assertEquals("[foo, bar]", out.getPayload().toString());
|
||||||
|
|
||||||
|
Message<?> publisherMessage = this.publisherChannel.receive(10000);
|
||||||
|
assertNotNull(publisherMessage);
|
||||||
|
assertEquals("BAR", publisherMessage.getPayload());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@@ -277,6 +287,11 @@ public class BarrierMessageHandlerTests {
|
|||||||
return new QueueChannel();
|
return new QueueChannel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public PollableChannel publisherChannel() {
|
||||||
|
return new QueueChannel();
|
||||||
|
}
|
||||||
|
|
||||||
@ServiceActivator(inputChannel = "in")
|
@ServiceActivator(inputChannel = "in")
|
||||||
@Bean
|
@Bean
|
||||||
public BarrierMessageHandler barrier() {
|
public BarrierMessageHandler barrier() {
|
||||||
@@ -291,6 +306,8 @@ public class BarrierMessageHandlerTests {
|
|||||||
return new MessageHandler() {
|
return new MessageHandler() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Publisher(channel = "publisherChannel")
|
||||||
|
@Payload("#args[0].payload.toUpperCase()")
|
||||||
public void handleMessage(Message<?> message) throws MessagingException {
|
public void handleMessage(Message<?> message) throws MessagingException {
|
||||||
barrier().trigger(message);
|
barrier().trigger(message);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user