Search in sources :

Example 1 with MessageEOFException

use of javax.jms.MessageEOFException in project activemq-artemis by apache.

the class ActiveMQStreamMessage method readBytes.

@Override
public int readBytes(final byte[] value) throws JMSException {
    checkRead();
    try {
        Pair<Integer, Integer> pairRead = streamReadBytes(message.getBodyBuffer(), len, value);
        len = pairRead.getA();
        return pairRead.getB();
    } catch (IllegalStateException e) {
        throw new MessageFormatException(e.getMessage());
    } catch (IndexOutOfBoundsException e) {
        throw new MessageEOFException("");
    }
}
Also used : StreamMessageUtil.streamReadInteger(org.apache.activemq.artemis.reader.StreamMessageUtil.streamReadInteger) MessageFormatException(javax.jms.MessageFormatException) MessageEOFException(javax.jms.MessageEOFException)

Example 2 with MessageEOFException

use of javax.jms.MessageEOFException in project activemq-artemis by apache.

the class JMSMessageTest method testBytesMessage.

@Test
public void testBytesMessage() throws Exception {
    // Receive a message with the JMS API
    connection.start();
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    destination = createDestination(session, destinationType);
    MessageConsumer consumer = session.createConsumer(destination);
    MessageProducer producer = session.createProducer(destination);
    // Send the message
    {
        BytesMessage message = session.createBytesMessage();
        message.writeBoolean(true);
        producer.send(message);
    }
    // Check the message
    {
        BytesMessage message = (BytesMessage) consumer.receive(1000);
        assertNotNull(message);
        assertTrue(message.readBoolean());
        try {
            message.readByte();
            fail("Expected exception not thrown.");
        } catch (MessageEOFException e) {
        }
    }
    assertNull(consumer.receiveNoWait());
}
Also used : MessageConsumer(javax.jms.MessageConsumer) MessageEOFException(javax.jms.MessageEOFException) BytesMessage(javax.jms.BytesMessage) MessageProducer(javax.jms.MessageProducer) Session(javax.jms.Session) BasicOpenWireTest(org.apache.activemq.artemis.tests.integration.openwire.BasicOpenWireTest) Test(org.junit.Test)

Example 3 with MessageEOFException

use of javax.jms.MessageEOFException in project activemq-artemis by apache.

the class MessageBodyTest method testStreamMessage.

