com.tinkerpop.rexster.protocol.serializer.msgpack.MsgPackSerializer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of rexster-protocol Show documentation
Show all versions of rexster-protocol Show documentation
RexPro is a binary protocol for Rexster graph server.
package com.tinkerpop.rexster.protocol.serializer.msgpack;
import com.tinkerpop.rexster.protocol.msg.ErrorResponseMessage;
import com.tinkerpop.rexster.protocol.msg.RexProBindings;
import com.tinkerpop.rexster.protocol.msg.RexProMessage;
import com.tinkerpop.rexster.protocol.msg.RexProMessageMeta;
import com.tinkerpop.rexster.protocol.msg.RexProScriptResult;
import com.tinkerpop.rexster.protocol.msg.ScriptRequestMessage;
import com.tinkerpop.rexster.protocol.msg.ScriptResponseMessage;
import com.tinkerpop.rexster.protocol.msg.SessionRequestMessage;
import com.tinkerpop.rexster.protocol.msg.SessionResponseMessage;
import com.tinkerpop.rexster.protocol.serializer.RexProSerializer;
import com.tinkerpop.rexster.protocol.serializer.msgpack.templates.MetaTemplate;
import com.tinkerpop.rexster.protocol.serializer.msgpack.templates.ResultsTemplate;
import com.tinkerpop.rexster.protocol.serializer.msgpack.templates.messages.ErrorResponseMessageTemplate;
import com.tinkerpop.rexster.protocol.serializer.msgpack.templates.messages.MsgPackScriptResponseMessageTemplate;
import com.tinkerpop.rexster.protocol.serializer.msgpack.templates.messages.ScriptRequestMessageTemplate;
import com.tinkerpop.rexster.protocol.serializer.msgpack.templates.messages.SessionRequestMessageTemplate;
import com.tinkerpop.rexster.protocol.serializer.msgpack.templates.messages.SessionResponseMessageTemplate;
import org.msgpack.MessagePack;
import org.msgpack.packer.BufferPacker;
import org.msgpack.unpacker.Unpacker;
import java.io.IOException;
/**
* @author Blake Eggleston (bdeggleston.github.com)
*/
public class MsgPackSerializer implements RexProSerializer {
public static final byte SERIALIZER_ID = 0;
private static final MessagePack msgpack = new MessagePack();
static {
//todo: get rid of the special classes and implement their serialization in the message templates
msgpack.register(RexProMessageMeta.class, new MetaTemplate());
msgpack.register(RexProBindings.class, RexProBindings.SerializationTemplate.getInstance());
msgpack.register(RexProScriptResult.class, ResultsTemplate.getInstance());
//todo: write a bit about why this is required
msgpack.register(ErrorResponseMessage.class, new ErrorResponseMessageTemplate());
msgpack.register(SessionRequestMessage.class, new SessionRequestMessageTemplate());
msgpack.register(SessionResponseMessage.class, new SessionResponseMessageTemplate());
msgpack.register(ScriptRequestMessage.class, new ScriptRequestMessageTemplate());
msgpack.register(ScriptResponseMessage.class, new MsgPackScriptResponseMessageTemplate());
}
public Message deserialize(byte[] bytes, Class messageClass) throws IOException {
Unpacker un = msgpack.createBufferUnpacker(bytes);
return msgpack.lookup(messageClass).read(un, null);
}
public byte[] serialize(Message message, Class messageClass) throws IOException {
BufferPacker pk = msgpack.createBufferPacker();
msgpack.lookup(messageClass).write(pk, message);
return pk.toByteArray();
}
@Override
public byte getSerializerId() {
return SERIALIZER_ID;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy