diff options
| author | Martin Ritchie <ritchiem@apache.org> | 2006-12-12 17:51:51 +0000 |
|---|---|---|
| committer | Martin Ritchie <ritchiem@apache.org> | 2006-12-12 17:51:51 +0000 |
| commit | 853cf049a66ed4fa727bd2c7c46e0beabeb33a33 (patch) | |
| tree | 37fdacf14af9a3073cdc8f99b777327b826b8833 /java/client/src/main | |
| parent | b10ee442673d6d9c8abb46bd7a0606364930130d (diff) | |
| download | qpid-python-853cf049a66ed4fa727bd2c7c46e0beabeb33a33.tar.gz | |
QPID-164
JMSMapMessage.java - fixed incorrect exceptions and return values. Data now sent as a Bytes message.
MapMessageTest.java - updated to be more through with the testing of the returned message
EncodingUtils.java - added unsignedIntegerLength()
FieldTableFactory.java - removed specific PropertyFieldTable reference
PropertyFieldTable.java - fixed encoding issues that were causing BufferOverflow errors.
PropertyFieldTableTest.java - added test to ensure that the encoding size is correct for ALL types.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@486254 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/client/src/main')
| -rw-r--r-- | java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java | 177 | ||||
| -rw-r--r-- | java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessageFactory.java | 2 |
2 files changed, 128 insertions, 51 deletions
diff --git a/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java b/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java index 5282dce4c9..85d434e4eb 100644 --- a/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java +++ b/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java @@ -21,16 +21,21 @@ package org.apache.qpid.client.message; import org.apache.mina.common.ByteBuffer; -import org.apache.qpid.framing.BasicContentHeaderProperties; import org.apache.qpid.framing.PropertyFieldTable; import org.apache.qpid.framing.FieldTableFactory; +import org.apache.qpid.framing.ContentHeaderBody; +import org.apache.qpid.framing.EncodingUtils; import org.apache.qpid.AMQException; +import org.apache.log4j.Logger; import javax.jms.JMSException; +import javax.jms.MessageFormatException; import java.util.Enumeration; -public class JMSMapMessage extends JMSTextMessage implements javax.jms.MapMessage +public class JMSMapMessage extends JMSBytesMessage implements javax.jms.MapMessage { + private static final Logger _logger = Logger.getLogger(JMSMapMessage.class); + public static final String MIME_TYPE = "jms/map-message"; @@ -38,48 +43,38 @@ public class JMSMapMessage extends JMSTextMessage implements javax.jms.MapMessag JMSMapMessage() throws JMSException { - this(null, null); + this(null); } - JMSMapMessage(ByteBuffer data, String encoding) throws JMSException + JMSMapMessage(ByteBuffer data) throws JMSException { super(data); // this instantiates a content header - getJmsContentHeaderProperties().setContentType(MIME_TYPE); - getJmsContentHeaderProperties().setEncoding(encoding); _map = new PropertyFieldTable(); } - JMSMapMessage(long deliveryTag, BasicContentHeaderProperties contentHeader, ByteBuffer data) + JMSMapMessage(long messageNbr, ContentHeaderBody contentHeader, ByteBuffer data) throws AMQException { - super(deliveryTag, contentHeader, data); - contentHeader.setContentType(MIME_TYPE); + super(messageNbr, contentHeader, data); - try - { - _map = FieldTableFactory.newFieldTable(getText()); - } - catch (JMSException e) + if (data != null) { - throw new AMQException(e.getMessage(), e); - } - } - // AbstractJMSMessage Interface + long tableSize = EncodingUtils.readInteger(_data); + _map = (PropertyFieldTable) FieldTableFactory.newFieldTable(_data, tableSize); - public void clearBodyImpl() throws JMSException - { - if (_data != null) + } + else { - _data.release(); + _map = (PropertyFieldTable) FieldTableFactory.newFieldTable(); } - _data = null; } + public String toBodyString() throws JMSException { - return _map.toString(); + return "MapSize:" + _map.getEncodedSize() + "\nMapData:\n" + _map.toString(); } public String getMimeType() @@ -95,7 +90,23 @@ public class JMSMapMessage extends JMSTextMessage implements javax.jms.MapMessag if (b == null) { - b = Boolean.valueOf(_map.getString(string)); + if (_map.containsKey(string)) + { + Object str = _map.getObject(string); + + if (str == null || !(str instanceof String)) + { + throw new MessageFormatException("getBoolean can't use " + string + " item."); + } + else + { + return Boolean.valueOf((String) str); + } + } + else + { + b = Boolean.valueOf(null); + } } return b; @@ -106,26 +117,55 @@ public class JMSMapMessage extends JMSTextMessage implements javax.jms.MapMessag Byte b = _map.getByte(string); if (b == null) { - b = Byte.valueOf(_map.getString(string)); + if (_map.containsKey(string)) + { + Object str = _map.getObject(string); + + if (str == null || !(str instanceof String)) + { + throw new MessageFormatException("getByte can't use " + string + " item."); + } + else + { + return Byte.valueOf((String) str); + } + } + else + { + b = Byte.valueOf(null); + } } + return b; } public short getShort(String string) throws JMSException { - Short s = _map.getShort(string); - - if (s == null) { - s = Short.valueOf(getByte(string)); - } + Short s = _map.getShort(string); - return s; + if (s == null) + { + s = Short.valueOf(getByte(string)); + } + + return s; + } } public char getChar(String string) throws JMSException { - return _map.getCharacter(string); + + Character result = _map.getCharacter(string); + + if (result == null) + { + throw new MessageFormatException("getChar couldn't find " + string + " item."); + } + else + { + return result; + } } public int getInt(String string) throws JMSException @@ -142,6 +182,7 @@ public class JMSMapMessage extends JMSTextMessage implements javax.jms.MapMessag public long getLong(String string) throws JMSException { + Long l = _map.getLong(string); if (l == null) @@ -150,18 +191,38 @@ public class JMSMapMessage extends JMSTextMessage implements javax.jms.MapMessag } return l; + } public float getFloat(String string) throws JMSException { + Float f = _map.getFloat(string); if (f == null) { - f = Float.valueOf(_map.getString(string)); + if (_map.containsKey(string)) + { + Object str = _map.getObject(string); + + if (str == null || !(str instanceof String)) + { + throw new MessageFormatException("getFloat can't use " + string + " item."); + } + else + { + return Float.valueOf((String) str); + } + } + else + { + f = Float.valueOf(null); + } + } return f; + } public double getDouble(String string) throws JMSException @@ -182,8 +243,25 @@ public class JMSMapMessage extends JMSTextMessage implements javax.jms.MapMessag if (s == null) { - Object o = _map.getObject(string); - s = o.toString(); + if (_map.containsKey(string)) + { + Object o = _map.getObject(string); + if (o instanceof byte[]) + { + throw new MessageFormatException("getObject couldn't find " + string + " item."); + } + else + { + if (o == null) + { + return null; + } + else + { + s = String.valueOf(o); + } + } + } } return s; @@ -191,7 +269,16 @@ public class JMSMapMessage extends JMSTextMessage implements javax.jms.MapMessag public byte[] getBytes(String string) throws JMSException { - return _map.getBytes(string); + + byte[] result = _map.getBytes(string); + + if (result == null) + { + throw new MessageFormatException("getBytes couldn't find " + string + " item."); + } + + return result; + } public Object getObject(String string) throws JMSException @@ -282,19 +369,9 @@ public class JMSMapMessage extends JMSTextMessage implements javax.jms.MapMessag public ByteBuffer getData() { - - try - { - setText(toString()); - return super.getData(); - } - catch (JMSException e) - { - // should never occur according to setText - //fixme -- what to do if it does occur. - } - - return ByteBuffer.allocate(0); + //What if _data is null? + _map.writeToBuffer(_data); + return super.getData(); } } diff --git a/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessageFactory.java b/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessageFactory.java index 8d17f2bbf0..38b8b67ff9 100644 --- a/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessageFactory.java +++ b/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessageFactory.java @@ -36,6 +36,6 @@ public class JMSMapMessageFactory extends AbstractJMSMessageFactory protected AbstractJMSMessage createMessage(long deliveryTag, ByteBuffer data, ContentHeaderBody contentHeader) throws AMQException { - return new JMSMapMessage(deliveryTag, (BasicContentHeaderProperties) contentHeader.properties, data); + return new JMSMapMessage(deliveryTag, contentHeader, data); } } |
