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 2006/12/21 18:41:01 UTC

svn commit: r489417 [1/2] - in /incubator/qpid/branches/new_persistence/java: broker/ broker/src/main/java/ client/example/ client/src/main/java/org/apache/qpid/client/ client/src/main/java/org/apache/qpid/client/message/ client/src/test/java/org/apach...

Author: rgreig
Date: Thu Dec 21 09:41:00 2006
New Revision: 489417

URL: http://svn.apache.org/viewvc?view=rev&rev=489417
Log:
Merge from trunk up to revision 486610

Added:
    incubator/qpid/branches/new_persistence/java/broker/src/main/java/log4j.properties   (with props)
    incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/close/
      - copied from r486610, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/close/
    incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/close/TopicPublisherCloseTest.java
      - copied unchanged from r486610, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/close/TopicPublisherCloseTest.java
    incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/message/
      - copied from r486610, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/
    incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/message/StreamMessageTest.java
      - copied unchanged from r486610, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/StreamMessageTest.java
    incubator/qpid/branches/new_persistence/java/common/src/test/java/org/apache/qpid/pool/
      - copied from r486610, incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/pool/
    incubator/qpid/branches/new_persistence/java/common/src/test/java/org/apache/qpid/pool/PoolingFilterTest.java
      - copied unchanged from r486610, incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/pool/PoolingFilterTest.java
    incubator/qpid/branches/new_persistence/java/common/src/test/java/org/apache/qpid/session/
      - copied from r486610, incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/session/
    incubator/qpid/branches/new_persistence/java/common/src/test/java/org/apache/qpid/session/TestSession.java
      - copied unchanged from r486610, incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/session/TestSession.java
Modified:
    incubator/qpid/branches/new_persistence/java/broker/pom.xml
    incubator/qpid/branches/new_persistence/java/client/example/   (props changed)
    incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
    incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/AbstractBytesMessage.java
    incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessage.java
    incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java
    incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessageFactory.java
    incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/JMSObjectMessage.java
    incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/basic/MapMessageTest.java
    incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/basic/ObjectMessageTest.java
    incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/client/message/MapMessageTest.java
    incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/framing/EncodingUtils.java
    incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/framing/FieldTableFactory.java
    incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/framing/PropertyFieldTable.java
    incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/pool/PoolingFilter.java
    incubator/qpid/branches/new_persistence/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java

Modified: incubator/qpid/branches/new_persistence/java/broker/pom.xml
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/broker/pom.xml?view=diff&rev=489417&r1=489416&r2=489417
==============================================================================
--- incubator/qpid/branches/new_persistence/java/broker/pom.xml (original)
+++ incubator/qpid/branches/new_persistence/java/broker/pom.xml Thu Dec 21 09:41:00 2006
@@ -34,6 +34,7 @@
 
     <properties>
         <topDirectoryLocation>..</topDirectoryLocation>
+        <amqj.logging.level>warn</amqj.logging.level>
     </properties>
 
     <dependencies>
@@ -92,7 +93,7 @@
                         </property>
                         <property>
                             <name>amqj.logging.level</name>
-                            <value>WARN</value>
+                            <value>${amqj.logging.level}</value>
                         </property>
                         <property>
                             <name>log4j.configuration</name>

Added: incubator/qpid/branches/new_persistence/java/broker/src/main/java/log4j.properties
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/broker/src/main/java/log4j.properties?view=auto&rev=489417
==============================================================================
--- incubator/qpid/branches/new_persistence/java/broker/src/main/java/log4j.properties (added)
+++ incubator/qpid/branches/new_persistence/java/broker/src/main/java/log4j.properties Thu Dec 21 09:41:00 2006
@@ -0,0 +1,24 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+log4j.rootCategory=${amqj.logging.level}, console
+
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.Threshold=info
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%t %d %p [%c{4}] %m%n

Propchange: incubator/qpid/branches/new_persistence/java/broker/src/main/java/log4j.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/branches/new_persistence/java/client/example/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Dec 21 09:41:00 2006
@@ -0,0 +1 @@
+target

Modified: incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/AMQSession.java?view=diff&rev=489417&r1=489416&r2=489417
==============================================================================
--- incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/AMQSession.java (original)
+++ incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/AMQSession.java Thu Dec 21 09:41:00 2006
@@ -7,9 +7,9 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -728,10 +728,12 @@
             public Object operation() throws JMSException
             {
                 checkNotClosed();
-
-                return new BasicMessageProducer(_connection, (AMQDestination) destination, _transacted, _channelId,
-                                                AMQSession.this, _connection.getProtocolHandler(),
-                                                getNextProducerId(), immediate, mandatory, waitUntilSent);
+                long producerId = getNextProducerId();
+                BasicMessageProducer producer = new BasicMessageProducer(_connection, (AMQDestination) destination, _transacted, _channelId,
+                                                                         AMQSession.this, _connection.getProtocolHandler(),
+                                                                         producerId, immediate, mandatory, waitUntilSent);
+                registerProducer(producerId, producer);
+                return producer;
             }
         }.execute(_connection);
     }
