in client/src/main/java/org/apache/qpid/client/message/JMSHeaderAdapter.java [407:474]
protected void checkIdentifierFormat(CharSequence propertyName)
{
// JMS requirements 3.5.1 Property Names
// Identifiers:
// - An identifier is an unlimited-length character sequence that must begin
// with a Java identifier start character; all following characters must be Java
// identifier part characters. An identifier start character is any character for
// which the method Character.isJavaIdentifierStart returns true. This includes
// '_' and '$'. An identifier part character is any character for which the
// method Character.isJavaIdentifierPart returns true.
// - Identifiers cannot be the names NULL, TRUE, or 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 semantics of evaluating NULL values
// in a selector are described in Section 3.8.1.2, Null Values.
// 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.
if (STRICT_JMS)
{
// JMS start character
if (!(Character.isJavaIdentifierStart(propertyName.charAt(0))))
{
throw new IllegalArgumentException("Identifier '" + propertyName + "' does not start with a valid JMS identifier start character");
}
// JMS part character
int length = propertyName.length();
for (int c = 1; c < length; c++)
{
if (!(Character.isJavaIdentifierPart(propertyName.charAt(c))))
{
throw new IllegalArgumentException("Identifier '" + propertyName + "' contains an invalid JMS identifier character");
}
}
// JMS invalid names
if ((propertyName.equals("NULL")
|| propertyName.equals("TRUE")
|| propertyName.equals("FALSE")
|| propertyName.equals("NOT")
|| propertyName.equals("AND")
|| propertyName.equals("OR")
|| propertyName.equals("BETWEEN")
|| propertyName.equals("LIKE")
|| propertyName.equals("IN")
|| propertyName.equals("IS")
|| propertyName.equals("ESCAPE")))
{
throw new IllegalArgumentException("Identifier '" + propertyName + "' is not allowed in JMS");
}
}
}