Issue Details (XML | Word | Printable)

Key: AMQ-2287
Type: Bug Bug
Status: Open Open
Priority: Major Major
Assignee: Unassigned
Reporter: Torsten Mielke
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
ActiveMQ

ActiveMQMessage.setXXXProperty() method needs to check if property name is a valid Java identifier.

Created: 12/Jun/09 06:44 AM   Updated: 12/Jun/09 06:54 AM
Return to search
Component/s: Broker
Affects Version/s: 5.2.0
Fix Version/s: None

Time Tracking:
Not Specified


 Description  « Hide
currently the AMQ implementation of javax.jms.Message.setXXXProperty() does not check if the property name is a valid Java identifier.
This however is required according to the JMS spec.

From http://java.sun.com/javaee/6/docs/api/javax/jms/Message.html:

Property names must obey the rules for a message selector identifier.
...
Identifiers:

  • An identifier is an unlimited-length sequence of letters and digits, the first of which must be a letter. A letter is any character for which the method Character.isJavaLetter returns true. This includes '_' and '$'. A letter or digit is any character for which the method Character.isJavaLetterOrDigit returns true.
  • Identifiers cannot be the names NULL, TRUE, and FALSE.
  • Identifiers cannot be NOT, AND, OR, BETWEEN, LIKE, IN, IS, or ESCAPE.
  • Identifiers are either header field references or property references. The type of a property value in a message selector corresponds to the type used to set the property. If a property that does not exist in a message is referenced, its value is NULL.
  • The conversions that apply to the get methods for properties do not apply when a property is used in a message selector expression. For example, suppose you set a property as a string value, as in the following:

myMessage.setStringProperty("NumberOfOrders", "2");

The following expression in a message selector would evaluate to false, because a string cannot be used in an arithmetic expression:

"NumberOfOrders > 1"

  • Identifiers are case-sensitive.
  • Message header field references are restricted to JMSDeliveryMode, JMSPriority, JMSMessageID, JMSTimestamp, JMSCorrelationID, and JMSType. JMSMessageID, JMSCorrelationID, and JMSType values may be null and if so are treated as a NULL value.
  • Any name beginning with 'JMSX' is a JMS defined property name.
  • Any name beginning with 'JMS_' is a provider-specific property name.
  • Any name that does not begin with 'JMS' is an application-specific property name.

Checks for this need to be added to all ActiveMQMessage.setXXXProperty() methods.



 All   Comments   Work Log   Change History   Subversion Commits   FishEye   Crucible      Sort Order: Ascending order - Click to sort in descending order
Torsten Mielke added a comment - 12/Jun/09 06:54 AM
Could use the following helper method:
public boolean isJavaIdentifier() {
      int n = length();
      if (n==0) return false;
      if (!Character.isJavaIdentifierStart(charAt(0)))
          return false;
      for (int i = 1; i < n; i++)
          if (!Character.isJavaIdentifierPart(charAt(i)))
              return false;
      return true;
    }