qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Marnie McCormack (JIRA)" <qpid-...@incubator.apache.org>
Subject [jira] Commented: (QPID-1199) Can't append to BytesMessage after send
Date Tue, 06 Jan 2009 16:36:45 GMT

    [ https://issues.apache.org/jira/browse/QPID-1199?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12661197#action_12661197
] 

Marnie McCormack commented on QPID-1199:
----------------------------------------

Having read the JMS API on BytesMessage my reading is that the MessageConverter class should
not reset the original message (applicable for BytesMessage and StreamMessage) before returning
a new message for sending by the Messageproducer. 

The original message should be mutable i.e. in the example above jmsMsg.writeBytes should
succeed. This fails because of the reset call in MessageConverter (Lines 51 & 111).

Note that the received message should be immutable i.e. we should reset the bytes/stream in
the message in receipt - have not check what we do here.

> Can't append to BytesMessage after send
> ---------------------------------------
>
>                 Key: QPID-1199
>                 URL: https://issues.apache.org/jira/browse/QPID-1199
>             Project: Qpid
>          Issue Type: Improvement
>          Components: Java Client
>    Affects Versions: M2.1, M3
>            Reporter: Aidan Skinner
>            Assignee: Aidan Skinner
>            Priority: Minor
>
> The following code throws an exception on the second iteration of the loop:
> public void testModificationAfterSend() throws Exception
> {
>                 Connection connection = getConnection();
>         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
>         BytesMessage jmsMsg = session.createBytesMessage();
>         Destination destination = new AMQQueue("amq.direct", randomize("BytesMessageTest"));
>         /** Set the constant message contents. */
>         jmsMsg.setStringProperty(
>             "foo", "test"
>         );
>         /** Pre-populate the message body buffer to the target size. */
>         byte[] jmsMsgBodyBuffer = new byte[1024];
>         for(int i=0;i<jmsMsgBodyBuffer.length;i++)
>         {
>             jmsMsgBodyBuffer[i] = (byte) 0xF;
>         }
>         /**
>         * Send messages.
>         */
>         MessageProducer producer = session.createProducer(destination);
>         for(int writtenMsgCount = 0; writtenMsgCount < 10; writtenMsgCount++){
>             /** Set the per send message contents. */
>             jmsMsgBodyBuffer[0] = (byte) writtenMsgCount;
>             jmsMsg.writeBytes(jmsMsgBodyBuffer,0,jmsMsgBodyBuffer.length);
>             /** Try to write a message. */
>             producer.send(jmsMsg);
>         }
>     }
> AFAICT there is no reason for us to not allow this to work (although it's a bit odd)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message