diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamConfiguration.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamConfiguration.java index d89c31ef6c..27cc33d2fc 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamConfiguration.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamConfiguration.java @@ -34,6 +34,7 @@ import org.springframework.cloud.contract.stubrunner.StubConfiguration; import org.springframework.cloud.contract.stubrunner.messaging.integration.StubRunnerIntegrationConfiguration; import org.springframework.cloud.contract.stubrunner.messaging.stream.StubRunnerStreamConfiguration.FlowRegistrar; import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.binding.BinderAwareChannelResolver; import org.springframework.cloud.stream.config.BindingProperties; import org.springframework.cloud.stream.config.ChannelBindingServiceProperties; import org.springframework.context.Lifecycle; @@ -76,7 +77,10 @@ public class StubRunnerStreamConfiguration { Collection value = entry.getValue(); String name = key.getGroupId() + "_" + key.getArtifactId(); for (Contract dsl : value) { - if (dsl != null && dsl.getInput() != null + if (dsl == null) { + continue; + } + if (dsl.getInput() != null && dsl.getInput().getMessageFrom() != null && StringUtils.hasText( dsl.getInput().getMessageFrom().getClientValue())) { @@ -113,6 +117,12 @@ public class StubRunnerStreamConfiguration { .start(); beanFactory.getBean(flowName + ".transformer", Lifecycle.class) .start(); + } else if (dsl.getOutputMessage() != null + && dsl.getOutputMessage().getSentTo() != null + && StringUtils.hasText( + dsl.getOutputMessage().getSentTo().getClientValue())) { + BinderAwareChannelResolver resolver = beanFactory.getBean(BinderAwareChannelResolver.class); + resolver.resolveDestination(dsl.getOutputMessage().getSentTo().getClientValue()); } } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/stream/ContractVerifierStreamAutoConfiguration.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/stream/ContractVerifierStreamAutoConfiguration.java index 492641430d..5010d74f43 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/stream/ContractVerifierStreamAutoConfiguration.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/stream/ContractVerifierStreamAutoConfiguration.java @@ -25,6 +25,8 @@ import org.springframework.cloud.contract.verifier.messaging.internal.ContractVe import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging; import org.springframework.cloud.contract.verifier.messaging.noop.NoOpContractVerifierAutoConfiguration; import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.test.binder.MessageCollector; +import org.springframework.cloud.stream.test.binder.TestSupportBinder; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -39,6 +41,13 @@ import org.springframework.messaging.Message; @AutoConfigureBefore(NoOpContractVerifierAutoConfiguration.class) public class ContractVerifierStreamAutoConfiguration { + @Bean + @ConditionalOnClass(name = "org.springframework.cloud.stream.test.binder.TestSupportBinder") + @ConditionalOnMissingBean + public MessageCollector contractVerifierMessageCollector() { + return new TestSupportBinder().messageCollector(); + } + @Bean @ConditionalOnMissingBean MessageVerifier> contractVerifierMessageExchange(