@@ -745,7 +747,7 @@
      */
     public QueueReceiver createQueueReceiver(Destination destination) throws JMSException
     {
-    	checkValidDestination(destination);    	
+    	checkValidDestination(destination);
         AMQQueue dest = (AMQQueue) destination;
         BasicMessageConsumer consumer = (BasicMessageConsumer) createConsumer(destination);
         return new QueueReceiverAdaptor(dest, consumer);
@@ -1024,7 +1026,7 @@
     public Topic createTopic(String topicName) throws JMSException
     {
     	checkNotClosed();
-    	
+
         if (topicName.indexOf('/') == -1)
         {
             return new AMQTopic(topicName);
@@ -1142,7 +1144,7 @@
     public void unsubscribe(String name) throws JMSException
     {
     	checkNotClosed();
-    	    	
+
         //send a queue.delete for the subscription
         String queue = _connection.getClientID() + ":" + name;
         AMQFrame frame = QueueDeleteBody.createAMQFrame(_channelId, 0, queue, false, false, true);
@@ -1344,7 +1346,7 @@
         AMQFrame channelFlowFrame = ChannelFlowBody.createAMQFrame(_channelId, true);
         _connection.getProtocolHandler().writeFrame(channelFlowFrame);
     }
-    
+
     /*
      * I could have combined the last 3 methods, but this way it improves readability
      */
@@ -1353,13 +1355,13 @@
     		throw new javax.jms.InvalidDestinationException("Invalid Topic");
     	}
     }
-    
+
     private void checkValidQueue(Queue queue) throws InvalidDestinationException{
     	if (queue == null){
     		throw new javax.jms.InvalidDestinationException("Invalid Queue");
     	}
     }
-    
+
     private void checkValidDestination(Destination destination) throws InvalidDestinationException{
     	if (destination == null){
     		throw new javax.jms.InvalidDestinationException("Invalid Queue");

Modified: incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/AbstractBytesMessage.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/AbstractBytesMessage.java?view=diff&rev=489417&r1=489416&r2=489417
==============================================================================
--- incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/AbstractBytesMessage.java (original)
+++ incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/AbstractBytesMessage.java Thu Dec 21 09:41:00 2006
@@ -59,11 +59,16 @@
 
         if (_data == null)
         {
-            _data = ByteBuffer.allocate(DEFAULT_BUFFER_INITIAL_SIZE);
-            _data.setAutoExpand(true);
+            allocateInitialBuffer();
         }
     }
 
+    private void allocateInitialBuffer()
+    {
+        _data = ByteBuffer.allocate(DEFAULT_BUFFER_INITIAL_SIZE);
+        _data.setAutoExpand(true);
+    }
+
     AbstractBytesMessage(long messageNbr, ContentHeaderBody contentHeader, ByteBuffer data)
             throws AMQException
     {
@@ -74,7 +79,7 @@
 
     public void clearBodyImpl() throws JMSException
     {
-        _data.clear();
+        allocateInitialBuffer();
     }
 
     public String toBodyString() throws JMSException

Modified: incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessage.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessage.java?view=diff&rev=489417&r1=489416&r2=489417
==============================================================================
--- incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessage.java (original)
+++ incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessage.java Thu Dec 21 09:41:00 2006
@@ -505,7 +505,14 @@
         // position beyond the start
         if (_data != null)
         {
-            _data.rewind();
+            if (!_readableMessage)
+            {
+                _data.flip();
+            }
+            else
+            {
+                _data.rewind();
+            }
         }
         return _data;
     }

Modified: incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java?view=diff&rev=489417&r1=489416&r2=489417
==============================================================================
--- incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java (original)
+++ incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java Thu Dec 21 09:41:00 2006
@@ -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 @@
 
     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 @@
 
         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 @@
         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 long getLong(String string) throws JMSException
     {
+
         Long l = _map.getLong(string);
 
         if (l == null)
@@ -150,18 +191,38 @@
         }
 
         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 @@
 
         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 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 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();
     }
 
 }

Modified: incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessageFactory.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessageFactory.java?view=diff&rev=489417&r1=489416&r2=489417
==============================================================================
--- incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessageFactory.java (original)
+++ incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessageFactory.java Thu Dec 21 09:41:00 2006
@@ -36,6 +36,6 @@
 
     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);
     }
 }

Modified: incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/JMSObjectMessage.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/JMSObjectMessage.java?view=diff&rev=489417&r1=489416&r2=489417
==============================================================================
--- incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/JMSObjectMessage.java (original)
+++ incubator/qpid/branches/new_persistence/java/client/src/main/java/org/apache/qpid/client/message/JMSObjectMessage.java Thu Dec 21 09:41:00 2006
@@ -7,9 +7,9 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -20,18 +20,17 @@
  */
 package org.apache.qpid.client.message;
 
-import org.apache.qpid.framing.ContentHeaderBody;
-import org.apache.qpid.framing.BasicContentHeaderProperties;
-import org.apache.qpid.AMQException;
 import org.apache.mina.common.ByteBuffer;
+import org.apache.qpid.AMQException;
+import org.apache.qpid.framing.BasicContentHeaderProperties;
+import org.apache.qpid.framing.ContentHeaderBody;
 
-import javax.jms.ObjectMessage;
 import javax.jms.JMSException;
 import javax.jms.MessageFormatException;
-import javax.jms.MessageNotWriteableException;
+import javax.jms.ObjectMessage;
 import java.io.*;
-import java.nio.charset.Charset;
 import java.nio.charset.CharacterCodingException;
+import java.nio.charset.Charset;
 
 public class JMSObjectMessage extends AbstractJMSMessage implements ObjectMessage
 {
@@ -94,13 +93,16 @@
             _data = ByteBuffer.allocate(DEFAULT_BUFFER_SIZE);
             _data.setAutoExpand(true);
         }
