Marshaling NULL BytesMessage in StompWireFormat throws exception
----------------------------------------------------------------

                 Key: AMQNET-53
                 URL: https://issues.apache.org/activemq/browse/AMQNET-53
             Project: ActiveMQ .Net
          Issue Type: Bug
          Components: Stomp
         Environment: Windows XP SP2, .NET 2.0
            Reporter: Jim Gomes
            Assignee: James Strachan


When marshalling a BytesMessage that has a NULL message body (only properties 
are set on the message) an exception is thrown within the WriteMessage() 
function.  Following is a replacement version that will work correctly.  A NULL 
pointer check is added to the content of the message.  This only occurs with 
the STOMP protocol.  The OpenWire implementation correctly handles the NULL 
message body in a BytesMessage.

{code:java|title=StompWireFormat.cs Replacement for 
WriteMessage()|borderStyle=solid}
protected virtual void WriteMessage(ActiveMQMessage command, StompFrameStream 
ss)
{
        ss.WriteCommand(command, "SEND");
        ss.WriteHeader("destination", StompHelper.ToStomp(command.Destination));
        if (command.ReplyTo != null)
                ss.WriteHeader("reply-to", 
StompHelper.ToStomp(command.ReplyTo));
        if (command.CorrelationId != null )
                ss.WriteHeader("correlation-id", command.CorrelationId);
        if (command.Expiration != 0)
                ss.WriteHeader("expires", command.Expiration);
        if (command.Priority != 4)
                ss.WriteHeader("priority", command.Priority);
        if (command.Type != null)
                ss.WriteHeader("type", command.Type);            
        if (command.TransactionId!=null)
                ss.WriteHeader("transaction", 
StompHelper.ToStomp(command.TransactionId));
                    
        ss.WriteHeader("persistent", command.Persistent);
                        
        // lets force the content to be marshalled
                        
        command.BeforeMarshall(null);
        if (command is ActiveMQTextMessage)
        {
                ActiveMQTextMessage textMessage = command as 
ActiveMQTextMessage;
                ss.Content = encoding.GetBytes(textMessage.Text);
        }
        else
        {
                ss.Content = command.Content;
                if (null != command.Content)
                {
                        ss.ContentLength = command.Content.Length;
                }
                else
                {
                        ss.ContentLength = 0;
                }
        }
        
        IPrimitiveMap map = command.Properties;
        foreach (string key in map.Keys)
        {
                ss.WriteHeader(key, map[key]);
        }
        ss.Flush();
}
{code}


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to