Almost there

This commit is contained in:
Marcin Grzejszczak
2017-10-11 12:33:13 +02:00
parent 7756921cdb
commit 7242649f9c
4 changed files with 40 additions and 16 deletions

View File

@@ -19,9 +19,10 @@ package org.springframework.cloud.contract.verifier.messaging.stream;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
import org.springframework.cloud.stream.config.BindingProperties;
import org.springframework.cloud.stream.config.BindingServiceProperties;
@@ -29,6 +30,10 @@ import org.springframework.cloud.stream.test.binder.MessageCollector;
import org.springframework.context.ApplicationContext;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.converter.DefaultContentTypeResolver;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.util.MimeTypeUtils;
/**
* @author Marcin Grzejszczak
@@ -41,7 +46,6 @@ public class StreamStubMessages implements MessageVerifier<Message<?>> {
private final MessageCollector messageCollector;
private final ContractVerifierStreamMessageBuilder builder = new ContractVerifierStreamMessageBuilder();
@Autowired
public StreamStubMessages(ApplicationContext context) {
this.context = context;
this.messageCollector = context.getBean(MessageCollector.class);
@@ -71,7 +75,12 @@ public class StreamStubMessages implements MessageVerifier<Message<?>> {
try {
MessageChannel messageChannel = this.context
.getBean(resolvedDestination(destination), MessageChannel.class);
return this.messageCollector.forChannel(messageChannel).poll(timeout, timeUnit);
Message<?> message = this.messageCollector.forChannel(messageChannel).poll(timeout, timeUnit);
if (message == null) {
return message;
}
Object fromMessage = converter().fromMessage(message, String.class);
return MessageBuilder.createMessage(fromMessage, message.getHeaders());
}
catch (Exception e) {
log.error("Exception occurred while trying to read a message from "
@@ -110,4 +119,26 @@ public class StreamStubMessages implements MessageVerifier<Message<?>> {
return receive(destination, 5, TimeUnit.SECONDS);
}
private MappingJackson2MessageConverter converter() {
ObjectMapper mapper = null;
try {
mapper = this.context.getBean(ObjectMapper.class);
} catch (NoSuchBeanDefinitionException e) {
}
MappingJackson2MessageConverter converter = createJacksonConverter();
if (mapper != null) {
converter.setObjectMapper(mapper);
}
return converter;
}
protected MappingJackson2MessageConverter createJacksonConverter() {
DefaultContentTypeResolver resolver = new DefaultContentTypeResolver();
resolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON);
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setContentTypeResolver(resolver);
return converter;
}
}