Java tutorial
/******************************************************************************* * Copyright (c) 2014 Joachim Tessmer * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Joachim Tessmer - initial API and implementation *******************************************************************************/ package de.instanttouch.messaging.protocol.translators; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.json.simple.JSONObject; import de.instantouch.model.base.SnakeType; import de.instantouch.model.exception.SnakeWrongTypeException; import de.instantouch.model.io.SnakeJSONReader; import de.instantouch.model.io.SnakeJSONWriter; import de.instanttouch.api.messaging.ISnakeMessage; import de.instanttouch.api.model.ISnakeType; import de.instanttouch.messaging.exception.SnakeMessagingException; import de.instanttouch.messaging.model.message.SnakeMessage; import de.instanttouch.messaging.model.message.SnakeRawMessage; import de.instanttouch.messaging.protocol.SnakeMessageTranslator; public class SnakeJsonMessageFormat extends SnakeMessageTranslator { public static final String JSON_MESSAGE_FORMAT = "de.instanttouch.messaging.protocol.translators.json.format"; private static final long serialVersionUID = 1L; public SnakeJsonMessageFormat() { super(JSON_MESSAGE_FORMAT); } @Override public SnakeRawMessage readMessage(byte[] msg) throws IOException { SnakeRawMessage rawMessage = null; String text = new String(msg); SnakeJSONReader reader = null; try { reader = new SnakeJSONReader(text); rawMessage = readMessage(reader); } finally { if (reader != null) { reader.close(); } } return rawMessage; } @Override public SnakeRawMessage readMessage(InputStream input) throws IOException { SnakeRawMessage rawMessage = null; SnakeJSONReader reader = null; try { reader = new SnakeJSONReader(input); rawMessage = readMessage(reader); } finally { if (reader != null) { reader.close(); } } return rawMessage; } private SnakeRawMessage readMessage(SnakeJSONReader reader) throws IOException { SnakeRawMessage rawMessage = new SnakeRawMessage(); JSONObject jsonObject = (JSONObject) reader.parse(); JSONObject header = (JSONObject) jsonObject.get(SnakeMessage.HEADER); try { reader.readEntity(rawMessage.header(), header); } catch (Exception e) { throw new SnakeMessagingException(e); } JSONObject payload = (JSONObject) jsonObject.get(SnakeMessage.PAYLOAD); String payLoadStr = payload.toJSONString(); rawMessage.setData(payLoadStr.getBytes()); return rawMessage; } @Override public int translateData(byte[] rawdata, ISnakeType convertedData) throws IOException { if (!(convertedData instanceof SnakeType)) { throw new SnakeWrongTypeException(ISnakeMessage.class.getCanonicalName() + " expected, is: " + convertedData.getClass().getCanonicalName()); } String text = new String(rawdata); SnakeJSONReader reader = null; try { reader = new SnakeJSONReader(text); JSONObject jsonObject = (JSONObject) reader.parse(); try { reader.read((SnakeType) convertedData, jsonObject); } catch (Exception e) { throw new SnakeMessagingException(e); } } finally { if (reader != null) { reader.close(); } } return 0; } @Override public byte[] translateType(ISnakeType data) throws IOException { byte[] converted = null; SnakeJSONWriter writer = null; try { writer = new SnakeJSONWriter(); writer.write((SnakeType) data); String asJson = writer.getContent(); converted = asJson.getBytes(); } finally { if (writer != null) { writer.close(); } } return converted; } @Override public SnakeJsonMessageFormat writeMessage(SnakeMessage message, OutputStream output) throws IOException { SnakeJSONWriter writer = null; try { writer = new SnakeJSONWriter(output); writer.write(message); } finally { if (writer != null) { writer.close(); } } return this; } }