summaryrefslogtreecommitdiff
path: root/java/client/src/main
diff options
context:
space:
mode:
authorMartin Ritchie <ritchiem@apache.org>2006-12-12 17:51:51 +0000
committerMartin Ritchie <ritchiem@apache.org>2006-12-12 17:51:51 +0000
commit853cf049a66ed4fa727bd2c7c46e0beabeb33a33 (patch)
tree37fdacf14af9a3073cdc8f99b777327b826b8833 /java/client/src/main
parentb10ee442673d6d9c8abb46bd7a0606364930130d (diff)
downloadqpid-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.java177
-rw-r--r--java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessageFactory.java2
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);
}
}