You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2013/12/03 14:11:23 UTC
svn commit: r1547375 - in /qpid/jms/trunk/src:
main/java/org/apache/qpid/jms/engine/ test/java/org/apache/qpid/jms/engine/
test/java/org/apache/qpid/jms/test/testpeer/describedtypes/sections/
Author: robbie
Date: Tue Dec 3 13:11:23 2013
New Revision: 1547375
URL: http://svn.apache.org/r1547375
Log:
QPIDJMS-9: update handling of TextMessage created from data section
Modified:
qpid/jms/trunk/src/main/java/org/apache/qpid/jms/engine/AmqpTextMessage.java
qpid/jms/trunk/src/test/java/org/apache/qpid/jms/engine/AmqpBytesMessageTest.java
qpid/jms/trunk/src/test/java/org/apache/qpid/jms/engine/AmqpTextMessageTest.java
qpid/jms/trunk/src/test/java/org/apache/qpid/jms/test/testpeer/describedtypes/sections/DataDescribedType.java
Modified: qpid/jms/trunk/src/main/java/org/apache/qpid/jms/engine/AmqpTextMessage.java
URL: http://svn.apache.org/viewvc/qpid/jms/trunk/src/main/java/org/apache/qpid/jms/engine/AmqpTextMessage.java?rev=1547375&r1=1547374&r2=1547375&view=diff
==============================================================================
--- qpid/jms/trunk/src/main/java/org/apache/qpid/jms/engine/AmqpTextMessage.java (original)
+++ qpid/jms/trunk/src/main/java/org/apache/qpid/jms/engine/AmqpTextMessage.java Tue Dec 3 13:11:23 2013
@@ -19,17 +19,25 @@
package org.apache.qpid.jms.engine;
import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.CharacterCodingException;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+import javax.jms.JMSException;
+
+import org.apache.qpid.jms.impl.QpidJmsException;
import org.apache.qpid.proton.amqp.Binary;
import org.apache.qpid.proton.amqp.messaging.AmqpValue;
import org.apache.qpid.proton.amqp.messaging.Data;
import org.apache.qpid.proton.amqp.messaging.Section;
-import org.apache.qpid.proton.codec.impl.DataImpl;
import org.apache.qpid.proton.engine.Delivery;
import org.apache.qpid.proton.message.Message;
public class AmqpTextMessage extends AmqpMessage
{
+ private static final String UTF_8 = "UTF-8";
+
/**
* Content type, only to be used when message uses a data
* body section, and not when using an amqp-value body section
@@ -42,6 +50,8 @@ public class AmqpTextMessage extends Amq
*/
public static final String MSG_TYPE_ANNOTATION_VALUE = "TextMessage";
+ private CharsetDecoder _decoder = Charset.forName(UTF_8).newDecoder();
+
public AmqpTextMessage()
{
super();
@@ -64,8 +74,9 @@ public class AmqpTextMessage extends Amq
/**
* @throws IllegalStateException if the underlying message content can't be retrieved as a String or null
+ * @throws JMSException if the message can't be decoded
*/
- public String getText() throws IllegalStateException
+ public String getText() throws IllegalStateException, JMSException
{
Section body = getMessage().getBody();
@@ -78,23 +89,22 @@ public class AmqpTextMessage extends Amq
Data data = (Data) body;
if(data.getValue() == null || data.getValue().getLength() == 0)
{
- return null;
+ return "";
}
else
{
Binary b = data.getValue();
-
ByteBuffer buf = ByteBuffer.wrap(b.getArray(), b.getArrayOffset(), b.getLength());
- org.apache.qpid.proton.codec.Data codecData = new DataImpl();
- codecData.decode(buf);
- if(codecData.isNull())
+ try
{
- return null;
+ CharBuffer chars = _decoder.decode(buf);
+ return String.valueOf(chars);
}
- else
+ catch (CharacterCodingException e)
{
- return codecData.getString();
+ JMSException jmsException = new QpidJmsException("Cannot decode String in UFT-8", e);
+ throw jmsException;
}
}
Modified: qpid/jms/trunk/src/test/java/org/apache/qpid/jms/engine/AmqpBytesMessageTest.java
URL: http://svn.apache.org/viewvc/qpid/jms/trunk/src/test/java/org/apache/qpid/jms/engine/AmqpBytesMessageTest.java?rev=1547375&r1=1547374&r2=1547375&view=diff
==============================================================================
--- qpid/jms/trunk/src/test/java/org/apache/qpid/jms/engine/AmqpBytesMessageTest.java (original)
+++ qpid/jms/trunk/src/test/java/org/apache/qpid/jms/engine/AmqpBytesMessageTest.java Tue Dec 3 13:11:23 2013
@@ -180,7 +180,7 @@ public class AmqpBytesMessageTest extend
}
@Test
- public void testGetTextUsingReceivedMessageWithDataSectionContainingNullReturnsEmptyBAIS() throws Exception
+ public void testGetTextUsingReceivedMessageWithDataSectionContainingNothingReturnsEmptyBAIS() throws Exception
{
Message message = Proton.message();
message.setBody(new Data(null));
Modified: qpid/jms/trunk/src/test/java/org/apache/qpid/jms/engine/AmqpTextMessageTest.java
URL: http://svn.apache.org/viewvc/qpid/jms/trunk/src/test/java/org/apache/qpid/jms/engine/AmqpTextMessageTest.java?rev=1547375&r1=1547374&r2=1547375&view=diff
==============================================================================
--- qpid/jms/trunk/src/test/java/org/apache/qpid/jms/engine/AmqpTextMessageTest.java (original)
+++ qpid/jms/trunk/src/test/java/org/apache/qpid/jms/engine/AmqpTextMessageTest.java Tue Dec 3 13:11:23 2013
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertNul
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import java.nio.charset.Charset;
import java.util.ArrayList;
import org.apache.qpid.jms.QpidJmsTestCase;
@@ -44,6 +45,7 @@ import org.mockito.Mockito;
public class AmqpTextMessageTest extends QpidJmsTestCase
{
+ private static final String UTF_8 = "UTF-8";
private AmqpConnection _mockAmqpConnection;
private Delivery _mockDelivery;
@@ -120,40 +122,18 @@ public class AmqpTextMessageTest extends
}
@Test
- public void testGetTextUsingReceivedMessageWithDataSectionContainingNullReturnsNull() throws Exception
+ public void testGetTextUsingReceivedMessageWithDataSectionContainingNothingReturnsEmptyString() throws Exception
{
Message message = Proton.message();
message.setBody(new Data(null));
AmqpTextMessage amqpTextMessage = new AmqpTextMessage(_mockDelivery, message, _mockAmqpConnection);
- assertNull("expected null string", amqpTextMessage.getText());
+ assertEquals("expected zero-length string", "", amqpTextMessage.getText());
}
@Test
- public void testGetTextUsingReceivedMessageWithDataSectionContainingBinaryEncodedNullReturnsNull() throws Exception
- {
- org.apache.qpid.proton.codec.Data nullData = new DataImpl();
- nullData.putNull();
- Binary stringBinary = nullData.encode();
-
- org.apache.qpid.proton.codec.Data payloadData = new DataImpl();
- payloadData.putDescribedType(new DataDescribedType(stringBinary));
- Binary b = payloadData.encode();
-
- System.out.println("Using encoded AMQP message payload: " + b);
-
- Message message = Proton.message();
- int decoded = message.decode(b.getArray(), b.getArrayOffset(), b.getLength());
- assertEquals(decoded, b.getLength());
-
- AmqpTextMessage amqpTextMessage = new AmqpTextMessage(_mockDelivery, message, _mockAmqpConnection);
-
- assertNull("expected null string", amqpTextMessage.getText());
- }
-
- @Test
- public void testGetTextUsingReceivedMessageWithDataSectionContainingZeroLengthBinaryReturnsNull() throws Exception
+ public void testGetTextUsingReceivedMessageWithDataSectionContainingZeroLengthBinaryReturnsEmptyString() throws Exception
{
org.apache.qpid.proton.codec.Data payloadData = new DataImpl();
payloadData.putDescribedType(new DataDescribedType(new Binary(new byte[0])));
@@ -166,20 +146,17 @@ public class AmqpTextMessageTest extends
assertEquals(decoded, b.getLength());
AmqpTextMessage amqpTextMessage = new AmqpTextMessage(_mockDelivery, message, _mockAmqpConnection);
- assertNull("expected null string", amqpTextMessage.getText());
+ assertEquals("expected zero-length string", "", amqpTextMessage.getText());
}
@Test
- public void testGetTextUsingReceivedMessageWithDataSectionContainingEncodedString() throws Exception
+ public void testGetTextUsingReceivedMessageWithDataSectionContainingStringBytes() throws Exception
{
String encodedString = "myEncodedString";
-
- org.apache.qpid.proton.codec.Data stringData = new DataImpl();
- stringData.putString(encodedString);
- Binary stringBinary = stringData.encode();
+ byte[] encodedBytes = encodedString.getBytes(Charset.forName(UTF_8));
org.apache.qpid.proton.codec.Data payloadData = new DataImpl();
- payloadData.putDescribedType(new DataDescribedType(stringBinary));
+ payloadData.putDescribedType(new DataDescribedType(new Binary(encodedBytes)));
Binary b = payloadData.encode();
System.out.println("Using encoded AMQP message payload: " + b);
@@ -227,34 +204,4 @@ public class AmqpTextMessageTest extends
//expected
}
}
-
- @Test
- public void testGetTextWithDataSectionContainingNonNullNonStringContentThrowsISE() throws Exception
- {
- org.apache.qpid.proton.codec.Data booleanData = new DataImpl();
- booleanData.putBoolean(true);
- Binary booleanBinary = booleanData.encode();
-
- org.apache.qpid.proton.codec.Data payloadData = new DataImpl();
- payloadData.putDescribedType(new DataDescribedType(booleanBinary));
- Binary b = payloadData.encode();
-
- System.out.println("Using encoded AMQP message payload: " + b);
-
- Message message = Proton.message();
- int decoded = message.decode(b.getArray(), b.getArrayOffset(), b.getLength());
- assertEquals(decoded, b.getLength());
-
- AmqpTextMessage amqpTextMessage = new AmqpTextMessage(_mockDelivery, message, _mockAmqpConnection);
-
- try
- {
- amqpTextMessage.getText();
- fail("expected exception not thrown");
- }
- catch(IllegalStateException ise)
- {
- //expected
- }
- }
}
Modified: qpid/jms/trunk/src/test/java/org/apache/qpid/jms/test/testpeer/describedtypes/sections/DataDescribedType.java
URL: http://svn.apache.org/viewvc/qpid/jms/trunk/src/test/java/org/apache/qpid/jms/test/testpeer/describedtypes/sections/DataDescribedType.java?rev=1547375&r1=1547374&r2=1547375&view=diff
==============================================================================
--- qpid/jms/trunk/src/test/java/org/apache/qpid/jms/test/testpeer/describedtypes/sections/DataDescribedType.java (original)
+++ qpid/jms/trunk/src/test/java/org/apache/qpid/jms/test/testpeer/describedtypes/sections/DataDescribedType.java Tue Dec 3 13:11:23 2013
@@ -31,6 +31,11 @@ public class DataDescribedType implement
public DataDescribedType(Binary described)
{
+ if(described == null)
+ {
+ throw new IllegalArgumentException("provided Binary must not be null");
+ }
+
_described = described;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org