[
https://issues.apache.org/jira/browse/QPIDJMS-325?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16173250#comment-16173250
]
Robbie Gemmell commented on QPIDJMS-325:
----------------------------------------
You've confused me a bit now. The original description says the two clients
behave differently for both types of message, since "ActiveMQ passes the test
with BytesMessage and fails it with StreamMessage. Qpid JMS fails with
BytesMessage and passes with StreamMessage."
To be clear, I think Qpid JMS is operating within the spec for both message
types as it stands, but was saying that I'm not necessarily against changing
its BytesMessage beheviour to be more consistent with its StreamMessage
implementation (though I also think theres no real need to). I think ActiveMQ
is also operating within the spec for BytesMessage, even if its behaviour is
not the same as Qpid JMS. It is not in spec for StreamMessage however, as it
explicitly states that it must return 0 for an empty element first before -1
(something BytesMessage does not say) and your test says that is not happening.
> 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 Daněk
> Priority: Trivial
>
> 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://127.0.0.1:61616");
> JmsConnectionFactory connectionFactory = new
> JmsConnectionFactory("amqp://127.0.0.1:5672");
> 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
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]