diff --git a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-camel/src/main/resources/META-INF/spring.factories b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-camel/src/main/resources/META-INF/spring.factories
deleted file mode 100644
index 080044c8f7..0000000000
--- a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-camel/src/main/resources/META-INF/spring.factories
+++ /dev/null
@@ -1,3 +0,0 @@
-# Auto Configuration
-org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner=\
-org.springframework.cloud.contract.stubrunner.messaging.camel.StubRunnerCamelConfiguration
diff --git a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-integration/src/main/resources/META-INF/spring.factories b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-integration/src/main/resources/META-INF/spring.factories
deleted file mode 100644
index b6c221d301..0000000000
--- a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-integration/src/main/resources/META-INF/spring.factories
+++ /dev/null
@@ -1,3 +0,0 @@
-# Auto Configuration
-org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner=\
-org.springframework.cloud.contract.stubrunner.messaging.integration.StubRunnerIntegrationConfiguration
diff --git a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-stream/.jdk8 b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-stream/.jdk8
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-stream/pom.xml b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-stream/pom.xml
index 3e3395356f..c6b411380b 100644
--- a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-stream/pom.xml
+++ b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-stream/pom.xml
@@ -12,13 +12,15 @@
jar
Spring Cloud Contract Stub Runner Stream
Spring Cloud Contract Stub Runner Stream
-
- 1.8
-
+
+ org.springframework.cloud
+ spring-cloud-starter-stream-rabbit
+
org.springframework.cloud
spring-cloud-contract-stub-runner
+ test
org.springframework.cloud
@@ -28,14 +30,12 @@
org.springframework.cloud
spring-cloud-contract-verifier
-
-
- org.springframework.cloud
- spring-cloud-stream
+ test
org.springframework.cloud
spring-cloud-stream-test-support
+ test
org.springframework.integration
diff --git a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-stream/src/main/resources/META-INF/spring.factories b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-stream/src/main/resources/META-INF/spring.factories
deleted file mode 100644
index 24526289a9..0000000000
--- a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-stream/src/main/resources/META-INF/spring.factories
+++ /dev/null
@@ -1,3 +0,0 @@
-# Auto Configuration
-org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner=\
-org.springframework.cloud.contract.stubrunner.messaging.stream.StubRunnerStreamConfiguration
diff --git a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/pom.xml b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/pom.xml
index 70fa93df7f..564eeb21f9 100644
--- a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/pom.xml
+++ b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/pom.xml
@@ -17,6 +17,11 @@
org.springframework.cloud
spring-cloud-contract-verifier
+
+ org.springframework.cloud
+ spring-cloud-stream-test-support
+ true
+
org.springframework.cloud
spring-cloud-contract-wiremock
@@ -53,6 +58,21 @@
args4j
args4j
+
+ org.apache.camel
+ camel-spring-boot-starter
+ true
+
+
+ org.apache.camel
+ camel-jackson
+ true
+
+
+ org.springframework.integration
+ spring-integration-java-dsl
+ true
+
org.eclipse.aether
aether-api
diff --git a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-camel/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelConfiguration.java b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelConfiguration.java
similarity index 94%
rename from spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-camel/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelConfiguration.java
rename to spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelConfiguration.java
index c6b6feaba5..d7a5e821f3 100644
--- a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-camel/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelConfiguration.java
+++ b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelConfiguration.java
@@ -21,6 +21,7 @@ import java.util.Map;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.spring.SpringRouteBuilder;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.cloud.contract.spec.Contract;
import org.springframework.cloud.contract.stubrunner.BatchStubRunner;
import org.springframework.cloud.contract.stubrunner.StubConfiguration;
@@ -34,6 +35,7 @@ import org.springframework.context.annotation.Configuration;
* @author Marcin Grzejszczak
*/
@Configuration
+@ConditionalOnClass(RoutesBuilder.class)
public class StubRunnerCamelConfiguration {
@Bean
diff --git a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-camel/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelPredicate.java b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelPredicate.java
similarity index 100%
rename from spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-camel/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelPredicate.java
rename to spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelPredicate.java
diff --git a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-camel/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelProcessor.java b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelProcessor.java
similarity index 100%
rename from spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-camel/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelProcessor.java
rename to spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/camel/StubRunnerCamelProcessor.java
diff --git a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-integration/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationConfiguration.java b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationConfiguration.java
similarity index 68%
rename from spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-integration/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationConfiguration.java
rename to spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationConfiguration.java
index 62e7937191..78f74d7dc0 100644
--- a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-integration/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationConfiguration.java
+++ b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationConfiguration.java
@@ -18,16 +18,23 @@ package org.springframework.cloud.contract.stubrunner.messaging.integration;
import java.util.Collection;
import java.util.Map;
+import java.util.Map.Entry;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.cloud.contract.spec.Contract;
import org.springframework.cloud.contract.stubrunner.BatchStubRunner;
import org.springframework.cloud.contract.stubrunner.StubConfiguration;
import org.springframework.context.Lifecycle;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.integration.dsl.FilterEndpointSpec;
+import org.springframework.integration.dsl.GenericEndpointSpec;
import org.springframework.integration.dsl.IntegrationFlowBuilder;
import org.springframework.integration.dsl.IntegrationFlows;
+import org.springframework.integration.dsl.support.Consumer;
+import org.springframework.integration.transformer.MessageTransformingHandler;
import org.springframework.messaging.Message;
/**
@@ -37,26 +44,39 @@ import org.springframework.messaging.Message;
* @author Marcin Grzejszczak
*/
@Configuration
+@ConditionalOnClass(IntegrationFlowBuilder.class)
public class StubRunnerIntegrationConfiguration {
@Bean
- public FlowRegistrar flowRegistrar(AutowireCapableBeanFactory beanFactory,
+ @ConditionalOnMissingBean(name="stubFlowRegistrar")
+ public FlowRegistrar stubFlowRegistrar(AutowireCapableBeanFactory beanFactory,
BatchStubRunner batchStubRunner) {
Map> contracts = batchStubRunner
.getContracts();
- contracts.entrySet().stream().forEach(entry -> {
+ for (Entry> entry : contracts.entrySet()) {
String name = entry.getKey().getGroupId() + "_"
+ entry.getKey().getArtifactId();
- entry.getValue().stream().forEach(dsl -> {
+ for (Contract dsl : entry.getValue()) {
if (dsl.getInput() != null && dsl.getInput().getMessageFrom() != null
&& dsl.getInput().getMessageFrom().getClientValue() != null) {
- String flowName = name + "_" + dsl.getLabel() + "_" + dsl.hashCode();
+ final String flowName = name + "_" + dsl.getLabel() + "_" + dsl.hashCode();
IntegrationFlowBuilder builder = IntegrationFlows
.from(dsl.getInput().getMessageFrom().getClientValue())
.filter(new StubRunnerIntegrationMessageSelector(dsl),
- e -> e.id(flowName + ".filter"))
+ new Consumer() {
+ @Override
+ public void accept(FilterEndpointSpec e) {
+ e.id(flowName + ".filter");
+ }
+ })
.transform(new StubRunnerIntegrationTransformer(dsl),
- e -> e.id(flowName + ".transformer"));
+ new Consumer>() {
+ @Override
+ public void accept(
+ GenericEndpointSpec e) {
+ e.id(flowName + ".transformer");
+ }
+ });
if (dsl.getOutputMessage() != null) {
builder = builder.channel(
dsl.getOutputMessage().getSentTo().getClientValue());
@@ -68,9 +88,9 @@ public class StubRunnerIntegrationConfiguration {
beanFactory.getBean(flowName + ".filter", Lifecycle.class).start();
beanFactory.getBean(flowName + ".transformer", Lifecycle.class)
.start();
- }
- });
- });
+ }
+ }
+ }
return new FlowRegistrar();
}
diff --git a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-integration/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationMessageSelector.java b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationMessageSelector.java
similarity index 100%
rename from spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-integration/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationMessageSelector.java
rename to spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationMessageSelector.java
diff --git a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-integration/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationTransformer.java b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationTransformer.java
similarity index 100%
rename from spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-integration/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationTransformer.java
rename to spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/integration/StubRunnerIntegrationTransformer.java
diff --git a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-stream/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamConfiguration.java b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamConfiguration.java
similarity index 59%
rename from spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-stream/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamConfiguration.java
rename to spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamConfiguration.java
index a087e26794..9c715c4bc6 100644
--- a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-stream/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamConfiguration.java
+++ b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamConfiguration.java
@@ -23,16 +23,24 @@ import java.util.Map.Entry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.cloud.contract.spec.Contract;
import org.springframework.cloud.contract.stubrunner.BatchStubRunner;
import org.springframework.cloud.contract.stubrunner.StubConfiguration;
+import org.springframework.cloud.contract.stubrunner.messaging.stream.StubRunnerStreamConfiguration.FlowRegistrar;
+import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.config.BindingProperties;
import org.springframework.cloud.stream.config.ChannelBindingServiceProperties;
import org.springframework.context.Lifecycle;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.integration.dsl.FilterEndpointSpec;
+import org.springframework.integration.dsl.GenericEndpointSpec;
import org.springframework.integration.dsl.IntegrationFlowBuilder;
import org.springframework.integration.dsl.IntegrationFlows;
+import org.springframework.integration.dsl.support.Consumer;
+import org.springframework.integration.transformer.MessageTransformingHandler;
import org.springframework.messaging.Message;
import org.springframework.util.StringUtils;
@@ -43,13 +51,15 @@ import org.springframework.util.StringUtils;
* @author Marcin Grzejszczak
*/
@Configuration
+@ConditionalOnClass({FlowRegistrar.class, EnableBinding.class})
public class StubRunnerStreamConfiguration {
private static final Logger log = LoggerFactory
.getLogger(StubRunnerStreamConfiguration.class);
@Bean
- public FlowRegistrar flowRegistrar(AutowireCapableBeanFactory beanFactory,
+ @ConditionalOnMissingBean(name="stubFlowRegistrar")
+ public FlowRegistrar stubFlowRegistrar(AutowireCapableBeanFactory beanFactory,
BatchStubRunner batchStubRunner) {
Map> contracts = batchStubRunner
.getContracts();
@@ -58,35 +68,46 @@ public class StubRunnerStreamConfiguration {
StubConfiguration key = entry.getKey();
Collection value = entry.getValue();
String name = key.getGroupId() + "_" + key.getArtifactId();
- value.stream()
- .filter(dsl -> dsl != null && dsl.getInput() != null
+ for (Contract dsl : value) {
+ if (dsl != null && dsl.getInput() != null
&& dsl.getInput().getMessageFrom() != null
&& StringUtils.hasText(
- dsl.getInput().getMessageFrom().getClientValue()))
- .forEach(dsl -> {
- String flowName = name + "_" + dsl.getLabel() + "_"
- + dsl.hashCode();
- String from = resolvedDestination(beanFactory,
- dsl.getInput().getMessageFrom().getClientValue());
- IntegrationFlowBuilder builder = IntegrationFlows.from(from)
- .filter(new StubRunnerStreamMessageSelector(dsl),
- e -> e.id(flowName + ".filter"))
- .transform(new StubRunnerStreamTransformer(dsl),
- e -> e.id(flowName + ".transformer"));
- if (dsl.getOutputMessage() != null
- && dsl.getOutputMessage().getSentTo() != null) {
- builder = builder.channel(resolvedDestination(beanFactory,
- dsl.getOutputMessage().getSentTo().getClientValue()));
- }
- else {
- builder = builder.handle(new DummyMessageHandler(), "handle");
- }
- beanFactory.initializeBean(builder.get(), flowName);
- beanFactory.getBean(flowName + ".filter", Lifecycle.class)
- .start();
- beanFactory.getBean(flowName + ".transformer", Lifecycle.class)
- .start();
- });
+ dsl.getInput().getMessageFrom().getClientValue())) {
+ final String flowName = name + "_" + dsl.getLabel() + "_"
+ + dsl.hashCode();
+ String from = resolvedDestination(beanFactory,
+ dsl.getInput().getMessageFrom().getClientValue());
+ IntegrationFlowBuilder builder = IntegrationFlows.from(from)
+ .filter(new StubRunnerStreamMessageSelector(dsl),
+ new Consumer() {
+ @Override
+ public void accept(FilterEndpointSpec e) {
+ e.id(flowName + ".filter");
+ }
+ })
+ .transform(new StubRunnerStreamTransformer(dsl),
+ new Consumer>() {
+ @Override
+ public void accept(
+ GenericEndpointSpec e) {
+ e.id(flowName + ".transformer");
+ }
+ });
+ if (dsl.getOutputMessage() != null
+ && dsl.getOutputMessage().getSentTo() != null) {
+ builder = builder.channel(resolvedDestination(beanFactory,
+ dsl.getOutputMessage().getSentTo().getClientValue()));
+ }
+ else {
+ builder = builder.handle(new DummyMessageHandler(), "handle");
+ }
+ beanFactory.initializeBean(builder.get(), flowName);
+ beanFactory.getBean(flowName + ".filter", Lifecycle.class)
+ .start();
+ beanFactory.getBean(flowName + ".transformer", Lifecycle.class)
+ .start();
+ }
+ }
}
return new FlowRegistrar();
}
diff --git a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-stream/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamMessageSelector.java b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamMessageSelector.java
similarity index 100%
rename from spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-stream/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamMessageSelector.java
rename to spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamMessageSelector.java
diff --git a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-stream/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamTransformer.java b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamTransformer.java
similarity index 100%
rename from spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner-stream/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamTransformer.java
rename to spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/messaging/stream/StubRunnerStreamTransformer.java
diff --git a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/resources/META-INF/spring.factories b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/resources/META-INF/spring.factories
index acec82308a..3fdb01c748 100644
--- a/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/resources/META-INF/spring.factories
+++ b/spring-cloud-contract-stub-runner/spring-cloud-contract-stub-runner/src/main/resources/META-INF/spring.factories
@@ -2,4 +2,7 @@
org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner=\
org.springframework.cloud.contract.stubrunner.spring.StubRunnerConfiguration,\
org.springframework.cloud.contract.stubrunner.spring.cloud.StubRunnerSpringCloudAutoConfiguration,\
-org.springframework.cloud.contract.stubrunner.spring.cloud.ribbon.StubRunnerRibbonAutoConfiguration
+org.springframework.cloud.contract.stubrunner.spring.cloud.ribbon.StubRunnerRibbonAutoConfiguration,\
+org.springframework.cloud.contract.stubrunner.messaging.stream.StubRunnerStreamConfiguration,\
+org.springframework.cloud.contract.stubrunner.messaging.integration.StubRunnerIntegrationConfiguration,\
+org.springframework.cloud.contract.stubrunner.messaging.camel.StubRunnerCamelConfiguration