Skip to content

Commit eeb9961

Browse files
author
Adrian Chlebosz
committed
GH-2068: Introduce further amendments after code review
1 parent 603202f commit eeb9961

File tree

2 files changed

+31
-39
lines changed

2 files changed

+31
-39
lines changed

Diff for: spring-kafka/src/main/java/org/springframework/kafka/listener/adapter/ConvertingMessageListener.java

+25-33
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@
3030
import org.springframework.kafka.listener.MessageListener;
3131
import org.springframework.kafka.support.Acknowledgment;
3232
import org.springframework.messaging.Message;
33+
import org.springframework.messaging.converter.GenericMessageConverter;
3334
import org.springframework.messaging.converter.MessageConversionException;
3435
import org.springframework.messaging.converter.MessageConverter;
35-
import org.springframework.messaging.converter.SimpleMessageConverter;
3636
import org.springframework.messaging.support.GenericMessage;
3737
import org.springframework.util.Assert;
3838

@@ -41,59 +41,51 @@
4141
* converting received {@link ConsumerRecord} using specified {@link MessageConverter}
4242
* and then passes result to specified {@link MessageListener}.
4343
*
44-
* @param <T> the key type.
45-
* @param <U> the value type.
4644
* @param <V> the desired value type after conversion.
4745
*
4846
* @author Adrian Chlebosz
4947
* @since 3.0
5048
* @see AcknowledgingConsumerAwareMessageListener
5149
*/
52-
public class ConvertingMessageListener<T, U, V> implements AcknowledgingConsumerAwareMessageListener<T, U> {
50+
@SuppressWarnings("rawtypes")
51+
public class ConvertingMessageListener<V> implements AcknowledgingConsumerAwareMessageListener<Object, Object> {
5352

54-
private final MessageListener<T, V> delegate;
55-
private final MessageConverter messageConverter;
53+
private final MessageListener delegate;
5654
private final Class<V> desiredValueType;
5755

56+
private MessageConverter messageConverter;
57+
5858
/**
5959
* Construct an instance with the provided {@link MessageListener} and {@link Class}
6060
* as a desired type of {@link ConsumerRecord}'s value after conversion. Default value of
61-
* {@link MessageConverter} is used, which is {@link SimpleMessageConverter}.
61+
* {@link MessageConverter} is used, which is {@link GenericMessageConverter}.
6262
*
63-
* @param delegate the {@link MessageListener} to use when passing converted {@link ConsumerRecord} further.
63+
* @param delegateMessageListener the {@link MessageListener} to use when passing converted {@link ConsumerRecord} further.
6464
* @param desiredValueType the {@link Class} setting desired type of {@link ConsumerRecord}'s value.
6565
*/
66-
public ConvertingMessageListener(MessageListener<T, V> delegate, Class<V> desiredValueType) {
67-
Assert.notNull(delegate, "Delegate message listener cannot be null");
68-
Assert.notNull(desiredValueType, "Desired value type cannot be null");
69-
70-
this.delegate = delegate;
66+
public ConvertingMessageListener(MessageListener<?, V> delegateMessageListener, Class<V> desiredValueType) {
67+
Assert.notNull(delegateMessageListener, "'delegateMessageListener' cannot be null");
68+
Assert.notNull(desiredValueType, "'desiredValueType' cannot be null");
69+
this.delegate = delegateMessageListener;
7170
this.desiredValueType = desiredValueType;
7271

73-
this.messageConverter = new SimpleMessageConverter();
72+
this.messageConverter = new GenericMessageConverter();
7473
}
7574

7675
/**
77-
* Construct an instance with the provided {@link MessageListener}, {@link MessageConverter} and {@link Class}
78-
* as a desired type of {@link ConsumerRecord}'s value after conversion.
79-
*
80-
* @param delegate the {@link MessageListener} to use when passing converted {@link ConsumerRecord} further.
81-
* @param messageConverter the {@link MessageConverter} to use for conversion.
82-
* @param desiredValueType the {@link Class} setting desired type of {@link ConsumerRecord}'s value.
76+
* Set a {@link MessageConverter}.
77+
* @param messageConverter the message converter to use for conversion of incoming {@link ConsumerRecord}.
78+
* @since 3.0
8379
*/
84-
public ConvertingMessageListener(MessageListener<T, V> delegate, MessageConverter messageConverter, Class<V> desiredValueType) {
85-
Assert.notNull(delegate, "Delegate message listener cannot be null");
86-
Assert.notNull(messageConverter, "Message converter cannot be null");
87-
Assert.notNull(desiredValueType, "Desired value type cannot be null");
88-
89-
this.delegate = delegate;
80+
public void setMessageConverter(MessageConverter messageConverter) {
81+
Assert.notNull(messageConverter, "'messageConverter' cannot be null");
9082
this.messageConverter = messageConverter;
91-
this.desiredValueType = desiredValueType;
9283
}
9384

9485
@Override
95-
public void onMessage(ConsumerRecord<T, U> data, Acknowledgment acknowledgment, Consumer<?, ?> consumer) { // NOSONAR
96-
ConsumerRecord<T, V> convertedConsumerRecord = convertConsumerRecord(data);
86+
@SuppressWarnings("unchecked")
87+
public void onMessage(ConsumerRecord data, Acknowledgment acknowledgment, Consumer consumer) {
88+
ConsumerRecord convertedConsumerRecord = convertConsumerRecord(data);
9789
if (this.delegate instanceof AcknowledgingConsumerAwareMessageListener) {
9890
this.delegate.onMessage(convertedConsumerRecord, acknowledgment, consumer);
9991
}
@@ -107,13 +99,13 @@ else if (this.delegate instanceof AcknowledgingMessageListener) {
10799
this.delegate.onMessage(convertedConsumerRecord);
108100
}
109101

110-
private ConsumerRecord<T, V> convertConsumerRecord(ConsumerRecord<T, U> data) { // NOSONAR
102+
private ConsumerRecord convertConsumerRecord(ConsumerRecord data) {
111103
Header[] headerArray = data.headers().toArray();
112104
Map<String, Object> headerMap = Arrays.stream(headerArray)
113105
.collect(Collectors.toMap(Header::key, Header::value));
114106

115-
Message<U> message = new GenericMessage<>(data.value(), headerMap);
116-
V converted = (V) this.messageConverter.fromMessage(message, this.desiredValueType);
107+
Message message = new GenericMessage<>(data.value(), headerMap);
108+
Object converted = this.messageConverter.fromMessage(message, this.desiredValueType);
117109

118110
if (converted == null) {
119111
throw new MessageConversionException(message, "Message cannot be converted by used MessageConverter");
@@ -122,7 +114,7 @@ private ConsumerRecord<T, V> convertConsumerRecord(ConsumerRecord<T, U> data) {
122114
return rebuildConsumerRecord(data, converted);
123115
}
124116

125-
private ConsumerRecord<T, V> rebuildConsumerRecord(ConsumerRecord<T, U> data, V converted) {
117+
private static ConsumerRecord rebuildConsumerRecord(ConsumerRecord data, Object converted) {
126118
return new ConsumerRecord<>(
127119
data.topic(),
128120
data.partition(),

Diff for: spring-kafka/src/test/java/org/springframework/kafka/listener/adapter/ConvertingMessageListenerTests.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ class ConvertingMessageListenerTests {
4242
public void testMessageListenerIsInvokedWithConvertedSimpleRecord() {
4343
var consumerRecord = new ConsumerRecord<>("foo", 0, 0, "key", 0);
4444

45-
var delegateListener = (MessageListener<String, Integer>) (data) -> assertThat(data.value()).isNotNull();
46-
var convertingMessageListener = new ConvertingMessageListener<String, Integer, Integer>(
45+
var delegateListener = (MessageListener<String, Long>) (data) -> assertThat(data.value()).isNotNull();
46+
var convertingMessageListener = new ConvertingMessageListener<>(
4747
delegateListener,
48-
Integer.class
48+
Long.class
4949
);
5050

5151
convertingMessageListener.onMessage(consumerRecord, null, null);
@@ -61,11 +61,11 @@ public void testMessageListenerIsInvokedWithRecordConvertedByCustomConverter() t
6161
assertThat(data.value()).isNotNull();
6262
assertThat(data.value().getA()).isEqualTo("foo");
6363
};
64-
var convertingMessageListener = new ConvertingMessageListener<String, String, ToBeConverted>(
64+
var convertingMessageListener = new ConvertingMessageListener<>(
6565
delegateListener,
66-
new MappingJackson2MessageConverter(),
6766
ToBeConverted.class
6867
);
68+
convertingMessageListener.setMessageConverter(new MappingJackson2MessageConverter());
6969

7070
convertingMessageListener.onMessage(consumerRecord, null, null);
7171
}
@@ -80,7 +80,7 @@ public void testConversionFailsWhileUsingDefaultConverterForComplexObject() thro
8080
assertThat(data.value()).isNotNull();
8181
assertThat(data.value().getA()).isEqualTo("foo");
8282
};
83-
var convertingMessageListener = new ConvertingMessageListener<String, String, ToBeConverted>(
83+
var convertingMessageListener = new ConvertingMessageListener<>(
8484
delegateListener,
8585
ToBeConverted.class
8686
);

0 commit comments

Comments
 (0)