GH-3455: default MqttMessageConverter.toMessage

Fixes https://github.com/spring-projects/spring-integration/issues/3455

After introduction `MqttMessageConverter.toMessageBuilder()`
(https://github.com/spring-projects/spring-integration/issues/3181)
the existing `MqttMessageConverter` must also implement this new method
where in most cases `toMessage()` call `toMessageBuilder()`

* Make `MqttMessageConverter.toMessage()` as a `default` with a delegation
to the `toMessageBuilder()` allowing target implementors to avoid extra
method
This commit is contained in:
Artem Bilan
2021-01-08 15:54:57 -05:00
committed by Gary Russell
parent 90ca3d6ea5
commit f294331945
3 changed files with 25 additions and 23 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2020 the original author or authors.
* Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
package org.springframework.integration.mqtt.support;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import org.eclipse.paho.client.mqttv3.MqttMessage;
@@ -57,9 +58,9 @@ public class DefaultPahoMessageConverter implements MqttMessageConverter, BeanFa
private BytesMessageMapper bytesMessageMapper;
private volatile boolean payloadAsBytes = false;
private boolean payloadAsBytes = false;
private volatile BeanFactory beanFactory;
private BeanFactory beanFactory;
private volatile MessageBuilderFactory messageBuilderFactory = new DefaultMessageBuilderFactory();
@@ -82,7 +83,7 @@ public class DefaultPahoMessageConverter implements MqttMessageConverter, BeanFa
* @param defaultRetained the default retained.
*/
public DefaultPahoMessageConverter(int defaultQos, boolean defaultRetained) {
this(defaultQos, defaultRetained, "UTF-8");
this(defaultQos, defaultRetained, StandardCharsets.UTF_8.name());
}
/**
@@ -124,7 +125,7 @@ public class DefaultPahoMessageConverter implements MqttMessageConverter, BeanFa
public DefaultPahoMessageConverter(int defaultQos, MessageProcessor<Integer> qosProcessor, boolean defaultRetained,
MessageProcessor<Boolean> retainedProcessor) {
this(defaultQos, qosProcessor, defaultRetained, retainedProcessor, "UTF-8");
this(defaultQos, qosProcessor, defaultRetained, retainedProcessor, StandardCharsets.UTF_8.name());
}
/**
@@ -204,11 +205,6 @@ public class DefaultPahoMessageConverter implements MqttMessageConverter, BeanFa
return toMessage(null, (MqttMessage) mqttMessage);
}
@Override
public Message<?> toMessage(String topic, MqttMessage mqttMessage) {
return toMessageBuilder(topic, mqttMessage).build();
}
@Override
public AbstractIntegrationMessageBuilder<?> toMessageBuilder(String topic, MqttMessage mqttMessage) {
try {

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2020 the original author or authors.
* Copyright 2002-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -28,6 +28,8 @@ import org.springframework.messaging.converter.MessageConverter;
* a header.
*
* @author Gary Russell
* @author Artem Bilan
*
* @since 4.0
*
*/
@@ -35,12 +37,20 @@ public interface MqttMessageConverter extends MessageConverter {
/**
* Convert to a Message.
*
* The default implementation calls {@link #toMessageBuilder(String, MqttMessage)}.
* @param topic the topic.
* @param mqttMessage the MQTT message.
* @return the Message.
*/
Message<?> toMessage(String topic, MqttMessage mqttMessage);
default Message<?> toMessage(String topic, MqttMessage mqttMessage) {
AbstractIntegrationMessageBuilder<?> builder = toMessageBuilder(topic, mqttMessage);
if (builder != null) {
return builder.build();
}
else {
return null;
}
}
/**
* Convert to a message builder.

View File

@@ -312,25 +312,21 @@ public class MqttAdapterTests {
adapter.setConverter(new MqttMessageConverter() {
@Override public Message<?> toMessage(String topic, MqttMessage mqttMessage) {
@Override
public AbstractIntegrationMessageBuilder<?> toMessageBuilder(String topic, MqttMessage mqttMessage) {
return null;
}
@Override public AbstractIntegrationMessageBuilder<?> toMessageBuilder(String topic,
MqttMessage mqttMessage) {
@Override
public Object fromMessage(Message<?> message, Class<?> targetClass) {
return null;
}
@Override public Object fromMessage(Message<?> message, Class<?> targetClass) {
@Override
public Message<?> toMessage(Object payload, MessageHeaders headers) {
return null;
}
@Override public Message<?> toMessage(Object payload, MessageHeaders headers) {
return null;
}
});
callback.get().messageArrived("baz", message);