java.lang.IndexOutOfBoundsException when using a stomp client
ericrrobinson Jul 13, 2012 12:13 PMI am getting the following stack trace from hornetq when running in JBoss 7.1.1
11:49:10,133 WARN [org.hornetq.core.server.impl.QueueImpl] (Old I/O server worker (parentId: 222337051, [id: 0x0d40981b, /0.0.0.0:5445])) removing consumer which did not handle a message, consumer=or
g.hornetq.core.server.impl.ServerConsumerImpl@605c90b4, message=Reference[1323]:RELIABLE:ServerMessage[messageID=1323,priority=4, bodySize=210,expiration=0, durable=true, address=jms.topic.testTopic2,
properties=TypedProperties[null]]@1713639557: java.lang.IndexOutOfBoundsException
at org.jboss.netty.buffer.AbstractChannelBuffer.setIndex(AbstractChannelBuffer.java:67) [netty-3.2.6.Final.jar:]
at org.hornetq.core.buffers.impl.ChannelBufferWrapper.setIndex(ChannelBufferWrapper.java:497) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.message.impl.MessageImpl.forceCopy(MessageImpl.java:960) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.message.impl.MessageImpl.encodeToBuffer(MessageImpl.java:891) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.message.impl.MessageImpl.getEncodedBuffer(MessageImpl.java:486) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.protocol.core.impl.wireformat.SessionReceiveMessage.encode(SessionReceiveMessage.java:73) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.protocol.core.impl.ChannelImpl.send(ChannelImpl.java:183) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.protocol.core.impl.ChannelImpl.sendBatched(ChannelImpl.java:162) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.protocol.core.impl.CoreSessionCallback.sendMessage(CoreSessionCallback.java:76) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.server.impl.ServerConsumerImpl.deliverStandardMessage(ServerConsumerImpl.java:798) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.server.impl.ServerConsumerImpl.handle(ServerConsumerImpl.java:313) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.server.impl.QueueImpl.handle(QueueImpl.java:2195) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.server.impl.QueueImpl.deliverDirect(QueueImpl.java:2140) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.server.impl.QueueImpl.addTail(QueueImpl.java:450) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.postoffice.impl.PostOfficeImpl.addReferences(PostOfficeImpl.java:1255) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.postoffice.impl.PostOfficeImpl.access$200(PostOfficeImpl.java:79) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.postoffice.impl.PostOfficeImpl$1.done(PostOfficeImpl.java:1077) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.persistence.impl.journal.OperationContextImpl.executeOnCompletion(OperationContextImpl.java:188) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.persistence.impl.journal.JournalStorageManager.afterCompleteOperations(JournalStorageManager.java:447) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.postoffice.impl.PostOfficeImpl.processRoute(PostOfficeImpl.java:1066) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.postoffice.impl.PostOfficeImpl.route(PostOfficeImpl.java:678) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.postoffice.impl.PostOfficeImpl.route(PostOfficeImpl.java:580) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.server.impl.ServerSessionImpl.doSend(ServerSessionImpl.java:1437) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.server.impl.ServerSessionImpl.send(ServerSessionImpl.java:1164) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.protocol.core.ServerSessionPacketHandler.handlePacket(ServerSessionPacketHandler.java:441) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.protocol.core.impl.ChannelImpl.handlePacket(ChannelImpl.java:508) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.protocol.core.impl.RemotingConnectionImpl.doBufferReceived(RemotingConnectionImpl.java:556) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.protocol.core.impl.RemotingConnectionImpl.bufferReceived(RemotingConnectionImpl.java:517) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.remoting.server.impl.RemotingServiceImpl$DelegatingBufferHandler.bufferReceived(RemotingServiceImpl.java:533) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.remoting.impl.netty.HornetQChannelHandler.messageReceived(HornetQChannelHandler.java:73) [hornetq-core-2.2.13.Final.jar:]
at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:100) [netty-3.2.6.Final.jar:]
at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:372) [netty-3.2.6.Final.jar:]
at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:534) [netty-3.2.6.Final.jar:]
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:287) [netty-3.2.6.Final.jar:]
at org.hornetq.core.remoting.impl.netty.HornetQFrameDecoder2.decode(HornetQFrameDecoder2.java:169) [hornetq-core-2.2.13.Final.jar:]
at org.hornetq.core.remoting.impl.netty.HornetQFrameDecoder2.messageReceived(HornetQFrameDecoder2.java:134) [hornetq-core-2.2.13.Final.jar:]
at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:80) [netty-3.2.6.Final.jar:]
at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:372) [netty-3.2.6.Final.jar:]
at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:367) [netty-3.2.6.Final.jar:]
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274) [netty-3.2.6.Final.jar:]
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261) [netty-3.2.6.Final.jar:]
at org.jboss.netty.channel.socket.oio.OioWorker.run(OioWorker.java:100) [netty-3.2.6.Final.jar:]
at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) [netty-3.2.6.Final.jar:]
at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44) [netty-3.2.6.Final.jar:]
at org.jboss.netty.util.VirtualExecutorService$ChildExecutorRunnable.run(VirtualExecutorService.java:181) [netty-3.2.6.Final.jar:]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_03]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_03]
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_03]
I have attached my standalone.xml as well as example code that can reproduce the issue.
You need to start the StompClient, MyProducer, then the MyMessageConsumer in that order and one right after the other.
I have changed the forceCopy method in MessageImpl.java to the following to prevent the exception, but not sure if it is just hiding the larger issue.
private void forceCopy()
{
// Must copy buffer before sending it
buffer = buffer.copy(0, buffer.capacity());
if (endOfBodyPosition != -1)
{
buffer.setIndex(0, endOfBodyPosition);
}
if (bodyBuffer != null)
{
bodyBuffer.setBuffer(buffer);
}
bufferUsed = false;
}
-
test.zip 2.8 MB