diff --git a/spring-integration-java-dsl/build.gradle b/spring-integration-java-dsl/build.gradle index 63d52af..5741499 100644 --- a/spring-integration-java-dsl/build.gradle +++ b/spring-integration-java-dsl/build.gradle @@ -29,8 +29,8 @@ ext { jmsApiVersion = '1.1-rev-1' log4jVersion = '1.2.17' slf4jVersion = '1.7.6' - springIntegrationVersion = '4.0.2.RELEASE' - springBootVersion = '1.1.0.RELEASE' + springIntegrationVersion = '4.0.3.RELEASE' + springBootVersion = '1.1.4.RELEASE' linkHomepage = 'https://github.com/spring-projects/spring-integration-extensions' linkCi = 'https://build.spring.io/browse/INTEXT' diff --git a/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/DslRecipientListRouter.java b/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/DslRecipientListRouter.java index c86b715..e52a1a1 100644 --- a/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/DslRecipientListRouter.java +++ b/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/DslRecipientListRouter.java @@ -55,7 +55,7 @@ class DslRecipientListRouter extends RecipientListRouter { } @Override - public void onInit() { + public void onInit() throws Exception { for (Map.Entry recipient : this.expressionRecipientMap.entrySet()) { ExpressionEvaluatingSelector selector = null; String expression = recipient.getValue(); diff --git a/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/HeaderEnricherSpec.java b/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/HeaderEnricherSpec.java index 4352ac9..1cca767 100644 --- a/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/HeaderEnricherSpec.java +++ b/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/HeaderEnricherSpec.java @@ -20,6 +20,7 @@ import java.util.HashMap; import java.util.Map; import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.integration.context.IntegrationContextUtils; import org.springframework.integration.dsl.core.IntegrationComponentSpec; import org.springframework.integration.dsl.support.BeanNameMessageProcessor; import org.springframework.integration.handler.ExpressionEvaluatingMessageProcessor; @@ -97,6 +98,17 @@ public class HeaderEnricherSpec extends IntegrationComponentSpec HeaderEnricherSpec headerChannelsToString() { + return headerExpression("replyChannel", + "@" + IntegrationContextUtils.INTEGRATION_HEADER_CHANNEL_REGISTRY_BEAN_NAME + + ".channelToChannelName(headers.replyChannel)", + true) + .headerExpression("errorChannel", + "@" + IntegrationContextUtils.INTEGRATION_HEADER_CHANNEL_REGISTRY_BEAN_NAME + + ".channelToChannelName(headers.errorChannel)", + true); + } + @Override protected HeaderEnricher doGet() { return this.headerEnricher; diff --git a/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/amqp/AmqpPollableMessageChannelSpec.java b/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/amqp/AmqpPollableMessageChannelSpec.java index 7fb2df9..791fb05 100644 --- a/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/amqp/AmqpPollableMessageChannelSpec.java +++ b/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/amqp/AmqpPollableMessageChannelSpec.java @@ -20,6 +20,7 @@ import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.support.MessagePropertiesConverter; import org.springframework.amqp.support.converter.MessageConverter; import org.springframework.beans.factory.BeanCreationException; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.integration.amqp.channel.AbstractAmqpChannel; import org.springframework.integration.amqp.config.AmqpChannelFactoryBean; import org.springframework.integration.dsl.channel.MessageChannelSpec; @@ -42,6 +43,7 @@ public class AmqpPollableMessageChannelSpec> extends J protected AbstractJmsChannel doGet() { AbstractJmsChannel jmsChannel = super.doGet(); if (this.cacheLevel != null) { + //TODO till INT-3435 DirectFieldAccessor dfa = new DirectFieldAccessor(jmsChannel); Object container = dfa.getPropertyValue("container"); if (container instanceof DefaultMessageListenerContainer) { diff --git a/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/jms/JmsMessageDrivenChannelAdapter.java b/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/jms/JmsMessageDrivenChannelAdapter.java index 7fac33f..1efcae7 100644 --- a/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/jms/JmsMessageDrivenChannelAdapter.java +++ b/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/jms/JmsMessageDrivenChannelAdapter.java @@ -77,6 +77,7 @@ public class JmsMessageDrivenChannelAdapter extends MessageProducerSupport imple public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { super.setApplicationContext(applicationContext); this.endpoint.setApplicationContext(applicationContext); + this.endpoint.setBeanFactory(applicationContext); this.listener.setBeanFactory(applicationContext); } diff --git a/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/jms/JmsPollableMessageChannelSpec.java b/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/jms/JmsPollableMessageChannelSpec.java index c8284d9..bdae1e5 100644 --- a/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/jms/JmsPollableMessageChannelSpec.java +++ b/spring-integration-java-dsl/src/main/java/org/springframework/integration/dsl/jms/JmsPollableMessageChannelSpec.java @@ -20,6 +20,7 @@ import javax.jms.ConnectionFactory; import javax.jms.Destination; import org.springframework.beans.factory.BeanCreationException; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.integration.dsl.channel.MessageChannelSpec; import org.springframework.integration.jms.AbstractJmsChannel; import org.springframework.integration.jms.config.JmsChannelFactoryBean; @@ -42,6 +43,7 @@ public class JmsPollableMessageChannelSpec message = this.outputChannel.receive(20000); assertNotNull(message); @@ -354,9 +355,9 @@ public class IntegrationFlowTests { fail("Expected MessageDispatchingException"); } catch (Exception e) { - assertThat(e, Matchers.instanceOf(MessageDeliveryException.class)); - assertThat(e.getCause(), Matchers.instanceOf(MessageDispatchingException.class)); - assertThat(e.getMessage(), Matchers.containsString("Dispatcher has no subscribers")); + assertThat(e, instanceOf(MessageDeliveryException.class)); + assertThat(e.getCause(), instanceOf(MessageDispatchingException.class)); + assertThat(e.getMessage(), containsString("Dispatcher has no subscribers")); } this.controlBus.send("@payloadSerializingTransformer.start()"); @@ -393,7 +394,7 @@ public class IntegrationFlowTests { assertEquals("test", reply.getPayload()); assertTrue(this.beanFactory.containsBean("bridgeFlow2.channel#0")); - assertThat(this.beanFactory.getBean("bridgeFlow2.channel#0"), Matchers.instanceOf(FixedSubscriberChannel + assertThat(this.beanFactory.getBean("bridgeFlow2.channel#0"), instanceOf(FixedSubscriberChannel .class)); try { @@ -401,9 +402,9 @@ public class IntegrationFlowTests { fail("Expected MessageDispatchingException"); } catch (Exception e) { - assertThat(e, Matchers.instanceOf(MessageDeliveryException.class)); - assertThat(e.getCause(), Matchers.instanceOf(MessageDispatchingException.class)); - assertThat(e.getMessage(), Matchers.containsString("Dispatcher has no subscribers")); + assertThat(e, instanceOf(MessageDeliveryException.class)); + assertThat(e.getCause(), instanceOf(MessageDispatchingException.class)); + assertThat(e.getMessage(), containsString("Dispatcher has no subscribers")); } this.controlBus.send("@bridge.start()"); this.bridgeFlow2Input.send(message); @@ -421,8 +422,8 @@ public class IntegrationFlowTests { fail("BeanCreationException expected"); } catch (Exception e) { - assertThat(e, Matchers.instanceOf(BeanCreationException.class)); - assertThat(e.getMessage(), Matchers.containsString("is a one-way 'MessageHandler'")); + assertThat(e, instanceOf(BeanCreationException.class)); + assertThat(e.getMessage(), containsString("is a one-way 'MessageHandler'")); } finally { if (context != null) { @@ -439,8 +440,8 @@ public class IntegrationFlowTests { fail("BeanCreationException expected"); } catch (Exception e) { - assertThat(e, Matchers.instanceOf(BeanCreationException.class)); - assertThat(e.getMessage(), Matchers.containsString("'.fixedSubscriberChannel()' " + + assertThat(e, instanceOf(BeanCreationException.class)); + assertThat(e.getMessage(), containsString("'.fixedSubscriberChannel()' " + "can't be the last EIP-method in the IntegrationFlow definition")); } finally { @@ -459,8 +460,8 @@ public class IntegrationFlowTests { fail("NullPointerException expected"); } catch (Exception e) { - assertThat(e, Matchers.instanceOf(MessageHandlingException.class)); - assertThat(e.getCause(), Matchers.instanceOf(NullPointerException.class)); + assertThat(e, instanceOf(MessageHandlingException.class)); + assertThat(e.getCause(), instanceOf(NullPointerException.class)); } DefaultFileNameGenerator fileNameGenerator = new DefaultFileNameGenerator(); fileNameGenerator.setBeanFactory(this.beanFactory); @@ -518,10 +519,10 @@ public class IntegrationFlowTests { fail("BeanCreationException expected"); } catch (Exception e) { - assertThat(e, Matchers.instanceOf(IllegalArgumentException.class)); - assertThat(e.getCause(), Matchers.instanceOf(BeanCreationException.class)); + assertThat(e, instanceOf(IllegalArgumentException.class)); + assertThat(e.getCause(), instanceOf(BeanCreationException.class)); assertThat(e.getCause().getMessage(), - Matchers.containsString("must be populated to target objects via 'get()' method call")); + containsString("must be populated to target objects via 'get()' method call")); } finally { if (context != null) { @@ -541,7 +542,7 @@ public class IntegrationFlowTests { assertNotNull(receive); assertEquals("Bar Bar", receive.getHeaders().get("foo")); Object payload = receive.getPayload(); - assertThat(payload, Matchers.instanceOf(TestPojo.class)); + assertThat(payload, instanceOf(TestPojo.class)); TestPojo result = (TestPojo) payload; assertEquals("Bar Bar", result.getName()); assertNotNull(result.getDate()); @@ -578,7 +579,7 @@ public class IntegrationFlowTests { Message receive = replyChannel.receive(2000); assertNotNull(receive); - assertThat(receive.getPayload(), Matchers.instanceOf(List.class)); + assertThat(receive.getPayload(), instanceOf(List.class)); @SuppressWarnings("unchecked") List result = (List) receive.getPayload(); for (int i = 0; i < payload.size(); i++) { @@ -600,9 +601,9 @@ public class IntegrationFlowTests { fail("Expected MessageDispatchingException"); } catch (Exception e) { - assertThat(e, Matchers.instanceOf(MessageDeliveryException.class)); - assertThat(e.getCause(), Matchers.instanceOf(MessageDispatchingException.class)); - assertThat(e.getMessage(), Matchers.containsString("Dispatcher has no subscribers")); + assertThat(e, instanceOf(MessageDeliveryException.class)); + assertThat(e.getCause(), instanceOf(MessageDispatchingException.class)); + assertThat(e.getMessage(), containsString("Dispatcher has no subscribers")); } this.controlBus.send("@xpathHeaderEnricher.start()"); @@ -613,6 +614,7 @@ public class IntegrationFlowTests { MessageHeaders headers = result.getHeaders(); assertEquals("1", headers.get("one")); assertEquals("2", headers.get("two")); + assertThat(headers.getReplyChannel(), instanceOf(String.class)); } @Test @@ -661,7 +663,7 @@ public class IntegrationFlowTests { } catch (MessageDeliveryException e) { assertThat(e.getMessage(), - Matchers.containsString("no channel resolved by router and no default output channel defined")); + containsString("no channel resolved by router and no default output channel defined")); } } @@ -690,9 +692,9 @@ public class IntegrationFlowTests { fail("DestinationResolutionException expected."); } catch (MessagingException e) { - assertThat(e.getCause(), Matchers.instanceOf(DestinationResolutionException.class)); + assertThat(e.getCause(), instanceOf(DestinationResolutionException.class)); assertThat(e.getCause().getMessage(), - Matchers.containsString("failed to look up MessageChannel with name 'bad-channel'")); + containsString("failed to look up MessageChannel with name 'bad-channel'")); } } @@ -721,9 +723,9 @@ public class IntegrationFlowTests { fail("DestinationResolutionException expected."); } catch (MessagingException e) { - assertThat(e.getCause(), Matchers.instanceOf(DestinationResolutionException.class)); + assertThat(e.getCause(), instanceOf(DestinationResolutionException.class)); assertThat(e.getCause().getMessage(), - Matchers.containsString("failed to look up MessageChannel with name 'bad-channel'")); + containsString("failed to look up MessageChannel with name 'bad-channel'")); } } @@ -756,7 +758,7 @@ public class IntegrationFlowTests { } catch (MessageDeliveryException e) { assertThat(e.getMessage(), - Matchers.containsString("no channel resolved by router and no default output channel defined")); + containsString("no channel resolved by router and no default output channel defined")); } } @@ -908,9 +910,9 @@ public class IntegrationFlowTests { receive = this.gatewayError.receive(2000); assertNotNull(receive); - assertThat(receive, Matchers.instanceOf(ErrorMessage.class)); - assertThat(receive.getPayload(), Matchers.instanceOf(MessageRejectedException.class)); - assertThat(((Exception) receive.getPayload()).getMessage(), Matchers.containsString("' rejected Message")); + assertThat(receive, instanceOf(ErrorMessage.class)); + assertThat(receive.getPayload(), instanceOf(MessageRejectedException.class)); + assertThat(((Exception) receive.getPayload()).getMessage(), containsString("' rejected Message")); } @Autowired @@ -1399,7 +1401,8 @@ public class IntegrationFlowTests { return IntegrationFlows.from("xpathHeaderEnricherInput") .enrichHeaders( s -> s.header("one", new XPathExpressionEvaluatingHeaderValueMessageProcessor("/root/elementOne")) - .header("two", new XPathExpressionEvaluatingHeaderValueMessageProcessor("/root/elementTwo")), + .header("two", new XPathExpressionEvaluatingHeaderValueMessageProcessor("/root/elementTwo")) + .headerChannelsToString(), c -> c.autoStartup(false).id("xpathHeaderEnricher") ) .get();