+        else
+        {
+            _data.rewind();
+        }
         try
         {
             ObjectOutputStream out = new ObjectOutputStream(_data.asOutputStream());
             out.writeObject(serializable);
             out.flush();
             out.close();
-            _data.rewind();
         }
         catch (IOException e)
         {

Modified: incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/basic/MapMessageTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/basic/MapMessageTest.java?view=diff&rev=489417&r1=489416&r2=489417
==============================================================================
--- incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/basic/MapMessageTest.java (original)
+++ incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/basic/MapMessageTest.java Thu Dec 21 09:41:00 2006
@@ -21,14 +21,11 @@
 package org.apache.qpid.test.unit.basic;
 
 import org.apache.qpid.client.AMQConnection;
-import org.apache.qpid.client.AMQDestination;
 import org.apache.qpid.client.AMQQueue;
 import org.apache.qpid.client.AMQSession;
-import org.apache.qpid.client.vmbroker.AMQVMBrokerCreationException;
-import org.apache.qpid.client.transport.TransportConnection;
-import org.apache.qpid.client.message.JMSTextMessage;
 import org.apache.qpid.client.message.JMSMapMessage;
 import org.apache.qpid.testutil.VMBrokerSetup;
+import org.apache.log4j.Logger;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -40,20 +37,26 @@
 
 public class MapMessageTest extends TestCase implements MessageListener
 {
+
+    private static final Logger _logger = Logger.getLogger(MapMessageTest.class);
+
     private AMQConnection _connection;
     private Destination _destination;
     private AMQSession _session;
     private final List<JMSMapMessage> received = new ArrayList<JMSMapMessage>();
-    private final List<String> messages = new ArrayList<String>();
+
+    private static final String MESSAGE = "Message ";
     private int _count = 100;
     public String _connectionString = "vm://:1";
     private byte[] _bytes = {99, 98, 97, 96, 95};
+    private static final float _smallfloat = 100.0f;
 
     protected void setUp() throws Exception
     {
         super.setUp();
         try
         {
+            //TransportConnection.createVMBroker(1);
             init(new AMQConnection(_connectionString, "guest", "guest", randomize("Client"), "/test_path"));
         }
         catch (Exception e)
@@ -64,7 +67,9 @@
 
     protected void tearDown() throws Exception
     {
+        _logger.info("Tearing Down unit.basic.MapMessageTest");
         super.tearDown();
+        //TransportConnection.killAllVMBrokers();
     }
 
     private void init(AMQConnection connection) throws Exception
@@ -90,7 +95,6 @@
         send(count);
         waitFor(count);
         check();
-        System.out.println("Completed without failure");
         _connection.close();
     }
 
@@ -100,40 +104,47 @@
         MessageProducer producer = _session.createProducer(_destination);
         for (int i = 0; i < count; i++)
         {
-            String text = "Message " + i;
-            messages.add(text);
             MapMessage message = _session.createMapMessage();
 
-            message.setBoolean("odd", i / 2 == 0);
-            message.setByte("byte", (byte) Byte.MAX_VALUE);
-
-            message.setBytes("bytes", _bytes);
-            message.setChar("char", (char) 'c');
-            message.setDouble("double", (double) Double.MAX_VALUE);
-            message.setFloat("float", (float) Float.MAX_VALUE);
-
-            message.setInt("messageNumber", i);
-            message.setInt("int", (int) Integer.MAX_VALUE);
-
-            message.setLong("long", (long) Long.MAX_VALUE);
-            message.setShort("short", (short) Short.MAX_VALUE);
-            message.setString("message", text);
-
-
-            message.setObject("object-bool", true);
-            message.setObject("object-byte", Byte.MAX_VALUE);
-            message.setObject("object-bytes", _bytes);
-            message.setObject("object-char", 'c');
-            message.setObject("object-double", Double.MAX_VALUE);
-            message.setObject("object-float", Float.MAX_VALUE);
-            message.setObject("object-int", Integer.MAX_VALUE);
-            message.setObject("object-long", Long.MAX_VALUE);
-            message.setObject("object-short", Short.MAX_VALUE);
+            setMapValues(message, i);
 
             producer.send(message);
         }
     }
 
+    private void setMapValues(MapMessage message, int i) throws JMSException
+    {
+        message.setBoolean("odd", i / 2 == 0);
+        message.setByte("byte", (byte) Byte.MAX_VALUE);
+        message.setBytes("bytes", _bytes);
+        message.setChar("char", (char) 'c');
+        message.setDouble("double", (double) Double.MAX_VALUE);
+        message.setFloat("float", (float) Float.MAX_VALUE);
+        message.setFloat("smallfloat", 100);
+        message.setInt("messageNumber", i);
+        message.setInt("int", (int) Integer.MAX_VALUE);
+        message.setLong("long", (long) Long.MAX_VALUE);
+        message.setShort("short", (short) Short.MAX_VALUE);
+        message.setString("message", MESSAGE + i);
+
+        //Test Setting Object Values
+        message.setObject("object-bool", true);
+        message.setObject("object-byte", Byte.MAX_VALUE);
+        message.setObject("object-bytes", _bytes);
+        message.setObject("object-char", 'c');
+        message.setObject("object-double", Double.MAX_VALUE);
+        message.setObject("object-float", Float.MAX_VALUE);
+        message.setObject("object-int", Integer.MAX_VALUE);
+        message.setObject("object-long", Long.MAX_VALUE);
+        message.setObject("object-short", Short.MAX_VALUE);
+
+        //Set a null String value
+        message.setString("nullString", null);
+        // Highlight protocol problem
+        message.setString("emptyString", "");
+
+    }
+
     void waitFor(int count) throws InterruptedException
     {
         synchronized(received)
@@ -152,80 +163,1014 @@
         for (JMSMapMessage m : received)
         {
             actual.add(m.getString("message"));
-            assertEqual(m.getInt("messageNumber"), count);
 
+            testMapValues(m, count);
 
-            assertEqual(count / 2 == 0, m.getBoolean("odd"));
-            assertEqual((byte) Byte.MAX_VALUE, m.getByte("byte"));
+            testMessageWriteStatus(m);
 
-            assertBytesEqual(_bytes, m.getBytes("bytes"));
-            assertEqual((char) 'c', m.getChar("char"));
-            assertEqual((double) Double.MAX_VALUE, m.getDouble("double"));
-            assertEqual((float) Float.MAX_VALUE, m.getFloat("float"));
-
-            assertEqual(count, m.getInt("messageNumber"));
-            assertEqual((int) Integer.MAX_VALUE, m.getInt("int"));
-            assertEqual((long) Long.MAX_VALUE, m.getLong("long"));
-            assertEqual((short) Short.MAX_VALUE, m.getShort("short"));
-
-            assertEqual(true, m.getObject("object-bool"));
-            assertEqual(Byte.MAX_VALUE, m.getObject("object-byte"));
-            assertBytesEqual(_bytes, (byte[]) m.getObject("object-bytes"));
-            assertEqual('c', m.getObject("object-char"));
-            assertEqual(Double.MAX_VALUE, m.getObject("object-double"));
-            assertEqual(Float.MAX_VALUE, m.getObject("object-float"));
-            assertEqual(Integer.MAX_VALUE, m.getObject("object-int"));
-            assertEqual(Long.MAX_VALUE, m.getObject("object-long"));
-            assertEqual(Short.MAX_VALUE, m.getObject("object-short"));
+            testPropertyWriteStatus(m);
 
+            testCorrectExceptions(m);
 
-            try
-            {
-                m.setInt("testint", 3);
-                fail("Message should not be writeable");
-            }
-            catch (MessageNotWriteableException mnwe)
-            {
-                //normal execution
-            }
+            count++;
+        }
+    }
 
-            m.clearBody();
+    private void testCorrectExceptions(JMSMapMessage m) throws JMSException
+    {
+        testBoolean(m);
 
-            try
-            {
-                m.setInt("testint", 3);
-            }
-            catch (MessageNotWriteableException mnwe)
-            {
-                Assert.fail("Message should be writeable");
-            }
+        testByte(m);
 
-            //Check property write status
-            try
-            {
-                m.setStringProperty("test", "test");
-                Assert.fail("Message should not be writeable");
-            }
-            catch (MessageNotWriteableException mnwe)
-            {
-                //normal execution
-            }
+        testBytes(m);
 
-            m.clearProperties();
+        testChar(m);
 
-            try
-            {
-                m.setStringProperty("test", "test");
-            }
-            catch (MessageNotWriteableException mnwe)
-            {
-                Assert.fail("Message should be writeable");
-            }
+        testDouble(m);
 
-            count++;
+        testFloat(m);
+
+        testInt(m);
+
+        testLong(m);
+
+        testShort(m);
+
+        testString(m);
+    }
+
+    private void testString(JMSMapMessage m) throws JMSException
+    {
+
+        Assert.assertFalse(m.getBoolean("message"));
+
+        try
+        {
+            m.getByte("message");
+            fail("Exception Expected.");
+        }
+        catch (NumberFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getShort("message");
+            fail("Exception Expected.");
+        }
+        catch (NumberFormatException nfe)
+        {
+            //normal execution
+        }
+
+        //Try bad reads
+        try
+        {
+            m.getChar("message");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getInt("message");
+            fail("Exception Expected.");
+        }
+        catch (NumberFormatException nfe)
+        {
+            //normal execution
+        }
+        try
+        {
+            m.getLong("message");
+            fail("Exception Expected.");
+        }
+        catch (NumberFormatException nfe)
+        {
+            //normal execution
+        }
+
+        //Try bad reads
+        try
+        {
+            m.getFloat("message");
+            fail("Exception Expected.");
+        }
+        catch (NumberFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getDouble("message");
+            fail("Exception Expected.");
+        }
+        catch (NumberFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getBytes("message");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        Assert.assertEquals(MESSAGE + m.getInt("messageNumber"), m.getString("message"));
+    }
+
+    private void testShort(JMSMapMessage m) throws JMSException
+    {
+
+        //Try bad reads
+        try
+        {
+            m.getBoolean("short");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getByte("short");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        Assert.assertEquals(Short.MAX_VALUE, m.getShort("short"));
+
+        //Try bad reads
+        try
+        {
+            m.getChar("short");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        Assert.assertEquals(Short.MAX_VALUE, m.getInt("short"));
+
+        Assert.assertEquals(Short.MAX_VALUE, m.getLong("short"));
+
+        //Try bad reads
+        try
+        {
+            m.getFloat("short");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getDouble("short");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getBytes("short");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        Assert.assertEquals("" + Short.MAX_VALUE, m.getString("short"));
+    }
+
+    private void testLong(JMSMapMessage m) throws JMSException
+    {
+
+        //Try bad reads
+        try
+        {
+            m.getBoolean("long");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getByte("long");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getShort("long");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        //Try bad reads
+        try
+        {
+            m.getChar("long");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getInt("long");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        Assert.assertEquals(Long.MAX_VALUE, m.getLong("long"));
+
+        //Try bad reads
+        try
+        {
+            m.getFloat("long");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getDouble("long");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getBytes("long");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        Assert.assertEquals("" + Long.MAX_VALUE, m.getString("long"));
+    }
+
+    private void testDouble(JMSMapMessage m) throws JMSException
+    {
+
+        //Try bad reads
+        try
+        {
+            m.getBoolean("double");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getByte("double");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getShort("double");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        //Try bad reads
+        try
+        {
+            m.getChar("double");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getInt("double");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        try
+        {
+            m.getLong("double");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        //Try bad reads
+        try
+        {
+            m.getFloat("double");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+
+        Assert.assertEquals(Double.MAX_VALUE, m.getDouble("double"));
+
+        //Try bad reads
+        try
+        {
+            m.getBytes("double");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        Assert.assertEquals("" + Double.MAX_VALUE, m.getString("double"));
+    }
+
+
+    private void testFloat(JMSMapMessage m) throws JMSException
+    {
+
+        //Try bad reads
+        try
+        {
+            m.getBoolean("float");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getByte("float");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getShort("float");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
         }
 
-        assertEqual(messages.iterator(), actual.iterator());
+        //Try bad reads
+        try
+        {
+            m.getChar("float");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getInt("float");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        try
+        {
+            m.getLong("float");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+
+        Assert.assertEquals(Float.MAX_VALUE, m.getFloat("float"));
+
+        Assert.assertEquals(_smallfloat, (float) m.getDouble("smallfloat"));
+
+        //Try bad reads
+        try
+        {
+            m.getBytes("float");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        Assert.assertEquals("" + Float.MAX_VALUE, m.getString("float"));
+    }
+
+
+    private void testInt(JMSMapMessage m) throws JMSException
+    {
+
+        //Try bad reads
+        try
+        {
+            m.getBoolean("int");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getByte("int");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getShort("int");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        //Try bad reads
+        try
+        {
+            m.getChar("int");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        Assert.assertEquals(Integer.MAX_VALUE, m.getInt("int"));
+
+        Assert.assertEquals(Integer.MAX_VALUE, (int) m.getLong("int"));
+
+        //Try bad reads
+        try
+        {
+            m.getFloat("int");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getDouble("int");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getBytes("int");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        Assert.assertEquals("" + Integer.MAX_VALUE, m.getString("int"));
+    }
+
+
+    private void testChar(JMSMapMessage m) throws JMSException
+    {
+
+        //Try bad reads
+        try
+        {
+            m.getBoolean("char");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getByte("char");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getShort("char");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        Assert.assertEquals('c', m.getChar("char"));
+
+        try
+        {
+            m.getInt("char");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        try
+        {
+            m.getLong("char");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        //Try bad reads
+        try
+        {
+            m.getFloat("char");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getDouble("char");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getBytes("char");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        Assert.assertEquals("" + 'c', m.getString("char"));
+    }
+
+    private void testBytes(JMSMapMessage m) throws JMSException
+    {
+        //Try bad reads
+        try
+        {
+            m.getBoolean("bytes");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getByte("bytes");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getShort("bytes");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        //Try bad reads
+        try
+        {
+            m.getChar("bytes");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getInt("bytes");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        try
+        {
+            m.getLong("bytes");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        //Try bad reads
+        try
+        {
+            m.getFloat("bytes");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getDouble("bytes");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+
+        assertBytesEqual(_bytes, m.getBytes("bytes"));
+
+        try
+        {
+            m.getString("bytes");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+
+    }
+
+    private void testByte(JMSMapMessage m) throws JMSException
+    {
+        //Try bad reads
+        try
+        {
+            m.getBoolean("byte");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        Assert.assertEquals(Byte.MAX_VALUE, m.getByte("byte"));
+
+        Assert.assertEquals((short) Byte.MAX_VALUE, m.getShort("byte"));
+
+        //Try bad reads
+        try
+        {
+            m.getChar("byte");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        //Reading a byte as an int is ok
+        Assert.assertEquals((short) Byte.MAX_VALUE, m.getInt("byte"));
+
+        Assert.assertEquals((short) Byte.MAX_VALUE, m.getLong("byte"));
+
+        //Try bad reads
+        try
+        {
+            m.getFloat("byte");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getDouble("byte");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getBytes("byte");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        Assert.assertEquals("" + Byte.MAX_VALUE, m.getString("byte"));
+
+    }
+
+    private void testBoolean(JMSMapMessage m) throws JMSException
+    {
+
+        Assert.assertEquals((m.getInt("messageNumber") / 2) == 0, m.getBoolean("odd"));
+
+        //Try bad reads
+        try
+        {
+            m.getByte("odd");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        //Try bad reads
+        try
+        {
+            m.getShort("odd");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getChar("odd");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getInt("odd");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getLong("odd");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getFloat("odd");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getDouble("odd");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+        //Try bad reads
+        try
+        {
+            m.getBytes("odd");
+            fail("Exception Expected.");
+        }
+        catch (MessageFormatException nfe)
+        {
+            //normal execution
+        }
+
+        Assert.assertEquals("" + ((m.getInt("messageNumber") / 2) == 0), m.getString("odd"));
+    }
+
+
+    private void testPropertyWriteStatus(JMSMapMessage m) throws JMSException
+    {
+        //Check property write status
+        try
+        {
+            m.setStringProperty("test", "test");
+            Assert.fail("Message should not be writeable");
+        }
+        catch (MessageNotWriteableException mnwe)
+        {
+            //normal execution
+        }
+
+        m.clearProperties();
+
+        try
+        {
+            m.setStringProperty("test", "test");
+        }
+        catch (MessageNotWriteableException mnwe)
+        {
+            Assert.fail("Message should be writeable");
+        }
+    }
+
+    private void testMessageWriteStatus(JMSMapMessage m) throws JMSException
+    {
+        try
+        {
+            m.setInt("testint", 3);
+            fail("Message should not be writeable");
+        }
+        catch (MessageNotWriteableException mnwe)
+        {
+            //normal execution
+        }
+
+        m.clearBody();
+
+        try
+        {
+            m.setInt("testint", 3);
+        }
+        catch (MessageNotWriteableException mnwe)
+        {
+            Assert.fail("Message should be writeable");
+        }
+    }
+
+    private void testMapValues(JMSMapMessage m, int count) throws JMSException
+    {
+        //Test get<Primiative>
+
+        //Boolean
+        assertEqual(count / 2 == 0, m.getBoolean("odd"));
+        assertEqual("" + (count / 2 == 0), m.getString("odd"));
+
+        //Byte
+        assertEqual(Byte.MAX_VALUE, m.getByte("byte"));
+        assertEqual("" + Byte.MAX_VALUE, m.getString("byte"));
+
+        //Bytes
+        assertBytesEqual(_bytes, m.getBytes("bytes"));
+
+        //Char
+        assertEqual('c', m.getChar("char"));
+
+        //Double
+        assertEqual(Double.MAX_VALUE, m.getDouble("double"));
+        assertEqual("" + Double.MAX_VALUE, m.getString("double"));
+
+        //Float
+        assertEqual(Float.MAX_VALUE, m.getFloat("float"));
+        assertEqual(_smallfloat, (float) m.getDouble("smallfloat"));
+        assertEqual("" + Float.MAX_VALUE, m.getString("float"));
+
+        //Integer
+        assertEqual(Integer.MAX_VALUE, m.getInt("int"));
+        assertEqual("" + Integer.MAX_VALUE, m.getString("int"));
+        assertEqual(count, m.getInt("messageNumber"));
+
+        //long
+        assertEqual(Long.MAX_VALUE, m.getLong("long"));
+        assertEqual("" + Long.MAX_VALUE, m.getString("long"));
+
+        //Short
+        assertEqual(Short.MAX_VALUE, m.getShort("short"));
+        assertEqual("" + Short.MAX_VALUE, m.getString("short"));
+        assertEqual((int) Short.MAX_VALUE, m.getInt("short"));
+
+        //String
+        assertEqual(MESSAGE + count, m.getString("message"));
+
+        //Test getObjects
+        assertEqual(true, m.getObject("object-bool"));
+        assertEqual(Byte.MAX_VALUE, m.getObject("object-byte"));
+        assertBytesEqual(_bytes, (byte[]) m.getObject("object-bytes"));
+        assertEqual('c', m.getObject("object-char"));
+        assertEqual(Double.MAX_VALUE, m.getObject("object-double"));
+        assertEqual(Float.MAX_VALUE, m.getObject("object-float"));
+        assertEqual(Integer.MAX_VALUE, m.getObject("object-int"));
+        assertEqual(Long.MAX_VALUE, m.getObject("object-long"));
+        assertEqual(Short.MAX_VALUE, m.getObject("object-short"));
+
+        //Check Special values
+        assertTrue(m.getString("nullString") == null);
+        assertEqual("", m.getString("emptyString"));
     }
 
     private void assertBytesEqual(byte[] expected, byte[] actual)
@@ -279,6 +1224,7 @@
     {
         synchronized(received)
         {
+            _logger.info("****************** Recevied Messgage:" + (JMSMapMessage) message);
             received.add((JMSMapMessage) message);
             received.notify();
         }

Modified: incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/basic/ObjectMessageTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/basic/ObjectMessageTest.java?view=diff&rev=489417&r1=489416&r2=489417
==============================================================================
--- incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/basic/ObjectMessageTest.java (original)
+++ incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/basic/ObjectMessageTest.java Thu Dec 21 09:41:00 2006
@@ -6,9 +6,9 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -19,28 +19,21 @@
  */
 package org.apache.qpid.test.unit.basic;
 
+import junit.framework.Assert;
+import junit.framework.TestCase;
 import org.apache.qpid.client.AMQConnection;
 import org.apache.qpid.client.AMQDestination;
 import org.apache.qpid.client.AMQQueue;
 import org.apache.qpid.client.AMQSession;
-import org.apache.qpid.client.vmbroker.AMQVMBrokerCreationException;
-import org.apache.qpid.client.transport.TransportConnection;
 import org.apache.qpid.client.message.JMSObjectMessage;
-import org.apache.qpid.testutil.VMBrokerSetup;
+import org.apache.qpid.client.transport.TransportConnection;
 
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageListener;
-import javax.jms.MessageProducer;
-import javax.jms.MessageNotWriteableException;
+import javax.jms.*;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
-import junit.framework.TestCase;
-import junit.framework.Assert;
-
 public class ObjectMessageTest extends TestCase implements MessageListener
 {
     private AMQConnection _connection;
@@ -54,6 +47,7 @@
     protected void setUp() throws Exception
     {
         super.setUp();
+        TransportConnection.createVMBroker(1);
         try
         {
             init(new AMQConnection(_connectionString, "guest", "guest", randomize("Client"), "/test_path"));
@@ -67,6 +61,7 @@
     protected void tearDown() throws Exception
     {
         super.tearDown();
+        TransportConnection.killAllVMBrokers();
     }
 
     private void init(AMQConnection connection) throws Exception
@@ -263,6 +258,6 @@
 
     public static junit.framework.Test suite()
     {
-        return new VMBrokerSetup(new junit.framework.TestSuite(ObjectMessageTest.class));
+        return new junit.framework.TestSuite(ObjectMessageTest.class);
     }
 }

Modified: incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/client/message/MapMessageTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/client/message/MapMessageTest.java?view=diff&rev=489417&r1=489416&r2=489417
==============================================================================
--- incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/client/message/MapMessageTest.java (original)
+++ incubator/qpid/branches/new_persistence/java/client/src/test/java/org/apache/qpid/test/unit/client/message/MapMessageTest.java Thu Dec 21 09:41:00 2006
@@ -25,6 +25,7 @@
 import org.apache.qpid.framing.PropertyFieldTable;
 import org.apache.qpid.client.message.JMSMapMessage;
 import org.apache.qpid.client.message.TestMessageHelper;
+import org.apache.log4j.Logger;
 
 import javax.jms.JMSException;
 import javax.jms.MessageFormatException;
@@ -203,7 +204,7 @@
         {
             JMSMapMessage mm = TestMessageHelper.newJMSMapMessage();
             mm.getByte("random");
-            Assert.fail("NumberFormatException should be received.");
+            Assert.fail("MessageFormatException expected");
         }
         catch (NumberFormatException e)
         {
@@ -221,7 +222,12 @@
         try
         {
             JMSMapMessage mm = TestMessageHelper.newJMSMapMessage();
-            Assert.assertEquals(null, mm.getBytes("random"));
+            mm.getBytes("random");
+            Assert.fail("MessageFormatException expected");
+        }
+        catch (MessageFormatException mfe)
+        {
+            //normal path
         }
         catch (JMSException e)
         {
@@ -235,9 +241,9 @@
         {
             JMSMapMessage mm = TestMessageHelper.newJMSMapMessage();
             mm.getChar("random");
-            Assert.fail("NullPointerException should be received.");
+            Assert.fail("MessageFormatException expected");
         }
-        catch (NullPointerException e)
+        catch (MessageFormatException e)
         {
             //normal execution
         }

Modified: incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/framing/EncodingUtils.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/framing/EncodingUtils.java?view=diff&rev=489417&r1=489416&r2=489417
==============================================================================
--- incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/framing/EncodingUtils.java (original)
+++ incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/framing/EncodingUtils.java Thu Dec 21 09:41:00 2006
@@ -100,7 +100,7 @@
 
     public static int encodedContentLength(Content table)
     {
-    	// TODO: New Content class required for AMQP 0-9.
+        // TODO: New Content class required for AMQP 0-9.
         return 0;
     }
 
@@ -114,7 +114,7 @@
             {
                 encodedString[i] = (byte) cha[i];
             }
-            writeBytes(buffer,encodedString);
+            writeBytes(buffer, encodedString);
         }
         else
         {
@@ -199,6 +199,12 @@
         }
     }
 
+
+    public static long unsignedIntegerLength()
+    {
+        return 4;
+    }
+
     public static void writeUnsignedInteger(ByteBuffer buffer, long l)
     {
         // TODO: Is this comparison safe? Do I need to cast RHS to long?
@@ -233,7 +239,7 @@
 
     public static void writeContentBytes(ByteBuffer buffer, Content content)
     {
-    	// TODO: New Content class required for AMQP 0-9.
+        // TODO: New Content class required for AMQP 0-9.
     }
 
     public static void writeBooleans(ByteBuffer buffer, boolean[] values)
@@ -302,8 +308,8 @@
 
     public static Content readContent(ByteBuffer buffer) throws AMQFrameDecodingException
     {
-    	// TODO: New Content class required for AMQP 0-9.
-    	return null;
+        // TODO: New Content class required for AMQP 0-9.
+        return null;
     }
 
     public static String readShortString(ByteBuffer buffer)
@@ -337,7 +343,7 @@
         long length = buffer.getUnsignedInt();
         if (length == 0)
         {
-            return null;
+            return "";
         }
         else
         {
@@ -601,5 +607,10 @@
             // really writing out unsigned byte
             buffer.put((byte) 0);
         }
+    }
+
+    public static long encodedCharacterLength()
+    {
+        return encodedShortStringLength("c");
     }
 }

Modified: incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/framing/FieldTableFactory.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/framing/FieldTableFactory.java?view=diff&rev=489417&r1=489416&r2=489417
==============================================================================
--- incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/framing/FieldTableFactory.java (original)
+++ incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/framing/FieldTableFactory.java Thu Dec 21 09:41:00 2006
@@ -34,7 +34,7 @@
         return new PropertyFieldTable(byteBuffer, length);
     }
 
-    public static PropertyFieldTable newFieldTable(String text)
+    public static FieldTable newFieldTable(String text)
     {
         return new PropertyFieldTable(text);
     }

Modified: incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/framing/PropertyFieldTable.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/framing/PropertyFieldTable.java?view=diff&rev=489417&r1=489416&r2=489417
==============================================================================
--- incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/framing/PropertyFieldTable.java (original)
+++ incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/framing/PropertyFieldTable.java Thu Dec 21 09:41:00 2006
@@ -52,6 +52,7 @@
     public static final char LONG_PROPERTY_PREFIX = 'l';
     public static final char FLOAT_PROPERTY_PREFIX = 'f';
     public static final char DOUBLE_PROPERTY_PREFIX = 'd';
+    public static final char NULL_STRING_PROPERTY_PREFIX = 'n';
 
     public static final char STRING_PROPERTY_PREFIX = AMQP_STRING_PROPERTY_PREFIX;
     public static final char CHAR_PROPERTY_PREFIX = AMQP_ASCII_STRING_PROPERTY_PREFIX;
@@ -79,7 +80,7 @@
 
     private LinkedHashMap<String, Object> _properties;
     private LinkedHashMap<String, String> _propertyNamesTypeMap;
-    private long _encodedSize = 0;
+    private long _encodedSize = 0;//EncodingUtils.unsignedIntegerLength();
 
     public PropertyFieldTable()
     {
@@ -138,7 +139,7 @@
     public Boolean getBoolean(String string)
     {
         Object o = get(string, BOOLEAN_PROPERTY_PREFIX);
-        if (o != null)
+        if (o != null && o instanceof Boolean)
         {
             return (Boolean) o;
         }
@@ -209,7 +210,7 @@
         }
         else
         {
-            return null;
+            return null;     //Float.valueOf(null); ???
         }
     }
 
@@ -235,7 +236,45 @@
         }
         else
         {
-            return null;
+
+
+            String type = _propertyNamesTypeMap.get(string);
+
+            if (type == null || type.equals("" + NULL_STRING_PROPERTY_PREFIX))
+            {
+                return null;
+            }
+            else
+            {
+                char itype = type.charAt(0);
+
+                Object value = _properties.get(string);
+
+                switch (itype)
+                {
+                    case STRING_PROPERTY_PREFIX:
+                    case BYTES_PROPERTY_PREFIX:
+                        return null;
+                    default:
+                    case BYTE_PROPERTY_PREFIX:
+                    case BOOLEAN_PROPERTY_PREFIX:
+                    case SHORT_PROPERTY_PREFIX:
+                    case INT_PROPERTY_PREFIX:
+                    case LONG_PROPERTY_PREFIX:
+                    case FLOAT_PROPERTY_PREFIX:
+                    case DOUBLE_PROPERTY_PREFIX:
+                        return String.valueOf(value);
+                    case CHAR_PROPERTY_PREFIX:
+                        if (value == null)
+                        {
+                            throw new NullPointerException("null char cannot be converted to String");
+                        }
+                        else
+                        {
+                            return String.valueOf(value);
+                        }
+                }
+            }
         }
     }
 
@@ -309,7 +348,14 @@
 
     public Object setString(String string, String string1)
     {
-        return put(STRING_PROPERTY_PREFIX + string, string1);
+        if (string1 == null)
+        {
+            return put(NULL_STRING_PROPERTY_PREFIX + string, null);
+        }
+        else
+        {
+            return put(STRING_PROPERTY_PREFIX + string, string1);
+        }
     }
 
     public Object setChar(String string, char c)
@@ -902,6 +948,8 @@
         }
 
         EncodingUtils.writeUnsignedInteger(buffer, _encodedSize);
+        //EncodingUtils.writeLong(buffer, _encodedSize);
+
 
         putDataInBuffer(buffer);
     }
@@ -959,7 +1007,17 @@
         String propertyName = key.substring(1);
         char propertyPrefix = _propertyNamesTypeMap.get(propertyName).charAt(0);
 
-        if (value != null)
+        if (_logger.isDebugEnabled())
+        {
+            _logger.debug("Put:" + propertyName +
+                          " encoding Now:" + _encodedSize +
+                          " name size= " + EncodingUtils.encodedShortStringLength(propertyName) +
+                          " value size= " + getEncodingSize(key, value));
+        }
+
+        // This prevents the item from being sent.
+        // JMS needs these propertyNames for lookups.
+        //if (value != null)
         {
             //Add the size of the propertyName
             _encodedSize += EncodingUtils.encodedShortStringLength(propertyName);
@@ -972,6 +1030,11 @@
             _encodedSize += getEncodingSize(key, value);
         }
 
+        if (_logger.isDebugEnabled())
+        {
+            _logger.debug("Put: new encodingSize " + _encodedSize);
+        }
+
         _properties.put((String) propertyName, value);
 
         return previous;
@@ -1046,6 +1109,7 @@
 
     private void putDataInBuffer(ByteBuffer buffer)
     {
+
         final Iterator it = _properties.entrySet().iterator();
 
         //If there are values then write out the encoded Size... could check _encodedSize != 0
@@ -1054,84 +1118,115 @@
 
         while (it.hasNext())
         {
+
             Map.Entry me = (Map.Entry) it.next();
             String propertyName = (String) me.getKey();
 
             //The type value
             char propertyPrefix = _propertyNamesTypeMap.get(propertyName).charAt(0);
-            //The actual param name skipping type
 
-            EncodingUtils.writeShortStringBytes(buffer, propertyName);
             Object value = me.getValue();
-
-            switch (propertyPrefix)
+            try
             {
 
-                case BOOLEAN_PROPERTY_PREFIX:
-                    buffer.put((byte) BOOLEAN_PROPERTY_PREFIX);
-                    EncodingUtils.writeBoolean(buffer, (Boolean) value);
-                    break;
-                case BYTE_PROPERTY_PREFIX:
-                    buffer.put((byte) BYTE_PROPERTY_PREFIX);
-                    EncodingUtils.writeByte(buffer, (Byte) value);
-                    break;
-                case SHORT_PROPERTY_PREFIX:
-                    buffer.put((byte) SHORT_PROPERTY_PREFIX);
-                    EncodingUtils.writeShort(buffer, (Short) value);
-                    break;
-                case INT_PROPERTY_PREFIX:
-                    buffer.put((byte) INT_PROPERTY_PREFIX);
-                    EncodingUtils.writeInteger(buffer, (Integer) value);
-                    break;
-                case AMQP_UNSIGNEDINT_PROPERTY_PREFIX: // Currently we don't create these
-                    buffer.put((byte) AMQP_UNSIGNEDINT_PROPERTY_PREFIX);
-                    EncodingUtils.writeUnsignedInteger(buffer, (Long) value);
-                    break;
-                case LONG_PROPERTY_PREFIX:
-                    buffer.put((byte) LONG_PROPERTY_PREFIX);
-                    EncodingUtils.writeLong(buffer, (Long) value);
-                    break;
-                case FLOAT_PROPERTY_PREFIX:
-                    buffer.put((byte) FLOAT_PROPERTY_PREFIX);
-                    EncodingUtils.writeFloat(buffer, (Float) value);
-                    break;
-                case DOUBLE_PROPERTY_PREFIX:
-                    buffer.put((byte) DOUBLE_PROPERTY_PREFIX);
-                    EncodingUtils.writeDouble(buffer, (Double) value);
-                    break;
+                if (_logger.isDebugEnabled())
+                {
+                    _logger.debug("Writing Property:" + propertyName +
+                                  " Type:" + propertyPrefix +
+                                  " Value:" + value);
+                    _logger.debug("Buffer Position:" + buffer.position() +
+                                  " Remaining:" + buffer.remaining());
+                }
 
-                case AMQP_WIDE_STRING_PROPERTY_PREFIX:
-                    //case AMQP_STRING_PROPERTY_PREFIX:
-                case STRING_PROPERTY_PREFIX:
-                    // TODO: look at using proper charset encoder
-                    buffer.put((byte) STRING_PROPERTY_PREFIX);
-                    EncodingUtils.writeLongStringBytes(buffer, (String) value);
-                    break;
+                //The actual param name skipping type
+                EncodingUtils.writeShortStringBytes(buffer, propertyName);
 
-                    //case AMQP_ASCII_STRING_PROPERTY_PREFIX:
-                case CHAR_PROPERTY_PREFIX:
-                    // TODO: look at using proper charset encoder
-                    buffer.put((byte) CHAR_PROPERTY_PREFIX);
-                    EncodingUtils.writeShortStringBytes(buffer, "" + (Character) value);
-                    break;
 
-                case BYTES_PROPERTY_PREFIX:
-                    buffer.put((byte) BYTES_PROPERTY_PREFIX);
-                    EncodingUtils.writeBytes(buffer, (byte[]) value);
-                    break;
+                switch (propertyPrefix)
+                {
 
-                case XML_PROPERTY_PREFIX:
-                    // Encode as XML
-                    buffer.put((byte) XML_PROPERTY_PREFIX);
-                    EncodingUtils.writeLongStringBytes(buffer, valueAsXML(propertyPrefix + propertyName, value));
-                    break;
-                default:
+                    case BOOLEAN_PROPERTY_PREFIX:
+                        buffer.put((byte) BOOLEAN_PROPERTY_PREFIX);
+                        EncodingUtils.writeBoolean(buffer, (Boolean) value);
+                        break;
+                    case BYTE_PROPERTY_PREFIX:
+                        buffer.put((byte) BYTE_PROPERTY_PREFIX);
+                        EncodingUtils.writeByte(buffer, (Byte) value);
+                        break;
+                    case SHORT_PROPERTY_PREFIX:
+                        buffer.put((byte) SHORT_PROPERTY_PREFIX);
+                        EncodingUtils.writeShort(buffer, (Short) value);
+                        break;
+                    case INT_PROPERTY_PREFIX:
+                        buffer.put((byte) INT_PROPERTY_PREFIX);
+                        EncodingUtils.writeInteger(buffer, (Integer) value);
+                        break;
+                    case AMQP_UNSIGNEDINT_PROPERTY_PREFIX: // Currently we don't create these
+                        buffer.put((byte) AMQP_UNSIGNEDINT_PROPERTY_PREFIX);
+                        EncodingUtils.writeUnsignedInteger(buffer, (Long) value);
+                        break;
+                    case LONG_PROPERTY_PREFIX:
+                        buffer.put((byte) LONG_PROPERTY_PREFIX);
+                        EncodingUtils.writeLong(buffer, (Long) value);
+                        break;
+                    case FLOAT_PROPERTY_PREFIX:
+                        buffer.put((byte) FLOAT_PROPERTY_PREFIX);
+                        EncodingUtils.writeFloat(buffer, (Float) value);
+                        break;
+                    case DOUBLE_PROPERTY_PREFIX:
+                        buffer.put((byte) DOUBLE_PROPERTY_PREFIX);
+                        EncodingUtils.writeDouble(buffer, (Double) value);
+                        break;
+                    case NULL_STRING_PROPERTY_PREFIX:
+                        buffer.put((byte) NULL_STRING_PROPERTY_PREFIX);
+                        break;
+                    case AMQP_WIDE_STRING_PROPERTY_PREFIX:
+                        //case AMQP_STRING_PROPERTY_PREFIX:
+                    case STRING_PROPERTY_PREFIX:
+                        // TODO: look at using proper charset encoder
+                        buffer.put((byte) STRING_PROPERTY_PREFIX);
+                        EncodingUtils.writeLongStringBytes(buffer, (String) value);
+                        break;
+
+                        //case AMQP_ASCII_STRING_PROPERTY_PREFIX:
+                    case CHAR_PROPERTY_PREFIX:
+                        // TODO: look at using proper charset encoder
+                        buffer.put((byte) CHAR_PROPERTY_PREFIX);
+                        EncodingUtils.writeShortStringBytes(buffer, "" + (Character) value);
+                        break;
+
+                    case BYTES_PROPERTY_PREFIX:
+                        buffer.put((byte) BYTES_PROPERTY_PREFIX);
+                        EncodingUtils.writeBytes(buffer, (byte[]) value);
+                        break;
+
+                    case XML_PROPERTY_PREFIX:
+                        // Encode as XML
+                        buffer.put((byte) XML_PROPERTY_PREFIX);
+                        EncodingUtils.writeLongStringBytes(buffer, valueAsXML(propertyPrefix + propertyName, value));
+                        break;
+                    default:
+                    {
+                        // Should never get here
+                        throw new IllegalArgumentException("Key '" + propertyName + "': Unsupported type in field table, type: " + ((value == null) ? "null-object" : value.getClass()));
+                    }
+                }
+            }
+            catch (Exception e)
+            {
+                if (_logger.isDebugEnabled())
                 {
-                    // Should never get here
-                    throw new IllegalArgumentException("Key '" + propertyName + "': Unsupported type in field table, type: " + ((value == null) ? "null-object" : value.getClass()));
+                    _logger.debug("Exception thrown:" + e);
+                    _logger.debug("Writing Property:" + propertyName +
+                                  " Type:" + propertyPrefix +
+                                  " Value:" + value);
+                    _logger.debug("Buffer Position:" + buffer.position() +
+                                  " Remaining:" + buffer.remaining());
                 }
+                throw new RuntimeException(e);
             }
         }
+
     }
 
 
@@ -1180,6 +1275,9 @@
                 case STRING_PROPERTY_PREFIX:
                     value = EncodingUtils.readLongString(buffer);
                     break;
+                case NULL_STRING_PROPERTY_PREFIX:
+                    value = null;
+                    break;
                     //case AMQP_ASCII_STRING_PROPERTY_PREFIX:
                 case CHAR_PROPERTY_PREFIX:
                     value = EncodingUtils.readShortString(buffer).charAt(0);
@@ -1207,6 +1305,12 @@
             if (type != XML_PROPERTY_PREFIX)
             {
                 setObject(key, value);
+                if (value == null)
+                {
+                    _logger.debug("setFromBuffer: value is null for key:" + key);
+                    _propertyNamesTypeMap.put(key, "" + type);
+                    _properties.put(key, null);
+                }
             }
         }
 
@@ -1224,47 +1328,50 @@
      */
     private static int getEncodingSize(String name, Object value)
     {
-        int encodingSize;
+        int encodingSize = 1; // Initialy 1 to cover the char prefix
 
         char propertyPrefix = name.charAt(0);
 
         switch (propertyPrefix)
         {
             case BOOLEAN_PROPERTY_PREFIX:
-                encodingSize = 1 + EncodingUtils.encodedBooleanLength();
+                encodingSize += EncodingUtils.encodedBooleanLength();
                 break;
             case BYTE_PROPERTY_PREFIX:
-                encodingSize = 1 + EncodingUtils.encodedByteLength();
+                encodingSize += EncodingUtils.encodedByteLength();
                 break;
             case SHORT_PROPERTY_PREFIX:
-                encodingSize = 1 + EncodingUtils.encodedShortLength();
+                encodingSize += EncodingUtils.encodedShortLength();
                 break;
             case INT_PROPERTY_PREFIX:
-                encodingSize = 1 + EncodingUtils.encodedIntegerLength();
+                encodingSize += EncodingUtils.encodedIntegerLength();
                 break;
             case LONG_PROPERTY_PREFIX:
-                encodingSize = 1 + EncodingUtils.encodedLongLength();
+                encodingSize += EncodingUtils.encodedLongLength();
                 break;
             case FLOAT_PROPERTY_PREFIX:
-                encodingSize = 1 + EncodingUtils.encodedFloatLength();
+                encodingSize += EncodingUtils.encodedFloatLength();
                 break;
             case DOUBLE_PROPERTY_PREFIX:
-                encodingSize = 1 + EncodingUtils.encodedDoubleLength();
+                encodingSize += EncodingUtils.encodedDoubleLength();
                 break;
             case AMQP_WIDE_STRING_PROPERTY_PREFIX:
                 //case AMQP_STRING_PROPERTY_PREFIX:
             case STRING_PROPERTY_PREFIX:
-                encodingSize = 1 + EncodingUtils.encodedLongStringLength((String) value);
+                encodingSize += EncodingUtils.encodedLongStringLength((String) value);
+                break;
+            case NULL_STRING_PROPERTY_PREFIX:
+                // There is no need for additiona size beyond the prefix 
                 break;
                 //case AMQP_ASCII_STRING_PROPERTY_PREFIX:
             case CHAR_PROPERTY_PREFIX:
-                encodingSize = 1 + EncodingUtils.encodedShortStringLength("" + (Character) value);
+                encodingSize += EncodingUtils.encodedShortStringLength("" + (Character) value);
                 break;
             case BYTES_PROPERTY_PREFIX:
-                encodingSize = 1 + ((byte[]) value).length;
+                encodingSize += 1 + ((byte[]) value).length;
                 break;
             case XML_PROPERTY_PREFIX:
-                encodingSize = 1 + EncodingUtils.encodedLongStringLength(valueAsXML(name, value));
+                encodingSize += EncodingUtils.encodedLongStringLength(valueAsXML(name, value));
                 break;
             default:
                 //encodingSize = 1 + EncodingUtils.encodedLongStringLength(String.valueOf(value));

Modified: incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/pool/PoolingFilter.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/pool/PoolingFilter.java?view=diff&rev=489417&r1=489416&r2=489417
==============================================================================
--- incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/pool/PoolingFilter.java (original)
+++ incubator/qpid/branches/new_persistence/java/common/src/main/java/org/apache/qpid/pool/PoolingFilter.java Thu Dec 21 09:41:00 2006
@@ -58,7 +58,7 @@
             Job job = getJobForSession(session);
             job.acquire(); //prevents this job being removed from _jobs
             job.add(event);
-            if (job.activate())
+            if (job.activate() && _poolReference.getPool() != null && !_poolReference.getPool().isShutdown())
             {
                 _poolReference.getPool().execute(job);
             }