@Test
public void testStreamMessage() throws Exception {
    StreamMessage m = queueProducerSession.createStreamMessage();
    // Some arbitrary values
    boolean myBool = true;
    byte myByte = -111;
    short myShort = 15321;
    int myInt = 0x71ab6c80;
    long myLong = 0x20bf1e3fb6fa31dfL;
    float myFloat = Float.MAX_VALUE - 23465;
    double myDouble = Double.MAX_VALUE - 72387633;
    String myString = "abcdef&^*&!^ghijkl\uD5E2\uCAC7\uD2BB\uB7DD\uB7C7\uB3A3\uBCE4\uB5A5";
    char myChar = 'q';
    byte[] myBytes = new byte[] { -23, 114, -126, -12, 74, 87 };
    m.writeBoolean(myBool);
    m.writeByte(myByte);
    m.writeShort(myShort);
    m.writeChar(myChar);
    m.writeInt(myInt);
    m.writeLong(myLong);
    m.writeFloat(myFloat);
    m.writeDouble(myDouble);
    m.writeString(myString);
    m.writeBytes(myBytes);
    m.writeBytes(myBytes, 2, 3);
    m.writeObject(new Boolean(myBool));
    m.writeObject(new Byte(myByte));
    m.writeObject(new Short(myShort));
    m.writeObject(new Integer(myInt));
    m.writeObject(new Long(myLong));
    m.writeObject(new Float(myFloat));
    m.writeObject(new Double(myDouble));
    m.writeObject(myString);
    m.writeObject(myBytes);
    try {
        m.writeObject(new Object());
        ProxyAssertSupport.fail();
    } catch (MessageFormatException e) {
    }
    // Reading should not be possible when message is read-write
    try {
        m.readBoolean();
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotReadableException e) {
    }
    try {
        m.readShort();
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotReadableException e) {
    }
    try {
        m.readChar();
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotReadableException e) {
    }
    try {
        m.readInt();
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotReadableException e) {
    }
    try {
        m.readLong();
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotReadableException e) {
    }
    try {
        m.readFloat();
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotReadableException e) {
    }
    try {
        m.readDouble();
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotReadableException e) {
    }
    try {
        byte[] bytes = new byte[333];
        m.readBytes(bytes);
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotReadableException e) {
    }
    queueProducer.send(m);
    StreamMessage m2 = (StreamMessage) queueConsumer.receive(2000);
    ProxyAssertSupport.assertEquals(myBool, m2.readBoolean());
    ProxyAssertSupport.assertEquals(myByte, m2.readByte());
    ProxyAssertSupport.assertEquals(myShort, m2.readShort());
    ProxyAssertSupport.assertEquals(myChar, m2.readChar());
    ProxyAssertSupport.assertEquals(myInt, m2.readInt());
    ProxyAssertSupport.assertEquals(myLong, m2.readLong());
    ProxyAssertSupport.assertEquals(myFloat, m2.readFloat(), 0);
    ProxyAssertSupport.assertEquals(myDouble, m2.readDouble(), 0);
    ProxyAssertSupport.assertEquals(myString, m2.readString());
    byte[] bytes = new byte[6];
    int ret = m2.readBytes(bytes);
    ProxyAssertSupport.assertEquals(6, ret);
    Assert.assertArrayEquals(myBytes, bytes);
    ret = m2.readBytes(bytes);
    ProxyAssertSupport.assertEquals(-1, ret);
    byte[] bytes2 = new byte[3];
    ret = m2.readBytes(bytes2);
    ProxyAssertSupport.assertEquals(3, ret);
    ProxyAssertSupport.assertEquals(myBytes[2], bytes2[0]);
    ProxyAssertSupport.assertEquals(myBytes[3], bytes2[1]);
    ProxyAssertSupport.assertEquals(myBytes[4], bytes2[2]);
    ret = m2.readBytes(bytes2);
    ProxyAssertSupport.assertEquals(-1, ret);
    ProxyAssertSupport.assertEquals(myBool, m2.readBoolean());
    ProxyAssertSupport.assertEquals(myByte, m2.readByte());
    ProxyAssertSupport.assertEquals(myShort, m2.readShort());
    ProxyAssertSupport.assertEquals(myInt, m2.readInt());
    ProxyAssertSupport.assertEquals(myLong, m2.readLong());
    ProxyAssertSupport.assertEquals(myFloat, m2.readFloat(), 0);
    ProxyAssertSupport.assertEquals(myDouble, m2.readDouble(), 0);
    ProxyAssertSupport.assertEquals(myString, m2.readString());
    bytes = new byte[6];
    ret = m2.readBytes(bytes);
    ProxyAssertSupport.assertEquals(6, ret);
    Assert.assertArrayEquals(myBytes, bytes);
    ret = m2.readBytes(bytes);
    ProxyAssertSupport.assertEquals(-1, ret);
    // Try and read past the end of the stream
    try {
        m2.readBoolean();
        ProxyAssertSupport.fail();
    } catch (MessageEOFException e) {
    }
    try {
        m2.readByte();
        ProxyAssertSupport.fail();
    } catch (MessageEOFException e) {
    }
    try {
        m2.readChar();
        ProxyAssertSupport.fail();
    } catch (MessageEOFException e) {
    }
    try {
        m2.readDouble();
        ProxyAssertSupport.fail();
    } catch (MessageEOFException e) {
    }
    try {
        m2.readFloat();
        ProxyAssertSupport.fail();
    } catch (MessageEOFException e) {
    }
    try {
        m2.readInt();
        ProxyAssertSupport.fail();
    } catch (MessageEOFException e) {
    }
    try {
        m2.readLong();
        ProxyAssertSupport.fail();
    } catch (MessageEOFException e) {
    }
    try {
        m2.readShort();
        ProxyAssertSupport.fail();
    } catch (MessageEOFException e) {
    }
    // Message should not be writable in read-only mode
    try {
        m2.writeBoolean(myBool);
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotWriteableException e) {
    }
    try {
        m2.writeByte(myByte);
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotWriteableException e) {
    }
    try {
        m2.writeShort(myShort);
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotWriteableException e) {
    }
    try {
        m2.writeChar(myChar);
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotWriteableException e) {
    }
    try {
        m2.writeInt(myInt);
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotWriteableException e) {
    }
    try {
        m2.writeLong(myLong);
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotWriteableException e) {
    }
    try {
        m2.writeFloat(myFloat);
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotWriteableException e) {
    }
    try {
        m2.writeDouble(myDouble);
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotWriteableException e) {
    }
    try {
        m2.writeBytes(myBytes);
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotWriteableException e) {
    }
    try {
        m2.writeObject(myString);
        ProxyAssertSupport.fail();
    } catch (javax.jms.MessageNotWriteableException e) {
    }
    m2.reset();
    // check we go back to the beginning
    ProxyAssertSupport.assertEquals(myBool, m2.readBoolean());
    ProxyAssertSupport.assertEquals(myByte, m2.readByte());
    ProxyAssertSupport.assertEquals(myShort, m2.readShort());
    ProxyAssertSupport.assertEquals(myChar, m2.readChar());
    ProxyAssertSupport.assertEquals(myInt, m2.readInt());
    ProxyAssertSupport.assertEquals(myLong, m2.readLong());
    ProxyAssertSupport.assertEquals(myFloat, m2.readFloat(), 0);
    ProxyAssertSupport.assertEquals(myDouble, m2.readDouble(), 0);
    ProxyAssertSupport.assertEquals(myString, m2.readString());
    m2.clearBody();
    try {
        // Should now be write only
        m2.readBoolean();
        ProxyAssertSupport.fail();
    } catch (MessageNotReadableException e) {
    }
    m2.writeBoolean(myBool);
    m2.reset();
    ProxyAssertSupport.assertEquals(myBool, m2.readBoolean());
    try {
        m2.readBoolean();
        ProxyAssertSupport.fail();
    } catch (MessageEOFException e) {
    }
    // Test that changing the received message doesn't affect the sent message
    m.reset();
    ProxyAssertSupport.assertEquals(myBool, m.readBoolean());
    ProxyAssertSupport.assertEquals(myByte, m.readByte());
    ProxyAssertSupport.assertEquals(myShort, m.readShort());
    ProxyAssertSupport.assertEquals(myChar, m.readChar());
    ProxyAssertSupport.assertEquals(myInt, m.readInt());
    ProxyAssertSupport.assertEquals(myLong, m.readLong());
    ProxyAssertSupport.assertEquals(myFloat, m.readFloat(), 0);
    ProxyAssertSupport.assertEquals(myDouble, m.readDouble(), 0);
    ProxyAssertSupport.assertEquals(myString, m.readString());
    // Should be diffent object instances after sending *even* if in same JVM
    ProxyAssertSupport.assertFalse(m == m2);
}
Also used : MessageEOFException(javax.jms.MessageEOFException) MessageNotWriteableException(javax.jms.MessageNotWriteableException) MessageNotReadableException(javax.jms.MessageNotReadableException) MessageFormatException(javax.jms.MessageFormatException) MessageNotReadableException(javax.jms.MessageNotReadableException) StreamMessage(javax.jms.StreamMessage) Test(org.junit.Test)

