Skip to content

Commit 5d85f00

Browse files
artembilangaryrussell
authored andcommitted
GH-3455: default MqttMessConv.toMessageBuilder()
Fixes #3455 After introduction `MqttMessageConverter.toMessageBuilder()` (#3181) the existing `MqttMessageConverter` must also implement this new method where in most cases `toMessage()` must call `toMessageBuilder()` instead though. * Make `MqttMessageConverter.toMessageBuilder()` as a `default` with a delegation to the `toMessage()` allowing target implementors to keep their code during migration without any breaking changes **Cherry-pick to 5.3.x**
1 parent 4947e3e commit 5d85f00

File tree

2 files changed

+22
-14
lines changed

2 files changed

+22
-14
lines changed

spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/support/MqttMessageConverter.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2020 the original author or authors.
2+
* Copyright 2002-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@
2020

2121
import org.springframework.integration.handler.MessageProcessor;
2222
import org.springframework.integration.support.AbstractIntegrationMessageBuilder;
23+
import org.springframework.integration.support.MutableMessageBuilder;
2324
import org.springframework.messaging.Message;
2425
import org.springframework.messaging.converter.MessageConverter;
2526

@@ -28,14 +29,15 @@
2829
* a header.
2930
*
3031
* @author Gary Russell
32+
* @author Artem Bilan
33+
*
3134
* @since 4.0
3235
*
3336
*/
3437
public interface MqttMessageConverter extends MessageConverter {
3538

3639
/**
3740
* Convert to a Message.
38-
*
3941
* @param topic the topic.
4042
* @param mqttMessage the MQTT message.
4143
* @return the Message.
@@ -44,11 +46,22 @@ public interface MqttMessageConverter extends MessageConverter {
4446

4547
/**
4648
* Convert to a message builder.
49+
* This method is {@code default} with a delegation to the {@link #toMessage(String, MqttMessage)}
50+
* to avoid a breaking change for migrated projects.
51+
* The delegation will be swapped in the next version.
4752
* @param topic the topic.
4853
* @param mqttMessage the MQTT message.
4954
* @return the builder.
5055
*/
51-
AbstractIntegrationMessageBuilder<?> toMessageBuilder(String topic, MqttMessage mqttMessage);
56+
default AbstractIntegrationMessageBuilder<?> toMessageBuilder(String topic, MqttMessage mqttMessage) {
57+
Message<?> message = toMessage(topic, mqttMessage);
58+
if (message != null) {
59+
return MutableMessageBuilder.fromMessage(message);
60+
}
61+
else {
62+
return null;
63+
}
64+
}
5265

5366
static MessageProcessor<Integer> defaultQosProcessor() {
5467
return message -> message.getHeaders().get(MqttHeaders.QOS, Integer.class);

spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/MqttAdapterTests.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@
8888
import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter;
8989
import org.springframework.integration.mqtt.support.MqttHeaderAccessor;
9090
import org.springframework.integration.mqtt.support.MqttMessageConverter;
91-
import org.springframework.integration.support.AbstractIntegrationMessageBuilder;
9291
import org.springframework.integration.test.util.TestUtils;
9392
import org.springframework.messaging.Message;
9493
import org.springframework.messaging.MessageHandlingException;
@@ -310,25 +309,21 @@ public void testInboundOptionsApplied() throws Exception {
310309

311310
adapter.setConverter(new MqttMessageConverter() {
312311

313-
@Override public Message<?> toMessage(String topic, MqttMessage mqttMessage) {
314-
return null;
315-
}
316-
317-
@Override public AbstractIntegrationMessageBuilder<?> toMessageBuilder(String topic,
318-
MqttMessage mqttMessage) {
319-
312+
@Override
313+
public Message<?> toMessage(String topic, MqttMessage mqttMessage) {
320314
return null;
321315
}
322316

323-
@Override public Object fromMessage(Message<?> message, Class<?> targetClass) {
317+
@Override
318+
public Object fromMessage(Message<?> message, Class<?> targetClass) {
324319
return null;
325320
}
326321

327-
@Override public Message<?> toMessage(Object payload, MessageHeaders headers) {
322+
@Override
323+
public Message<?> toMessage(Object payload, MessageHeaders headers) {
328324
return null;
329325
}
330326

331-
332327
});
333328

334329
callback.get().messageArrived("baz", message);

0 commit comments

Comments
 (0)