You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2013/09/27 14:59:38 UTC
svn commit: r1526887 - in /qpid/trunk/qpid/java:
amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/codec/
broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/
Author: rgodfrey
Date: Fri Sep 27 12:59:37 2013
New Revision: 1526887
URL: http://svn.apache.org/r1526887
Log:
QPID-5127 : ClassCastException on message conversion to 1-0
Modified:
qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/codec/AMQPDescribedTypeRegistry.java
qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_to_1_0.java
Modified: qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/codec/AMQPDescribedTypeRegistry.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/codec/AMQPDescribedTypeRegistry.java?rev=1526887&r1=1526886&r2=1526887&view=diff
==============================================================================
--- qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/codec/AMQPDescribedTypeRegistry.java (original)
+++ qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/codec/AMQPDescribedTypeRegistry.java Fri Sep 27 12:59:37 2013
@@ -49,6 +49,7 @@ import org.apache.qpid.amqp_1_0.codec.Un
import org.apache.qpid.amqp_1_0.codec.ValueWriter;
+import org.apache.qpid.amqp_1_0.type.Binary;
import org.apache.qpid.amqp_1_0.type.RestrictedType;
import org.apache.qpid.amqp_1_0.type.transport.*;
import org.apache.qpid.amqp_1_0.type.transport.codec.*;
Modified: qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_to_1_0.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_to_1_0.java?rev=1526887&r1=1526886&r2=1526887&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_to_1_0.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_to_1_0.java Fri Sep 27 12:59:37 2013
@@ -23,8 +23,12 @@ package org.apache.qpid.server.protocol.
import java.io.EOFException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+
import org.apache.qpid.amqp_1_0.messaging.SectionEncoder;
import org.apache.qpid.amqp_1_0.messaging.SectionEncoderImpl;
import org.apache.qpid.amqp_1_0.type.Binary;
@@ -92,6 +96,7 @@ public abstract class MessageConverter_t
{
String propName = reader.readStringImpl();
Object value = reader.readObject();
+
map.put(propName, value);
}
catch (EOFException e)
@@ -105,21 +110,23 @@ public abstract class MessageConverter_t
}
- return new AmqpValue(map);
+ return new AmqpValue(fixMapValues(map));
}
else if("amqp/map".equals(mimeType))
{
BBDecoder decoder = new BBDecoder();
decoder.init(ByteBuffer.wrap(data));
- return new AmqpValue(decoder.readMap());
+ final Map<String,Object> map = decoder.readMap();
+
+ return new AmqpValue(fixMapValues(map));
}
else if("amqp/list".equals(mimeType))
{
BBDecoder decoder = new BBDecoder();
decoder.init(ByteBuffer.wrap(data));
- return new AmqpValue(decoder.readList());
+ return new AmqpValue(fixListValues(decoder.readList()));
}
else if("jms/stream-message".equals(mimeType))
{
@@ -130,7 +137,7 @@ public abstract class MessageConverter_t
{
try
{
- list.add(reader.readObject());
+ list.add(fixValue(reader.readObject()));
}
catch (TypedBytesFormatException e)
{
@@ -150,6 +157,47 @@ public abstract class MessageConverter_t
}
}
+ private static Map fixMapValues(final Map<String, Object> map)
+ {
+ for(Map.Entry<String,Object> entry : map.entrySet())
+ {
+ entry.setValue(fixValue(entry.getValue()));
+ }
+ return map;
+ }
+
+ private static Object fixValue(final Object value)
+ {
+ if(value instanceof byte[])
+ {
+ return new Binary((byte[])value);
+ }
+ else if(value instanceof Map)
+ {
+ return fixMapValues((Map)value);
+ }
+ else if(value instanceof List)
+ {
+ return fixListValues((List)value);
+ }
+ else
+ {
+ return value;
+ }
+ }
+
+ private static List fixListValues(final List list)
+ {
+ ListIterator iterator = list.listIterator();
+ while(iterator.hasNext())
+ {
+ Object value = iterator.next();
+ iterator.set(fixValue(value));
+
+ }
+ return list;
+ }
+
private StoredMessage<MessageMetaData_1_0> convertServerMessage(final MessageMetaData_1_0 metaData,
final ServerMessage serverMessage,
SectionEncoder sectionEncoder)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org