Example 4 with MessageEOFException

use of javax.jms.MessageEOFException in project activemq-artemis by apache.

the class SimpleJMSStreamMessage method readLong.

@Override
public long readLong() throws JMSException {
    if (bodyWriteOnly) {
        throw new MessageNotReadableException("The message body is writeonly");
    }
    try {
        Object value = content.get(position);
        offset = 0;
        if (value == null) {
            throw new NullPointerException("Value is null");
        } else if (value instanceof Byte) {
            position++;
            return ((Byte) value).longValue();
        } else if (value instanceof Short) {
            position++;
            return ((Short) value).longValue();
        } else if (value instanceof Integer) {
            position++;
            return ((Integer) value).longValue();
        } else if (value instanceof Long) {
            position++;
            return ((Long) value).longValue();
        } else if (value instanceof String) {
            long result = Long.parseLong((String) value);
            position++;
            return result;
        } else {
            throw new MessageFormatException("Invalid conversion");
        }
    } catch (IndexOutOfBoundsException e) {
        throw new MessageEOFException("");
    }
}
Also used : MessageFormatException(javax.jms.MessageFormatException) MessageEOFException(javax.jms.MessageEOFException) MessageNotReadableException(javax.jms.MessageNotReadableException)

Example 5 with MessageEOFException

use of javax.jms.MessageEOFException in project activemq-artemis by apache.

the class SimpleJMSStreamMessage method readChar.

@Override
public char readChar() throws JMSException {
    if (bodyWriteOnly) {
        throw new MessageNotReadableException("The message body is writeonly");
    }
    try {
        Object value = content.get(position);
        offset = 0;
        if (value == null) {
            throw new NullPointerException("Value is null");
        } else if (value instanceof Character) {
            position++;
            return ((Character) value).charValue();
        } else {
            throw new MessageFormatException("Invalid conversion");
        }
    } catch (IndexOutOfBoundsException e) {
        throw new MessageEOFException("");
    }
}
Also used : MessageFormatException(javax.jms.MessageFormatException) MessageEOFException(javax.jms.MessageEOFException) MessageNotReadableException(javax.jms.MessageNotReadableException)

Aggregations

MessageEOFException (javax.jms.MessageEOFException)35 MessageNotReadableException (javax.jms.MessageNotReadableException)21 MessageFormatException (javax.jms.MessageFormatException)16 MessageConsumer (javax.jms.MessageConsumer)7 MessageProducer (javax.jms.MessageProducer)7 Session (javax.jms.Session)6 StreamMessage (javax.jms.StreamMessage)6 Test (org.junit.Test)6 BytesMessage (javax.jms.BytesMessage)5 JMSException (javax.jms.JMSException)4 MessageNotWriteableException (javax.jms.MessageNotWriteableException)4 ArrayList (java.util.ArrayList)3 RMQJMSException (com.rabbitmq.jms.util.RMQJMSException)2 EOFException (java.io.EOFException)2 HashMap (java.util.HashMap)2 Connection (javax.jms.Connection)2 MapMessage (javax.jms.MapMessage)2 Message (javax.jms.Message)2 Queue (javax.jms.Queue)2 StreamMessageUtil.streamReadInteger (org.apache.activemq.artemis.reader.StreamMessageUtil.streamReadInteger)2