diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/camel/ContractVerifierCamelConfiguration.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/camel/ContractVerifierCamelConfiguration.java index bdf1612d1e..52f1d629cc 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/camel/ContractVerifierCamelConfiguration.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/camel/ContractVerifierCamelConfiguration.java @@ -16,17 +16,21 @@ package org.springframework.cloud.contract.verifier.messaging.camel; +import java.util.Map; +import java.util.concurrent.TimeUnit; + import org.apache.camel.CamelContext; import org.apache.camel.ConsumerTemplate; import org.apache.camel.Message; import org.apache.camel.ProducerTemplate; import org.apache.camel.spring.boot.CamelAutoConfiguration; +import org.jetbrains.annotations.Nullable; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.contract.verifier.messaging.MessageVerifier; +import org.springframework.cloud.contract.verifier.converter.YamlContract; import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver; import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender; import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessage; @@ -48,15 +52,46 @@ import org.springframework.context.annotation.Import; public class ContractVerifierCamelConfiguration { @Bean - @ConditionalOnMissingBean - MessageVerifier contractVerifierMessageExchange(CamelContext camelContext, + @ConditionalOnMissingBean(MessageVerifierSender.class) + MessageVerifierSender camelContractVerifierMessageSender(CamelContext camelContext, ProducerTemplate producerTemplate, ConsumerTemplate consumerTemplate) { - return new CamelStubMessages(camelContext, producerTemplate, consumerTemplate); + CamelStubMessages camelStubMessages = new CamelStubMessages(camelContext, producerTemplate, consumerTemplate); + return new MessageVerifierSender<>() { + @Override + public void send(Message message, String destination, @Nullable YamlContract contract) { + camelStubMessages.send(message, destination, contract); + } + + @Override + public void send(T payload, Map headers, String destination, + @Nullable YamlContract contract) { + camelStubMessages.send(payload, headers, destination, contract); + } + }; } @Bean - @ConditionalOnMissingBean - public ContractVerifierMessaging contractVerifierMessaging(MessageVerifierSender sender, + @ConditionalOnMissingBean(MessageVerifierReceiver.class) + MessageVerifierReceiver camelContractVerifierMessageReceiver(CamelContext camelContext, + ProducerTemplate producerTemplate, ConsumerTemplate consumerTemplate) { + CamelStubMessages camelStubMessages = new CamelStubMessages(camelContext, producerTemplate, consumerTemplate); + return new MessageVerifierReceiver<>() { + @Override + public Message receive(String destination, long timeout, TimeUnit timeUnit, + @Nullable YamlContract contract) { + return camelStubMessages.receive(destination, timeout, timeUnit, contract); + } + + @Override + public Message receive(String destination, YamlContract contract) { + return camelStubMessages.receive(destination, contract); + } + }; + } + + @Bean + @ConditionalOnMissingBean(ContractVerifierMessaging.class) + public ContractVerifierMessaging camelContractVerifierMessaging(MessageVerifierSender sender, MessageVerifierReceiver receiver) { return new ContractVerifierCamelHelper(sender, receiver); } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/integration/ContractVerifierIntegrationConfiguration.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/integration/ContractVerifierIntegrationConfiguration.java index 5f8cb6403b..9951e3813a 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/integration/ContractVerifierIntegrationConfiguration.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/integration/ContractVerifierIntegrationConfiguration.java @@ -16,11 +16,16 @@ package org.springframework.cloud.contract.verifier.messaging.integration; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import org.jetbrains.annotations.Nullable; + import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.cloud.contract.verifier.messaging.MessageVerifier; +import org.springframework.cloud.contract.verifier.converter.YamlContract; import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver; import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender; import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessage; @@ -42,15 +47,45 @@ import org.springframework.messaging.Message; public class ContractVerifierIntegrationConfiguration { @Bean - @ConditionalOnMissingBean - public MessageVerifier> contractVerifierMessageExchange(ApplicationContext applicationContext) { - return new SpringIntegrationStubMessages(applicationContext); + @ConditionalOnMissingBean(MessageVerifierSender.class) + public MessageVerifierSender> integrationContractVerifierMessageSender( + ApplicationContext applicationContext) { + SpringIntegrationStubMessages springIntegrationStubMessages = new SpringIntegrationStubMessages(applicationContext); + return new MessageVerifierSender<>() { + @Override + public void send(Message message, String destination, @Nullable YamlContract contract) { + springIntegrationStubMessages.send(message, destination, contract); + } + + @Override + public void send(T payload, Map headers, String destination, @Nullable YamlContract contract) { + springIntegrationStubMessages.send(payload, headers, destination, contract); + } + }; } @Bean - @ConditionalOnMissingBean - public ContractVerifierMessaging> contractVerifierMessaging(MessageVerifierSender> sender, - MessageVerifierReceiver> receiver) { + @ConditionalOnMissingBean(MessageVerifierReceiver.class) + public MessageVerifierReceiver> integrationContractVerifierMessageReceiver( + ApplicationContext applicationContext) { + SpringIntegrationStubMessages springIntegrationStubMessages = new SpringIntegrationStubMessages(applicationContext); + return new MessageVerifierReceiver<>() { + @Override + public Message receive(String destination, long timeout, TimeUnit timeUnit, @Nullable YamlContract contract) { + return springIntegrationStubMessages.receive(destination, timeout, timeUnit, contract); + } + + @Override + public Message receive(String destination, YamlContract contract) { + return springIntegrationStubMessages.receive(destination, contract); + } + }; + } + + @Bean + @ConditionalOnMissingBean(ContractVerifierMessaging.class) + public ContractVerifierMessaging> integrationContractVerifierMessaging( + MessageVerifierSender> sender, MessageVerifierReceiver> receiver) { return new ContractVerifierHelper(sender, receiver); } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/integration/SpringIntegrationStubMessages.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/integration/SpringIntegrationStubMessages.java index 89f2111b10..83921a248c 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/integration/SpringIntegrationStubMessages.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/integration/SpringIntegrationStubMessages.java @@ -22,7 +22,6 @@ import java.util.concurrent.TimeUnit; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.contract.verifier.converter.YamlContract; import org.springframework.cloud.contract.verifier.messaging.MessageVerifier; import org.springframework.context.ApplicationContext; @@ -41,7 +40,6 @@ public class SpringIntegrationStubMessages implements MessageVerifier private final ContractVerifierIntegrationMessageBuilder builder = new ContractVerifierIntegrationMessageBuilder(); - @Autowired public SpringIntegrationStubMessages(ApplicationContext context) { this.context = context; } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/jms/ContractVerifierJmsConfiguration.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/jms/ContractVerifierJmsConfiguration.java index e335730fd0..57794c83ce 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/jms/ContractVerifierJmsConfiguration.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/jms/ContractVerifierJmsConfiguration.java @@ -19,6 +19,7 @@ package org.springframework.cloud.contract.verifier.messaging.jms; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.TimeUnit; import jakarta.jms.JMSException; import jakarta.jms.Message; @@ -27,13 +28,14 @@ import jakarta.jms.StreamMessage; import jakarta.jms.TextMessage; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.jetbrains.annotations.Nullable; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.contract.verifier.messaging.MessageVerifier; +import org.springframework.cloud.contract.verifier.converter.YamlContract; import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver; import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender; import org.springframework.cloud.contract.verifier.messaging.integration.ContractVerifierIntegrationConfiguration; @@ -54,14 +56,44 @@ import org.springframework.jms.core.JmsTemplate; public class ContractVerifierJmsConfiguration { @Bean - @ConditionalOnMissingBean - MessageVerifier contractVerifierJmsMessageExchange(ObjectProvider jmsTemplateProvider) { + @ConditionalOnMissingBean(MessageVerifierSender.class) + MessageVerifierSender contractVerifierJmsMessageSender(ObjectProvider jmsTemplateProvider) { JmsTemplate jmsTemplate = jmsTemplateProvider.getIfAvailable(JmsTemplate::new); - return new JmsStubMessages(jmsTemplate); + JmsStubMessages jmsStubMessages = new JmsStubMessages(jmsTemplate); + return new MessageVerifierSender<>() { + @Override + public void send(Message message, String destination, @Nullable YamlContract contract) { + jmsStubMessages.send(message, destination, contract); + } + + @Override + public void send(T payload, Map headers, String destination, @Nullable YamlContract contract) { + jmsStubMessages.send(payload, headers, destination, contract); + } + }; } @Bean - @ConditionalOnMissingBean + @ConditionalOnMissingBean(MessageVerifierReceiver.class) + MessageVerifierReceiver contractVerifierJmsMessageReceiver( + ObjectProvider jmsTemplateProvider) { + JmsTemplate jmsTemplate = jmsTemplateProvider.getIfAvailable(JmsTemplate::new); + JmsStubMessages jmsStubMessages = new JmsStubMessages(jmsTemplate); + return new MessageVerifierReceiver<>() { + @Override + public Message receive(String destination, long timeout, TimeUnit timeUnit, @Nullable YamlContract contract) { + return jmsStubMessages.receive(destination, timeout, timeUnit, contract); + } + + @Override + public Message receive(String destination, YamlContract contract) { + return jmsStubMessages.receive(destination, contract); + } + }; + } + + @Bean + @ConditionalOnMissingBean(ContractVerifierMessaging.class) ContractVerifierMessaging contractVerifierJmsMessaging(MessageVerifierSender sender, MessageVerifierReceiver receiver) { return new ContractVerifierJmsHelper(sender, receiver); diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/noop/NoOpContractVerifierAutoConfiguration.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/noop/NoOpContractVerifierAutoConfiguration.java index 012876acde..55f29d39d3 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/noop/NoOpContractVerifierAutoConfiguration.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/noop/NoOpContractVerifierAutoConfiguration.java @@ -16,12 +16,18 @@ package org.springframework.cloud.contract.verifier.messaging.noop; +import java.util.Map; +import java.util.concurrent.TimeUnit; + import com.fasterxml.jackson.databind.ObjectMapper; +import org.jetbrains.annotations.Nullable; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfigureOrder; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.cloud.contract.verifier.messaging.MessageVerifier; +import org.springframework.cloud.contract.verifier.converter.YamlContract; +import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver; +import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender; import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging; import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierObjectMapper; import org.springframework.context.annotation.Bean; @@ -38,15 +44,45 @@ import org.springframework.core.Ordered; public class NoOpContractVerifierAutoConfiguration { @Bean - @ConditionalOnMissingBean(MessageVerifier.class) - public NoOpStubMessages contractVerifierMessageExchange() { - return new NoOpStubMessages<>(); + @ConditionalOnMissingBean(MessageVerifierSender.class) + public MessageVerifierSender noOpContractVerifierMessageSender() { + NoOpStubMessages noOpStubMessages = new NoOpStubMessages<>(); + return new MessageVerifierSender<>() { + + @Override + public void send(Object message, String destination, @Nullable YamlContract contract) { + noOpStubMessages.send(message, destination, contract); + } + + @Override + public void send(T payload, Map headers, String destination, @Nullable YamlContract contract) { + noOpStubMessages.send(payload, headers, destination, contract); + } + }; + } + + @Bean + @ConditionalOnMissingBean(MessageVerifierReceiver.class) + public MessageVerifierReceiver noOpContractVerifierMessageReceiver() { + NoOpStubMessages noOpStubMessages = new NoOpStubMessages<>(); + return new MessageVerifierReceiver<>() { + + @Override + public Object receive(String destination, long timeout, TimeUnit timeUnit, @Nullable YamlContract contract) { + return noOpStubMessages.receive(destination, timeout, timeUnit, contract); + } + + @Override + public Object receive(String destination, YamlContract contract) { + return noOpStubMessages.receive(destination, contract); + } + }; } @Bean @ConditionalOnMissingBean(ContractVerifierMessaging.class) - public ContractVerifierMessaging contractVerifierMessaging(NoOpStubMessages messages) { - return new ContractVerifierMessaging<>(messages, messages); + public ContractVerifierMessaging contractVerifierMessaging() { + return new ContractVerifierMessaging<>(new NoOpStubMessages<>(), new NoOpStubMessages<>()); } @Bean 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 366e20802e..4e41661666 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 @@ -16,11 +16,16 @@ package org.springframework.cloud.contract.verifier.messaging.stream; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import org.jetbrains.annotations.Nullable; + import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.contract.verifier.messaging.MessageVerifier; +import org.springframework.cloud.contract.verifier.converter.YamlContract; import org.springframework.cloud.contract.verifier.messaging.MessageVerifierReceiver; import org.springframework.cloud.contract.verifier.messaging.MessageVerifierSender; import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessage; @@ -44,8 +49,8 @@ import org.springframework.util.Assert; public class ContractVerifierStreamAutoConfiguration { @Bean - @ConditionalOnMissingBean - public ContractVerifierMessaging contractVerifierMessagingConverter(MessageVerifierSender> sender, + @ConditionalOnMissingBean(ContractVerifierMessaging.class) + public ContractVerifierMessaging streamContractVerifierMessaging(MessageVerifierSender> sender, MessageVerifierReceiver> receiver) { return new ContractVerifierHelper(sender, receiver); } @@ -55,10 +60,41 @@ public class ContractVerifierStreamAutoConfiguration { static class InputDestinationConfiguration { @Bean - @ConditionalOnMissingBean - MessageVerifier> contractVerifierMessageExchangeWithDestinations(ApplicationContext context) { - return new StreamStubMessages(new StreamInputDestinationMessageSender(context), + @ConditionalOnMissingBean(MessageVerifierSender.class) + MessageVerifierSender> streamContractVerifierMessageSenderExchangeWithDestinations( + ApplicationContext context) { + StreamStubMessages stubMessages = new StreamStubMessages(new StreamInputDestinationMessageSender(context), new StreamOutputDestinationMessageReceiver(context)); + return new MessageVerifierSender<>() { + @Override + public void send(Message message, String destination, @Nullable YamlContract contract) { + stubMessages.send(message, destination, contract); + } + + @Override + public void send(T payload, Map headers, String destination, @Nullable YamlContract contract) { + stubMessages.send(payload, headers, destination, contract); + } + }; + } + + @Bean + @ConditionalOnMissingBean(MessageVerifierReceiver.class) + MessageVerifierReceiver> streamContractVerifierMessageReceiverExchangeWithDestinations( + ApplicationContext context) { + StreamStubMessages stubMessages = new StreamStubMessages(new StreamInputDestinationMessageSender(context), + new StreamOutputDestinationMessageReceiver(context)); + return new MessageVerifierReceiver<>() { + @Override + public Message receive(String destination, long timeout, TimeUnit timeUnit, @Nullable YamlContract contract) { + return stubMessages.receive(destination, timeout, timeUnit, contract); + } + + @Override + public Message receive(String destination, YamlContract contract) { + return stubMessages.receive(destination, contract); + } + }; } }