ARTEMIS-233 Convert TextMessage to UTF8 in MQTT
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/e453aae5 Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/e453aae5 Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/e453aae5 Branch: refs/heads/master Commit: e453aae5c951428c3a89b6442345d864dad5aaa0 Parents: 385bd04 Author: Martyn Taylor <[email protected]> Authored: Wed May 25 20:31:13 2016 +0100 Committer: Clebert Suconic <[email protected]> Committed: Wed May 25 15:37:20 2016 -0400 ---------------------------------------------------------------------- .../core/protocol/mqtt/MQTTPublishManager.java | 24 ++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e453aae5/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTPublishManager.java ---------------------------------------------------------------------- diff --git a/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTPublishManager.java b/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTPublishManager.java index 93d0bd2..fc61dd9 100644 --- a/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTPublishManager.java +++ b/artemis-protocols/artemis-mqtt-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/mqtt/MQTTPublishManager.java @@ -17,9 +17,13 @@ package org.apache.activemq.artemis.core.protocol.mqtt; +import java.io.UnsupportedEncodingException; + import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.EmptyByteBuf; import io.netty.handler.codec.mqtt.MqttMessageType; +import org.apache.activemq.artemis.api.core.Message; import org.apache.activemq.artemis.api.core.Pair; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.core.io.IOCallback; @@ -216,8 +220,24 @@ public class MQTTPublishManager { private void sendServerMessage(int messageId, ServerMessageImpl message, int deliveryCount, int qos) { String address = MQTTUtil.convertCoreAddressFilterToMQTT(message.getAddress().toString()); - ByteBuf payload = message.getBodyBufferDuplicate().byteBuf(); - + ByteBuf payload; + switch (message.getType()) { + case Message.TEXT_TYPE: + try { + SimpleString text = message.getBodyBuffer().readNullableSimpleString(); + byte[] stringPayload = text.toString().getBytes("UTF-8"); + payload = ByteBufAllocator.DEFAULT.buffer(stringPayload.length); + payload.writeBytes(stringPayload); + break; + } + catch (UnsupportedEncodingException e) { + e.printStackTrace(); + // Do nothing default to sending raw bytes. + } + default: + payload = message.getBodyBufferDuplicate().byteBuf(); + break; + } session.getProtocolHandler().send(messageId, address, qos, payload, deliveryCount); }
