package com.ibm.wiotp.sdk.codecs; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.joda.time.DateTime; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import com.google.gson.JsonParser; import com.ibm.wiotp.sdk.exceptions.MalformedMessageException; public class JsonCodec implements MessageCodec<JsonObject> { private final static JsonParser JSON_PARSER = new JsonParser(); @Override public byte[] encode(JsonObject data, DateTime timestamp) { if (data != null) { return data.toString().getBytes(Charset.forName("UTF-8")); } else { return new byte[0]; } } @Override public JsonMessage decode(MqttMessage msg) throws MalformedMessageException { JsonObject data; if (msg.getPayload().length == 0) { data = null; } else { try { final String payloadInString = new String(msg.getPayload(), "UTF8"); data = JSON_PARSER.parse(payloadInString).getAsJsonObject(); } catch (JsonParseException | UnsupportedEncodingException e) { throw new MalformedMessageException("Unable to parse JSON: " + e.toString()); } } return new JsonMessage(data, null); } @Override public Class<JsonObject> getMessageClass() { return JsonObject.class; } @Override public String getMessageFormat() { return "json"; } }