diff options
Diffstat (limited to 'qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageConverter_v0_10.java')
-rw-r--r-- | qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageConverter_v0_10.java | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageConverter_v0_10.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageConverter_v0_10.java index 5244a7f51b..32ecc6bd0e 100644 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageConverter_v0_10.java +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageConverter_v0_10.java @@ -20,7 +20,14 @@ */ package org.apache.qpid.server.protocol.v0_10; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.util.List; +import java.util.Map; + import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.plugin.MessageConverter; import org.apache.qpid.server.store.StoreFuture; @@ -30,9 +37,13 @@ import org.apache.qpid.transport.DeliveryProperties; import org.apache.qpid.transport.Header; import org.apache.qpid.transport.MessageDeliveryPriority; import org.apache.qpid.transport.MessageProperties; +import org.apache.qpid.transport.codec.BBEncoder; public class MessageConverter_v0_10 implements MessageConverter<ServerMessage, MessageTransferMessage> { + + public static final Charset UTF_8 = Charset.forName("UTF-8"); + @Override public Class<ServerMessage> getInputClass() { @@ -129,6 +140,79 @@ public class MessageConverter_v0_10 implements MessageConverter<ServerMessage, M return new MessageMetaData_0_10(header, size, serverMsg.getArrivalTime()); } + + public static byte[] convertToBody(Object object) + { + if(object instanceof String) + { + return ((String)object).getBytes(UTF_8); + } + else if(object instanceof byte[]) + { + return (byte[]) object; + } + else if(object instanceof Map) + { + BBEncoder encoder = new BBEncoder(1024); + encoder.writeMap((Map)object); + ByteBuffer buf = encoder.segment(); + int remaining = buf.remaining(); + byte[] data = new byte[remaining]; + buf.get(data); + return data; + + } + else if(object instanceof List) + { + BBEncoder encoder = new BBEncoder(1024); + encoder.writeList((List) object); + ByteBuffer buf = encoder.segment(); + int remaining = buf.remaining(); + byte[] data = new byte[remaining]; + buf.get(data); + return data; + } + else + { + ByteArrayOutputStream bytesOut = new ByteArrayOutputStream(); + try + { + ObjectOutputStream os = new ObjectOutputStream(bytesOut); + os.writeObject(object); + return bytesOut.toByteArray(); + } + catch (IOException e) + { + throw new RuntimeException(e); + } + } + } + + public static String getBodyMimeType(Object object) + { + if(object instanceof String) + { + return "text/plain"; + } + else if(object instanceof byte[]) + { + return "application/octet-stream"; + } + else if(object instanceof Map) + { + return "amqp/map"; + } + else if(object instanceof List) + { + return "amqp/list"; + } + else + { + return "application/java-object-stream"; + } + } + + @Override public String getType() { |