stomp payload causes java.lang.NegativeArraySizeException
drkirwin Oct 14, 2010 9:25 PMFolks--
Working with 2.1.2.Final and the Stomp protocol (and with a checkout of trunk):
I've got a Scala app which is receiving messages (using Core) and a client (python) sending messages. When I attempt to read the message that gets delivered, I get the following:
[java] java.lang.NegativeArraySizeException
[java] at org.hornetq.core.buffers.impl.ChannelBufferWrapper.readSimpleStringInternal(ChannelBufferWrapper.java:83)
[java] at org.hornetq.core.buffers.impl.ChannelBufferWrapper.readStringInternal(ChannelBufferWrapper.java:112)
[java] at org.hornetq.core.buffers.impl.ChannelBufferWrapper.readString(ChannelBufferWrapper.java:90)
[java] at emme.lib.hornetq.HornetQ$Handler.onMessage(Hornet.scala:213)
[java] at org.hornetq.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:822)
[java] at org.hornetq.core.client.impl.ClientConsumerImpl.access$100(ClientConsumerImpl.java:46)
[java] at org.hornetq.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:940)
[java] at org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor$1.run(OrderedExecutorFactory.java:100)
[java] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
[java] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
[java] at java.lang.Thread.run(Thread.java:619)
[java] java.lang.NegativeArraySizeException
[java] at org.hornetq.core.buffers.impl.ChannelBufferWrapper.readSimpleStringInternal(ChannelBufferWrapper.java:83)
[java] at org.hornetq.core.buffers.impl.ChannelBufferWrapper.readStringInternal(ChannelBufferWrapper.java:112)
[java] at org.hornetq.core.buffers.impl.ChannelBufferWrapper.readString(ChannelBufferWrapper.java:90)
[java] at emme.lib.hornetq.HornetQ$Handler.onMessage(Hornet.scala:213)
[java] at org.hornetq.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:822)
[java] at org.hornetq.core.client.impl.ClientConsumerImpl.access$100(ClientConsumerImpl.java:46)
[java] at org.hornetq.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:940)
[java] at org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor$1.run(OrderedExecutorFactory.java:100)
[java] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
[java] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
[java] at java.lang.Thread.run(Thread.java:619)
I can get at the data doing something like:
private def mkString(buffer: HornetQBuffer): String =
new String(buffer.toByteBuffer().asCharBuffer().toString())
When I print out that string, I notice that the first few characters are negative numbers or some sort of prefix to the string itself. It's as if the object that gets passed in is in some sort of serialized format (with most of the format being the actual string). The first character of the string is clipped.
Here's some output from when I used the above charBuffer method to get the string, then printed out the first 10 characters by called toInt on each char in the string and printing it in hex:
[java] 2010-10-14 17:22:30,079 DEBUG hornetq.HornetQ$Handler - -- getting msg body
[java] 2010-10-14 17:22:30,081 DEBUG hornetq.HornetQ$Handler - 100
[java] 2010-10-14 17:22:30,081 DEBUG hornetq.HornetQ$Handler - 0
[java] 2010-10-14 17:22:30,082 DEBUG hornetq.HornetQ$Handler - 5431
[java] 2010-10-14 17:22:30,082 DEBUG hornetq.HornetQ$Handler - 32
[java] 2010-10-14 17:22:30,082 DEBUG hornetq.HornetQ$Handler - 33
[java] 2010-10-14 17:22:30,082 DEBUG hornetq.HornetQ$Handler - 34
[java] 2010-10-14 17:22:30,082 DEBUG hornetq.HornetQ$Handler - 35
[java] 2010-10-14 17:22:30,082 DEBUG hornetq.HornetQ$Handler - 36
[java] 2010-10-14 17:22:30,082 DEBUG hornetq.HornetQ$Handler - 39
[java] 2010-10-14 17:22:30,082 DEBUG hornetq.HornetQ$Handler - 38
[java] 2010-10-14 17:22:30,082 INFO hornetq.HornetQ$Handler - size of body 44
[java] 2010-10-14 17:22:30,082 INFO hornetq.HornetQ$Handler - -- creating properties map
[java] 2010-10-14 17:22:30,083 DEBUG hornetq.HornetQ$Handler - -- looping through props
[java] 2010-10-14 17:22:30,095 DEBUG hornetq.HornetQ$Handler - -- calling handler
[java] 2010-10-14 17:22:30,097 INFO actors.ScreenUpdateActor$ - --------------------------------
[java] 2010-10-14 17:22:30,097 INFO actors.ScreenUpdateActor$ - RECEIVE:
[java] 2010-10-14 17:22:30,097 INFO actors.ScreenUpdateActor$ - + body: [Ā吱2345698093480598345
[java] 092309482039842342
[java] ]
The original data sent was "1234...." etc. So you can see that the first "1" was stuck to the end of the 54 in the fourth line above.
This happens regardless of whether or not I'm using Python's stompy client, or just using telnet. Using telnet (or python), I'm running from a terminal with the following:
LANG=en_US.utf8
Regardless, that NegativeArraySizeException is worrying.
Any tips?
Keith
PS. With 2.2 trunk I was unable to get a telnet session working. Seemed to be unable to deal with me typing in CONNECT<ret>. Threw an exception.