You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2009/03/20 06:29:10 UTC

svn commit: r756328 - in /qpid/trunk/qpid/java: client/src/main/java/org/apache/qpid/client/ client/src/main/java/org/apache/qpid/client/message/ client/src/test/java/org/apache/qpid/test/unit/client/message/ common/src/main/java/org/apache/qpid/transp...

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:commits-subscribe@qpid.apache.org