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]