INT-3319 Fix BeanFactory Propagation
JIRA: https://jira.spring.io/browse/INT-3319 The `MessageBuilderFactory` abstraction relies on the bean factory being propagated to all classes that create messages. Some classes were missed in the initial PR.
This commit is contained in:
committed by
Artem Bilan
parent
1c9bcaccee
commit
75af72a77c
@@ -27,7 +27,6 @@ import org.springframework.context.ApplicationEventPublisherAware;
|
||||
import org.springframework.context.SmartLifecycle;
|
||||
import org.springframework.core.serializer.Deserializer;
|
||||
import org.springframework.core.serializer.Serializer;
|
||||
import org.springframework.integration.context.IntegrationContextUtils;
|
||||
import org.springframework.integration.ip.tcp.connection.AbstractConnectionFactory;
|
||||
import org.springframework.integration.ip.tcp.connection.AbstractServerConnectionFactory;
|
||||
import org.springframework.integration.ip.tcp.connection.DefaultTcpNetSSLSocketFactorySupport;
|
||||
@@ -134,7 +133,7 @@ public class TcpConnectionFactoryFactoryBean extends AbstractFactoryBean<Abstrac
|
||||
@Override
|
||||
protected AbstractConnectionFactory createInstance() throws Exception {
|
||||
if (!this.mapperSet) {
|
||||
mapper.setMessageBuilderFactory(IntegrationContextUtils.getMessageBuilderFactory(this.beanFactory));
|
||||
mapper.setBeanFactory(this.beanFactory);
|
||||
}
|
||||
if (this.usingNio) {
|
||||
if ("server".equals(this.type)) {
|
||||
|
||||
@@ -93,6 +93,8 @@ public abstract class AbstractConnectionFactory extends IntegrationObjectSupport
|
||||
|
||||
private volatile TcpMessageMapper mapper = new TcpMessageMapper();
|
||||
|
||||
private volatile boolean mapperSet;
|
||||
|
||||
private volatile boolean singleUse;
|
||||
|
||||
private volatile boolean active;
|
||||
@@ -359,6 +361,7 @@ public abstract class AbstractConnectionFactory extends IntegrationObjectSupport
|
||||
*/
|
||||
public void setMapper(TcpMessageMapper mapper) {
|
||||
this.mapper = mapper;
|
||||
this.mapperSet = true;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -409,6 +412,14 @@ public abstract class AbstractConnectionFactory extends IntegrationObjectSupport
|
||||
this.nioHarvestInterval = nioHarvestInterval;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onInit() throws Exception {
|
||||
super.onInit();
|
||||
if (!this.mapperSet) {
|
||||
this.mapper.setBeanFactory(this.getBeanFactory());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start() {
|
||||
if (logger.isInfoEnabled()) {
|
||||
|
||||
@@ -21,6 +21,10 @@ import java.util.Map;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.BeanFactoryAware;
|
||||
import org.springframework.integration.context.IntegrationContextUtils;
|
||||
import org.springframework.integration.ip.IpHeaders;
|
||||
import org.springframework.integration.mapping.InboundMessageMapper;
|
||||
import org.springframework.integration.mapping.OutboundMessageMapper;
|
||||
@@ -46,7 +50,8 @@ import org.springframework.messaging.MessageHandlingException;
|
||||
*/
|
||||
public class TcpMessageMapper implements
|
||||
InboundMessageMapper<TcpConnection>,
|
||||
OutboundMessageMapper<Object> {
|
||||
OutboundMessageMapper<Object>,
|
||||
BeanFactoryAware {
|
||||
|
||||
protected final Log logger = LogFactory.getLog(this.getClass());
|
||||
|
||||
@@ -81,8 +86,9 @@ public class TcpMessageMapper implements
|
||||
this.applySequence = applySequence;
|
||||
}
|
||||
|
||||
public void setMessageBuilderFactory(MessageBuilderFactory messageBuilderFactory) {
|
||||
this.messageBuilderFactory = messageBuilderFactory;
|
||||
@Override
|
||||
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
|
||||
this.messageBuilderFactory = IntegrationContextUtils.getMessageBuilderFactory(beanFactory);
|
||||
}
|
||||
|
||||
protected MessageBuilderFactory getMessageBuilderFactory() {
|
||||
|
||||
@@ -23,6 +23,10 @@ import java.util.UUID;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.BeanFactoryAware;
|
||||
import org.springframework.integration.context.IntegrationContextUtils;
|
||||
import org.springframework.integration.ip.IpHeaders;
|
||||
import org.springframework.integration.ip.util.RegexUtils;
|
||||
import org.springframework.integration.mapping.InboundMessageMapper;
|
||||
@@ -57,7 +61,8 @@ import org.springframework.util.Assert;
|
||||
* @author Dave Syer
|
||||
* @since 2.0
|
||||
*/
|
||||
public class DatagramPacketMessageMapper implements InboundMessageMapper<DatagramPacket>, OutboundMessageMapper<DatagramPacket> {
|
||||
public class DatagramPacketMessageMapper implements InboundMessageMapper<DatagramPacket>, OutboundMessageMapper<DatagramPacket>,
|
||||
BeanFactoryAware {
|
||||
|
||||
private volatile String charset = "UTF-8";
|
||||
|
||||
@@ -77,10 +82,6 @@ public class DatagramPacketMessageMapper implements InboundMessageMapper<Datagra
|
||||
RegexUtils.escapeRegexSpecials(MessageHeaders.ID) +
|
||||
"=" + "([^;]*);");
|
||||
|
||||
public void setMessageBuilderFactory(MessageBuilderFactory messageBuilderFactory) {
|
||||
this.messageBuilderFactory = messageBuilderFactory;
|
||||
}
|
||||
|
||||
public void setCharset(String charset) {
|
||||
this.charset = charset;
|
||||
}
|
||||
@@ -104,6 +105,11 @@ public class DatagramPacketMessageMapper implements InboundMessageMapper<Datagra
|
||||
this.lookupHost = lookupHost;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
|
||||
this.messageBuilderFactory = IntegrationContextUtils.getMessageBuilderFactory(beanFactory);
|
||||
}
|
||||
|
||||
/**
|
||||
* Raw byte[] from message, possibly with a length field up front.
|
||||
*/
|
||||
|
||||
@@ -75,7 +75,7 @@ public class UnicastReceivingChannelAdapter extends AbstractInternetProtocolRece
|
||||
@Override
|
||||
protected void onInit() {
|
||||
super.onInit();
|
||||
this.mapper.setMessageBuilderFactory(this.getMessageBuilderFactory());
|
||||
this.mapper.setBeanFactory(this.getBeanFactory());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -32,11 +32,11 @@ import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import org.springframework.messaging.MessageHandlingException;
|
||||
import org.springframework.integration.MessageRejectedException;
|
||||
import org.springframework.integration.ip.AbstractInternetProtocolSendingMessageHandler;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.MessageDeliveryException;
|
||||
import org.springframework.messaging.MessageHandlingException;
|
||||
import org.springframework.messaging.MessagingException;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
@@ -298,6 +298,65 @@ public class UnicastSendingMessageHandler extends
|
||||
return this.socket;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see java.net.Socket#setReceiveBufferSize(int)
|
||||
* @see DatagramSocket#setReceiveBufferSize(int)
|
||||
*/
|
||||
@Override
|
||||
public void setSoReceiveBufferSize(int size) {
|
||||
this.soReceiveBufferSize = size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLocalAddress(String localAddress) {
|
||||
this.localAddress = localAddress;
|
||||
}
|
||||
|
||||
public void setTaskExecutor(Executor taskExecutor) {
|
||||
Assert.notNull(taskExecutor, "'taskExecutor' cannot be null");
|
||||
this.taskExecutor = taskExecutor;
|
||||
this.taskExecutorSet = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ackCounter the ackCounter to set
|
||||
*/
|
||||
public void setAckCounter(int ackCounter) {
|
||||
this.ackCounter = ackCounter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getComponentType(){
|
||||
return "ip:udp-outbound-channel-adapter";
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the acknowledge
|
||||
*/
|
||||
public boolean isAcknowledge() {
|
||||
return acknowledge;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the ackPort
|
||||
*/
|
||||
public int getAckPort() {
|
||||
return ackPort;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the soReceiveBufferSize
|
||||
*/
|
||||
public int getSoReceiveBufferSize() {
|
||||
return soReceiveBufferSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onInit() throws Exception {
|
||||
super.onInit();
|
||||
this.mapper.setBeanFactory(this.getBeanFactory());
|
||||
}
|
||||
|
||||
protected void setSocketAttributes(DatagramSocket socket) throws SocketException {
|
||||
if (this.getSoTimeout() >= 0) {
|
||||
socket.setSoTimeout(this.getSoTimeout());
|
||||
@@ -365,56 +424,4 @@ public class UnicastSendingMessageHandler extends
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see java.net.Socket#setReceiveBufferSize(int)
|
||||
* @see DatagramSocket#setReceiveBufferSize(int)
|
||||
*/
|
||||
@Override
|
||||
public void setSoReceiveBufferSize(int size) {
|
||||
this.soReceiveBufferSize = size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLocalAddress(String localAddress) {
|
||||
this.localAddress = localAddress;
|
||||
}
|
||||
|
||||
public void setTaskExecutor(Executor taskExecutor) {
|
||||
Assert.notNull(taskExecutor, "'taskExecutor' cannot be null");
|
||||
this.taskExecutor = taskExecutor;
|
||||
this.taskExecutorSet = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ackCounter the ackCounter to set
|
||||
*/
|
||||
public void setAckCounter(int ackCounter) {
|
||||
this.ackCounter = ackCounter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getComponentType(){
|
||||
return "ip:udp-outbound-channel-adapter";
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the acknowledge
|
||||
*/
|
||||
public boolean isAcknowledge() {
|
||||
return acknowledge;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the ackPort
|
||||
*/
|
||||
public int getAckPort() {
|
||||
return ackPort;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the soReceiveBufferSize
|
||||
*/
|
||||
public int getSoReceiveBufferSize() {
|
||||
return soReceiveBufferSize;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -42,6 +42,7 @@ import org.springframework.core.serializer.Serializer;
|
||||
import org.springframework.core.task.TaskExecutor;
|
||||
import org.springframework.integration.channel.DirectChannel;
|
||||
import org.springframework.integration.channel.QueueChannel;
|
||||
import org.springframework.integration.core.MessagingTemplate;
|
||||
import org.springframework.integration.endpoint.AbstractEndpoint;
|
||||
import org.springframework.integration.endpoint.EventDrivenConsumer;
|
||||
import org.springframework.integration.handler.advice.AbstractRequestHandlerAdvice;
|
||||
@@ -70,12 +71,12 @@ import org.springframework.integration.ip.udp.MulticastReceivingChannelAdapter;
|
||||
import org.springframework.integration.ip.udp.MulticastSendingMessageHandler;
|
||||
import org.springframework.integration.ip.udp.UnicastReceivingChannelAdapter;
|
||||
import org.springframework.integration.ip.udp.UnicastSendingMessageHandler;
|
||||
import org.springframework.messaging.support.GenericMessage;
|
||||
import org.springframework.integration.support.MessageBuilderFactory;
|
||||
import org.springframework.integration.test.util.TestUtils;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.MessageChannel;
|
||||
import org.springframework.messaging.MessageHandler;
|
||||
import org.springframework.integration.core.MessagingTemplate;
|
||||
import org.springframework.messaging.support.GenericMessage;
|
||||
import org.springframework.scheduling.TaskScheduler;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
@@ -274,6 +275,9 @@ public class ParserUnitTests {
|
||||
@Autowired
|
||||
QueueChannel eventChannel;
|
||||
|
||||
@Autowired
|
||||
MessageBuilderFactory messageBuilderFactory;
|
||||
|
||||
private static volatile int adviceCalled;
|
||||
|
||||
@Test
|
||||
@@ -295,6 +299,7 @@ public class ParserUnitTests {
|
||||
assertFalse((Boolean)mapperAccessor.getPropertyValue("lookupHost"));
|
||||
assertFalse(TestUtils.getPropertyValue(udpIn, "autoStartup", Boolean.class));
|
||||
assertEquals(1234, dfa.getPropertyValue("phase"));
|
||||
assertSame(this.messageBuilderFactory, mapperAccessor.getPropertyValue("messageBuilderFactory"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -313,12 +318,14 @@ public class ParserUnitTests {
|
||||
DatagramPacketMessageMapper mapper = (DatagramPacketMessageMapper) dfa.getPropertyValue("mapper");
|
||||
DirectFieldAccessor mapperAccessor = new DirectFieldAccessor(mapper);
|
||||
assertTrue((Boolean)mapperAccessor.getPropertyValue("lookupHost"));
|
||||
assertSame(this.messageBuilderFactory, mapperAccessor.getPropertyValue("messageBuilderFactory"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInTcp() {
|
||||
DirectFieldAccessor dfa = new DirectFieldAccessor(tcpIn);
|
||||
assertSame(cfS1, dfa.getPropertyValue("serverConnectionFactory"));
|
||||
assertSame(this.messageBuilderFactory, TestUtils.getPropertyValue(cfS1, "mapper.messageBuilderFactory"));
|
||||
assertEquals("testInTcp",tcpIn.getComponentName());
|
||||
assertEquals("ip:tcp-inbound-channel-adapter", tcpIn.getComponentType());
|
||||
assertEquals(errorChannel, dfa.getPropertyValue("errorChannel"));
|
||||
@@ -345,8 +352,8 @@ public class ParserUnitTests {
|
||||
@Test
|
||||
public void testInTcpNioSSLDefaultConfig() {
|
||||
assertFalse(cfS1Nio.isLookupHost());
|
||||
assertTrue((Boolean) TestUtils.getPropertyValue(
|
||||
TestUtils.getPropertyValue(cfS1Nio, "mapper"), "applySequence"));
|
||||
assertTrue((Boolean) TestUtils.getPropertyValue(cfS1Nio, "mapper.applySequence"));
|
||||
assertSame(this.messageBuilderFactory, TestUtils.getPropertyValue(cfS1Nio, "mapper.messageBuilderFactory"));
|
||||
Object connectionSupport = TestUtils.getPropertyValue(cfS1Nio, "tcpNioConnectionSupport");
|
||||
assertTrue(connectionSupport instanceof DefaultTcpNioSSLConnectionSupport);
|
||||
assertNotNull(TestUtils.getPropertyValue(connectionSupport, "sslContext"));
|
||||
@@ -374,6 +381,7 @@ public class ParserUnitTests {
|
||||
assertEquals(23, dfa.getPropertyValue("order"));
|
||||
assertEquals("testOutUdp",udpOut.getComponentName());
|
||||
assertEquals("ip:udp-outbound-channel-adapter", udpOut.getComponentType());
|
||||
assertSame(this.messageBuilderFactory, TestUtils.getPropertyValue(mapper, "messageBuilderFactory"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -395,6 +403,7 @@ public class ParserUnitTests {
|
||||
assertEquals(54, dfa.getPropertyValue("soTimeout"));
|
||||
assertEquals(55, dfa.getPropertyValue("timeToLive"));
|
||||
assertEquals(12, dfa.getPropertyValue("order"));
|
||||
assertSame(this.messageBuilderFactory, TestUtils.getPropertyValue(mapper, "messageBuilderFactory"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user