[jboss-jira] [JBoss JIRA] Created: (JBMESSAGING-1101) Failure to deserialize BytesMessage contents

Travis Brown (JIRA) jira-events at lists.jboss.org
Wed Oct 10 23:59:03 EDT 2007


Failure to deserialize BytesMessage contents
--------------------------------------------

                 Key: JBMESSAGING-1101
                 URL: http://jira.jboss.com/jira/browse/JBMESSAGING-1101
             Project: JBoss Messaging
          Issue Type: Bug
          Components: Messaging Core
    Affects Versions: 1.4.0.GA
         Environment: jboss-4.2.1.GA, jboss-remoting 2.2.2.SP1-brew, 7 node cluster
            Reporter: Travis Brown
         Assigned To: Tim Fox


BytesMessage consumers often receive the following error:

Client side:
2007-10-09 06:54:12,076 [WorkerThread#1[10.7.68.52:2209]] ERROR ServerThread  - Worker thread initialization failure
java.io.EOFException
        at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:530)
        at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:373)
        at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:166)

Server side:
2007-10-09 06:54:12,071 ERROR [org.jboss.jms.wireformat.JMSWireFormat] Failed to write packet
java.lang.RuntimeException: Unknown type: 76
        at org.jboss.messaging.util.StreamUtils.readObject(StreamUtils.java:159)
        at org.jboss.messaging.core.impl.message.MessageSupport.readPayload(MessageSupport.java:435)
        at org.jboss.messaging.core.impl.message.MessageSupport.getPayload(MessageSupport.java:264)
        at org.jboss.jms.message.JBossBytesMessage.getPayloadAsByteArray(JBossBytesMessage.java:592)
        at org.jboss.messaging.core.impl.message.MessageSupport.write(MessageSupport.java:369)
        at org.jboss.jms.message.JBossMessage.write(JBossMessage.java:1048)
        at org.jboss.jms.wireformat.ClientDelivery.write(ClientDelivery.java:91)
        at org.jboss.jms.wireformat.JMSWireFormat.write(JMSWireFormat.java:237)
        at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.versionedWrite(MicroSocketClientInvoker.java:983)
        at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:559)
        at org.jboss.remoting.transport.bisocket.BisocketClientInvoker.transport(BisocketClientInvoker.java:413)
        at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)
        at org.jboss.remoting.Client.invoke(Client.java:1634)
        at org.jboss.remoting.Client.invoke(Client.java:548)
        at org.jboss.remoting.Client.invokeOneway(Client.java:598)
        at org.jboss.remoting.callback.ServerInvokerCallbackHandler.handleCallback(ServerInvokerCallbackHandler.java:815)
        at org.jboss.remoting.callback.ServerInvokerCallbackHandler.handleCallbackOneway(ServerInvokerCallbackHandler.java:686)
        at org.jboss.jms.server.endpoint.ServerSessionEndpoint.performDelivery(ServerSessionEndpoint.java:1494)
        at org.jboss.jms.server.endpoint.ServerSessionEndpoint.replicateDeliveryResponseReceived(ServerSessionEndpoint.java:1094)
        at org.jboss.messaging.core.impl.postoffice.MessagingPostOffice.handleReplicateDeliveryAck(MessagingPostOffice.java:1274)
        at org.jboss.messaging.core.impl.postoffice.ReplicateDeliveryAckMessage.execute(ReplicateDeliveryAckMessage.java:54)
        at org.jboss.messaging.core.impl.postoffice.GroupMember$DataReceiver.receive(GroupMember.java:582)
        at org.jgroups.JChannel.up(JChannel.java:1102)
        at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:382)
        at org.jgroups.stack.ProtocolStack.receiveUpEvent(ProtocolStack.java:398)
        at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
        at org.jgroups.protocols.FRAG2.up(FRAG2.java:197)
        at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
        at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
        at org.jgroups.protocols.FC.up(FC.java:422)
        at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
        at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
        at org.jgroups.protocols.pbcast.GMS.up(GMS.java:768)
        at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
        at org.jgroups.protocols.pbcast.GMS.receiveUpEvent(GMS.java:788)
        at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
        at org.jgroups.protocols.pbcast.STABLE.up(STABLE.java:258)
        at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
        at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
        at org.jgroups.protocols.UNICAST.handleDataReceived(UNICAST.java:516)
        at org.jgroups.protocols.UNICAST.up(UNICAST.java:242)
        at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
        at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
        at org.jgroups.protocols.pbcast.NAKACK.up(NAKACK.java:569)
        at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
        at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
        at org.jgroups.protocols.VERIFY_SUSPECT.up(VERIFY_SUSPECT.java:170)
        at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
        at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
        at org.jgroups.protocols.FD.up(FD.java:300)
        at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
        at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
        at org.jgroups.protocols.FD_SOCK.up(FD_SOCK.java:301)
        at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
        at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
        at org.jgroups.protocols.MERGE2.up(MERGE2.java:162)
        at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
        at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
        at org.jgroups.protocols.Discovery.up(Discovery.java:225)
        at org.jgroups.stack.Protocol.receiveUpEvent(Protocol.java:470)
        at org.jgroups.stack.Protocol.passUp(Protocol.java:520)
        at org.jgroups.protocols.TP.handleIncomingMessage(TP.java:908)
        at org.jgroups.protocols.TP.handleIncomingPacket(TP.java:850)
        at org.jgroups.protocols.TP.access$400(TP.java:45)
        at org.jgroups.protocols.TP$IncomingPacketHandler.run(TP.java:1296)
        at java.lang.Thread.run(Thread.java:595)


In MessageSupport.getPayload(MessageSupport.java:264), if payload == null, it attempts to deserialize the byte array, which in this case is the content of the BytesMessage. StreamUtils.readObject(StreamUtils.java:159) will report "Unknown type" followed by the value of the first byte of the BytesMessage payload. (This could be misinterpreted during deserialization if the first byte happens to match a constant.)

I am not sure how to recreate the test case yet (payload is perhaps typically non-null), but it happens frequently in our environment, where the BytesMessage is 95% of the traffic.


This fix resolves the issue in our environment:

diff -r org/jboss/jms/message/JBossBytesMessage.java
592c592
<       return (byte[])getPayload();
---
>       return (byte[])getBytesMessagePayload();

diff -r org/jboss/messaging/core/impl/message/MessageSupport.java
281a282,303
> 	public synchronized Object getBytesMessagePayload()
> 	{
> 		if (payload != null)
> 		{
> 			return payload;
> 		}
> 		else if (payloadAsByteArray != null)
> 		{
> 			payload = payloadAsByteArray;
> 			payloadAsByteArray = null;
>   	  return payload;
> 		}
> 		else
> 		{
> 			return null;
> 		}
> 	}
> 




-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list