Trying to fix bean types for messaging

This commit is contained in:
Marcin Grzejszczak
2022-11-18 19:29:31 +01:00
parent 44977aa9e3
commit 65a6c5e95c
6 changed files with 204 additions and 32 deletions

View File

@@ -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<Message> contractVerifierMessageExchange(CamelContext camelContext,
@ConditionalOnMissingBean(MessageVerifierSender.class)
MessageVerifierSender<Message> 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 <T> void send(T payload, Map<String, Object> headers, String destination,
@Nullable YamlContract contract) {
camelStubMessages.send(payload, headers, destination, contract);
}
};
}
@Bean
@ConditionalOnMissingBean
public ContractVerifierMessaging<Message> contractVerifierMessaging(MessageVerifierSender<Message> sender,
@ConditionalOnMissingBean(MessageVerifierReceiver.class)
MessageVerifierReceiver<Message> 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<Message> camelContractVerifierMessaging(MessageVerifierSender<Message> sender,
MessageVerifierReceiver<Message> receiver) {
return new ContractVerifierCamelHelper(sender, receiver);
}

View File

@@ -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<Message<?>> contractVerifierMessageExchange(ApplicationContext applicationContext) {
return new SpringIntegrationStubMessages(applicationContext);
@ConditionalOnMissingBean(MessageVerifierSender.class)
public MessageVerifierSender<Message<?>> 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 <T> void send(T payload, Map<String, Object> headers, String destination, @Nullable YamlContract contract) {
springIntegrationStubMessages.send(payload, headers, destination, contract);
}
};
}
@Bean
@ConditionalOnMissingBean
public ContractVerifierMessaging<Message<?>> contractVerifierMessaging(MessageVerifierSender<Message<?>> sender,
MessageVerifierReceiver<Message<?>> receiver) {
@ConditionalOnMissingBean(MessageVerifierReceiver.class)
public MessageVerifierReceiver<Message<?>> 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<Message<?>> integrationContractVerifierMessaging(
MessageVerifierSender<Message<?>> sender, MessageVerifierReceiver<Message<?>> receiver) {
return new ContractVerifierHelper(sender, receiver);
}

View File

@@ -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<Message<?>
private final ContractVerifierIntegrationMessageBuilder builder = new ContractVerifierIntegrationMessageBuilder();
@Autowired
public SpringIntegrationStubMessages(ApplicationContext context) {
this.context = context;
}

View File

@@ -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<Message> contractVerifierJmsMessageExchange(ObjectProvider<JmsTemplate> jmsTemplateProvider) {
@ConditionalOnMissingBean(MessageVerifierSender.class)
MessageVerifierSender<Message> contractVerifierJmsMessageSender(ObjectProvider<JmsTemplate> 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 <T> void send(T payload, Map<String, Object> headers, String destination, @Nullable YamlContract contract) {
jmsStubMessages.send(payload, headers, destination, contract);
}
};
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnMissingBean(MessageVerifierReceiver.class)
MessageVerifierReceiver<Message> contractVerifierJmsMessageReceiver(
ObjectProvider<JmsTemplate> 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<Message> contractVerifierJmsMessaging(MessageVerifierSender<Message> sender,
MessageVerifierReceiver<Message> receiver) {
return new ContractVerifierJmsHelper(sender, receiver);

View File

@@ -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<Object> contractVerifierMessageExchange() {
return new NoOpStubMessages<>();
@ConditionalOnMissingBean(MessageVerifierSender.class)
public MessageVerifierSender<Object> noOpContractVerifierMessageSender() {
NoOpStubMessages<Object> noOpStubMessages = new NoOpStubMessages<>();
return new MessageVerifierSender<>() {
@Override
public void send(Object message, String destination, @Nullable YamlContract contract) {
noOpStubMessages.send(message, destination, contract);
}
@Override
public <T> void send(T payload, Map<String, Object> headers, String destination, @Nullable YamlContract contract) {
noOpStubMessages.send(payload, headers, destination, contract);
}
};
}
@Bean
@ConditionalOnMissingBean(MessageVerifierReceiver.class)
public MessageVerifierReceiver<Object> noOpContractVerifierMessageReceiver() {
NoOpStubMessages<Object> 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<Object> contractVerifierMessaging(NoOpStubMessages<Object> messages) {
return new ContractVerifierMessaging<>(messages, messages);
public ContractVerifierMessaging<Object> contractVerifierMessaging() {
return new ContractVerifierMessaging<>(new NoOpStubMessages<>(), new NoOpStubMessages<>());
}
@Bean

View File

@@ -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<Message<?>> sender,
@ConditionalOnMissingBean(ContractVerifierMessaging.class)
public ContractVerifierMessaging<?> streamContractVerifierMessaging(MessageVerifierSender<Message<?>> sender,
MessageVerifierReceiver<Message<?>> receiver) {
return new ContractVerifierHelper(sender, receiver);
}
@@ -55,10 +60,41 @@ public class ContractVerifierStreamAutoConfiguration {
static class InputDestinationConfiguration {
@Bean
@ConditionalOnMissingBean
MessageVerifier<Message<?>> contractVerifierMessageExchangeWithDestinations(ApplicationContext context) {
return new StreamStubMessages(new StreamInputDestinationMessageSender(context),
@ConditionalOnMissingBean(MessageVerifierSender.class)
MessageVerifierSender<Message<?>> 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 <T> void send(T payload, Map<String, Object> headers, String destination, @Nullable YamlContract contract) {
stubMessages.send(payload, headers, destination, contract);
}
};
}
@Bean
@ConditionalOnMissingBean(MessageVerifierReceiver.class)
MessageVerifierReceiver<Message<?>> 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);
}
};
}
}