qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Robbie Gemmell (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (QPIDJMS-325) reading from empty buffer of a BytesMessage should return 0, not -1
Date Wed, 20 Sep 2017 14:11:00 GMT

    [ https://issues.apache.org/jira/browse/QPIDJMS-325?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16173225#comment-16173225

Robbie Gemmell commented on QPIDJMS-325:

I don't entirely agree with your assessment, though I'm not necessarily against changing things
to be more consistent.

I think ActiveMQ's StreamMessage behaviour is incorrect, as the javadoc says it is, however
I don't think either clients behaviour is invalid for BytesMessage. The definition there is
much less specific and doesn't so strictly state what should occur in that case whereas it
does for StreamMessage, which in part makes sense because the two are actually fairly different.
In StreamMessage, the precise behaviour around the start and end of a readBytes process is
far more important because there could be multiple such elements in the StreamMessage back
to back, and mixed with other types of element, and the end of the message or wrong element
type being encountered causes exceptions, so you need to better demarcate which element is
being read and that one elements inspection is complete before the next begins etc. With BytesMessage
its just a single group of bytes, the end is the end, and no exception is thrown at the end
of the message so it makes less difference what is returned, which is presumably why the javadoc
is so much less specific.

> reading from empty buffer of a BytesMessage should return 0, not -1
> -------------------------------------------------------------------
>                 Key: QPIDJMS-325
>                 URL: https://issues.apache.org/jira/browse/QPIDJMS-325
>             Project: Qpid JMS
>          Issue Type: Bug
>          Components: qpid-jms-client
>    Affects Versions: 0.25.0
>            Reporter: Jiri Danek
>            Priority: Minor
> Consider the following test. According to http://docs.oracle.com/javaee/7/api/javax/jms/BytesMessage.html#readBytes-byte:A-
the #readBytes method should return 0 when it is first called, as the number of bytes in the
buffer is 0 and it read 0 bytes. Only on subsequent calls it should return -1. What happens
now is that the method returns -1 the first time.
> See the commented lines to try the same thing with ActiveMQ JMS Client library, and with
StreamMessage instead of BytesMessage. The behavior there should be the same.
> ActiveMQ passes the test with BytesMessage and fails it with StreamMessage. Qpid JMS
fails with BytesMessage and passes with StreamMessage.
> {code}
> import org.apache.activemq.ActiveMQConnectionFactory;
> import org.apache.qpid.jms.JmsConnectionFactory;
> import org.junit.Test;
> import javax.jms.*;
> import static com.google.common.truth.Truth.assertThat;
> public class EmptyBufferInputTest {
>     @Test
>     public void testEmptyBufferInput() throws JMSException {
> //        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://");
>         JmsConnectionFactory connectionFactory = new JmsConnectionFactory("amqp://");
>         Connection connection = connectionFactory.createConnection();
>         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
>         final byte[] BYTE_LIST = {1, 2, 4};
> //        StreamMessage message = session.createStreamMessage();
>         BytesMessage message = session.createBytesMessage();
>         message.clearBody();
>         byte[] readList = new byte[BYTE_LIST.length - 1];
>         byte[] emptyList = {};
>         message.writeBytes(emptyList);
>         message.reset();
>         final int IS_EMPTY = 0;
>         assertThat(message.readBytes(readList)).isEqualTo(IS_EMPTY);
>     }
> }
> {code}

This message was sent by Atlassian JIRA

To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org

View raw message