Author: rhs
Date: Fri Mar 20 05:29:10 2009
New Revision: 756328

URL: http://svn.apache.org/viewvc?rev=756328&view=rev
Log:
Fix for QPID-1761 and QPID-1762: made BBEncoder.grow() flip the buffer before 
copying; added a BBEncoder test; made unrecognized mime types default to 
BytesMessage; added logging of exception root cause to AMQSession; fixed 
miscelaneous test failures

Added:
    qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/transport/codec/
    
qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/transport/codec/BBEncoderTest.java
Modified:
    
qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
    
qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/MessageFactoryRegistry.java
    
qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/message/BytesMessageTest.java
    
qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/message/StreamMessageTest.java
    
qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/codec/BBEncoder.java

Modified: 
qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java?rev=756328&r1=756327&r2=756328&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
 (original)
+++ 
qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
 Fri Mar 20 05:29:10 2009
@@ -1015,6 +1015,7 @@
             }
             catch (URISyntaxException urlse)
             {
+                _logger.error("", urlse);
                 JMSException jmse = new JMSException(urlse.getReason());
                 jmse.setLinkedException(urlse);
 

Modified: 
qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/MessageFactoryRegistry.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/MessageFactoryRegistry.java?rev=756328&r1=756327&r2=756328&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/MessageFactoryRegistry.java
 (original)
+++ 
qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/MessageFactoryRegistry.java
 Fri Mar 20 05:29:10 2009
@@ -48,6 +48,7 @@
     private final Map<String, MessageFactory> _mimeStringToFactoryMap = new 
HashMap<String, MessageFactory>();
     private final Map<AMQShortString, MessageFactory> 
_mimeShortStringToFactoryMap =
             new HashMap<AMQShortString, MessageFactory>();
+    private final MessageFactory _default = new JMSBytesMessageFactory();
 
     /**
      * Construct a new registry with the default message factories registered
@@ -63,7 +64,7 @@
         mf.registerFactory(JMSBytesMessage.MIME_TYPE, new 
JMSBytesMessageFactory());
         mf.registerFactory(JMSObjectMessage.MIME_TYPE, new 
JMSObjectMessageFactory());
         mf.registerFactory(JMSStreamMessage.MIME_TYPE, new 
JMSStreamMessageFactory());
-        mf.registerFactory(null, new JMSBytesMessageFactory());
+        mf.registerFactory(null, mf._default);
 
         return mf;
     }
@@ -113,12 +114,10 @@
         MessageFactory mf = 
_mimeShortStringToFactoryMap.get(contentTypeShortString);
         if (mf == null)
         {
-            throw new AMQException(null, "Unsupport MIME type of " + 
properties.getContentTypeAsString(), null);
-        }
-        else
-        {
-            return mf.createMessage(deliveryTag, redelivered, contentHeader, 
exchange, routingKey, bodies);
+            mf = _default;
         }
+
+        return mf.createMessage(deliveryTag, redelivered, contentHeader, 
exchange, routingKey, bodies);
     }
 
     public AbstractJMSMessage createMessage(MessageTransfer transfer) throws 
AMQException, JMSException
@@ -138,22 +137,20 @@
         MessageFactory mf = _mimeStringToFactoryMap.get(messageType);
         if (mf == null)
         {
-            throw new AMQException(null, "Unsupport MIME type of " + 
messageType, null);
+            mf = _default;
         }
-        else
+
+        boolean redelivered = false;
+        DeliveryProperties deliverProps;
+        if((deliverProps = transfer.getHeader().get(DeliveryProperties.class)) 
!= null)
         {
-            boolean redelivered = false;
-            DeliveryProperties deliverProps;
-            if((deliverProps = 
transfer.getHeader().get(DeliveryProperties.class)) != null)
-            {
-                redelivered = deliverProps.getRedelivered();
-            }
-            return mf.createMessage(transfer.getId(), 
-                                    redelivered, 
-                                    mprop == null? new 
MessageProperties():mprop,
-                                    deliverProps == null? new 
DeliveryProperties():deliverProps,
-                                    transfer.getBody());
+            redelivered = deliverProps.getRedelivered();
         }
+        return mf.createMessage(transfer.getId(),
+                                redelivered,
+                                mprop == null? new MessageProperties():mprop,
+                                deliverProps == null? new 
DeliveryProperties():deliverProps,
+                                transfer.getBody());
     }
 
 
@@ -167,11 +164,9 @@
         MessageFactory mf = _mimeStringToFactoryMap.get(mimeType);
         if (mf == null)
         {
-            throw new AMQException(null, "Unsupport MIME type of " + mimeType, 
null);
-        }
-        else
-        {
-            return mf.createMessage(delegateFactory);
+            mf = _default;
         }
+
+        return mf.createMessage(delegateFactory);
     }
 }

Modified: 
qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/message/BytesMessageTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/message/BytesMessageTest.java?rev=756328&r1=756327&r2=756328&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/message/BytesMessageTest.java
 (original)
+++ 
qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/message/BytesMessageTest.java
 Fri Mar 20 05:29:10 2009
@@ -559,7 +559,7 @@
         JMSBytesMessage bm = TestMessageHelper.newJMSBytesMessage();
         bm.reset();
         String result = bm.toBodyString();
-        assertNull(result);
+        assertEquals("\"\"", result);
     }
 
     public static junit.framework.Test suite()

Modified: 
qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/message/StreamMessageTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/message/StreamMessageTest.java?rev=756328&r1=756327&r2=756328&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/message/StreamMessageTest.java
 (original)
+++ 
qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/message/StreamMessageTest.java
 Fri Mar 20 05:29:10 2009
@@ -435,7 +435,7 @@
         JMSStreamMessage bm = TestMessageHelper.newJMSStreamMessage();
         bm.reset();
         String result = bm.toBodyString();
-        assertNull(result);
+        assertEquals("\"\"", result);
     }
 
     private void checkConversionsFail(StreamMessage sm, int[] conversions) 
throws JMSException

Modified: 
qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/codec/BBEncoder.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/codec/BBEncoder.java?rev=756328&r1=756327&r2=756328&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/codec/BBEncoder.java
 (original)
+++ 
qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/codec/BBEncoder.java
 Fri Mar 20 05:29:10 2009
@@ -59,12 +59,23 @@
         return slice;
     }
 
+    public ByteBuffer buffer()
+    {
+        int pos = out.position();
+        out.position(segment);
+        ByteBuffer slice = out.slice();
+        slice.limit(pos - segment);
+        out.position(pos);
+        return slice;
+    }
+
     private void grow(int size)
     {
         ByteBuffer old = out;
         int capacity = old.capacity();
         out = ByteBuffer.allocate(Math.max(capacity + size, 2*capacity));
         out.order(ByteOrder.BIG_ENDIAN);
+        old.flip();
         out.put(old);
     }
 

Added: 
qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/transport/codec/BBEncoderTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/transport/codec/BBEncoderTest.java?rev=756328&view=auto
==============================================================================
--- 
qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/transport/codec/BBEncoderTest.java
 (added)
+++ 
qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/transport/codec/BBEncoderTest.java
 Fri Mar 20 05:29:10 2009
@@ -0,0 +1,47 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.transport.codec;
+
+import junit.framework.TestCase;
+
+import java.nio.ByteBuffer;
+
+/**
+ * BBEncoderTest
+ *
+ */
+
+public class BBEncoderTest extends TestCase
+{
+
+    public void testGrow()
+    {
+        BBEncoder enc = new BBEncoder(4);
+        enc.writeInt32(0xDEADBEEF);
+        ByteBuffer buf = enc.buffer();
+        assertEquals(0xDEADBEEF, buf.getInt(0));
+        enc.writeInt32(0xBEEFDEAD);
+        buf = enc.buffer();
+        assertEquals(0xDEADBEEF, buf.getInt(0));
+        assertEquals(0xBEEFDEAD, buf.getInt(4));
+    }
+
+}



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to