You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Timothy Bish (JIRA)" <ji...@apache.org> on 2015/03/03 22:19:05 UTC

[jira] [Resolved] (AMQ-5632) MapMessage.getBytes crashes with NPE if no value present

     [ https://issues.apache.org/jira/browse/AMQ-5632?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Timothy Bish resolved AMQ-5632.
-------------------------------
       Resolution: Fixed
    Fix Version/s: 5.12.0
         Assignee: Timothy Bish

Added check for null and return null if so.  

> MapMessage.getBytes crashes with NPE if no value present
> --------------------------------------------------------
>
>                 Key: AMQ-5632
>                 URL: https://issues.apache.org/jira/browse/AMQ-5632
>             Project: ActiveMQ
>          Issue Type: Bug
>            Reporter: Endre Stølsvik
>            Assignee: Timothy Bish
>             Fix For: 5.12.0
>
>
> Compare to AMQ-5628 and AMQ-5629
> Read up on http://docs.oracle.com/javaee/1.4/api/javax/jms/MapMessage.html
> Notice the wording "if there is no item by this name, a null value is returned."
> ActiveMqMapMessage, line ~494:
> {code}
>     /**
>      * Returns the byte array value with the specified name.
>      *
>      * @param name the name of the byte array
>      * @return a copy of the byte array value with the specified name; if there
>      *         is no item by this name, a null value is returned.
>      * @throws JMSException if the JMS provider fails to read the message due to
>      *                 some internal error.
>      * @throws MessageFormatException if this type conversion is invalid.
>      */
>     @Override
>     public byte[] getBytes(String name) throws JMSException {
>         initializeReading();
>         Object value = map.get(name);
>         if (value instanceof byte[]) {
>             return (byte[])value;
>         } else {
>             throw new MessageFormatException(" cannot read a byte[] from " + value.getClass().getName());
>         }
>     }
> {code}
> Notice how the "else"-block will kick in on null value, whereby we get the "value.getClass()" executed when inside the constructor argument creation of the wrongly thrown MessageFormatException, resulting in NPE.
> Instead, a code block like every other getter has should be employed, here from getString right above:
> {code}
>     public String getString(String name) throws JMSException {
>         initializeReading();
>         Object value = map.get(name);
>         if (value == null) {
>             return null;
>         }
>         if (value instanceof byte[]) {
>             throw new MessageFormatException("Use getBytes to read a byte array");
>         } else {
>             return value.toString();
>         }
>     }
> {code}
> Notice the null-check with null-return.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)