diff options
author | Robert Godfrey <rgodfrey@apache.org> | 2008-04-16 09:24:04 +0000 |
---|---|---|
committer | Robert Godfrey <rgodfrey@apache.org> | 2008-04-16 09:24:04 +0000 |
commit | e34b410d62899c362565bc7b3a0039604da7841d (patch) | |
tree | a562a6758e746156a0ae81694f751f3a1ade83d7 | |
parent | 1b8730c44f1158cf13706533ea065877e9189a3c (diff) | |
download | qpid-python-e34b410d62899c362565bc7b3a0039604da7841d.tar.gz |
QPID-922 : Selectors on header properties should not convert AMQShortStrings to Strings on every evaluation
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/M2.1@648637 13f79535-47bb-0310-9956-ffa450edef68
4 files changed, 58 insertions, 9 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/filter/ComparisonExpression.java b/java/broker/src/main/java/org/apache/qpid/server/filter/ComparisonExpression.java index 72a9ef7969..44281a3aae 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/filter/ComparisonExpression.java +++ b/java/broker/src/main/java/org/apache/qpid/server/filter/ComparisonExpression.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.regex.Pattern; import org.apache.qpid.AMQException; +import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.server.queue.AMQMessage; /** @@ -147,6 +148,11 @@ public abstract class ComparisonExpression extends BinaryExpression implements B return null; } + if(rv instanceof AMQShortString) + { + rv = rv.toString(); + } + if (!(rv instanceof String)) { return @@ -448,7 +454,40 @@ public abstract class ComparisonExpression extends BinaryExpression implements B // try to convert up to allow the comparison. if (lc != rc) { - if (lc == Byte.class) + if(lc == AMQShortString.class) + { + if(rc == String.class) + { + rv = new AMQShortString((String) rv); + + if(right instanceof ConstantExpression) + { + ((ConstantExpression)right).setValue(rv); + } + } + else + { + return Boolean.FALSE; + } + } + else if(lc == String.class) + { + if(rc == AMQShortString.class) + { + lv = new AMQShortString((String) lv); + + if(left instanceof ConstantExpression) + { + ((ConstantExpression)left).setValue(lv); + } + } + else + { + return Boolean.FALSE; + } + + } + else if (lc == Byte.class) { if (rc == Short.class) { diff --git a/java/broker/src/main/java/org/apache/qpid/server/filter/ConstantExpression.java b/java/broker/src/main/java/org/apache/qpid/server/filter/ConstantExpression.java index 0e729cc521..73c4c66ad7 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/filter/ConstantExpression.java +++ b/java/broker/src/main/java/org/apache/qpid/server/filter/ConstantExpression.java @@ -26,6 +26,7 @@ package org.apache.qpid.server.filter; import java.math.BigDecimal; import org.apache.qpid.AMQException; +import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.server.queue.AMQMessage; /** @@ -130,6 +131,12 @@ public class ConstantExpression implements Expression return value; } + public void setValue(final Object value) + { + this.value = value; + } + + /** * @see java.lang.Object#toString() */ diff --git a/java/broker/src/main/java/org/apache/qpid/server/filter/JMSSelectorFilter.java b/java/broker/src/main/java/org/apache/qpid/server/filter/JMSSelectorFilter.java index 32f58ed666..48b6602bda 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/filter/JMSSelectorFilter.java +++ b/java/broker/src/main/java/org/apache/qpid/server/filter/JMSSelectorFilter.java @@ -50,7 +50,10 @@ public class JMSSelectorFilter implements MessageFilter try { boolean match = _matcher.matches(message); - _logger.info(message + " match(" + match + ") selector(" + System.identityHashCode(_selector) + "):" + _selector); + if(_logger.isDebugEnabled()) + { + _logger.debug(message + " match(" + match + ") selector(" + System.identityHashCode(_selector) + "):" + _selector); + } return match; } catch (AMQException e) diff --git a/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java b/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java index 5ab360ca19..e5e9acf9bb 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java +++ b/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java @@ -67,7 +67,7 @@ public class PropertyExpression implements Expression message.getContentHeaderBody().properties; AMQShortString replyTo = _properties.getReplyTo(); - return (replyTo == null) ? null : replyTo.toString(); + return (replyTo == null) ? null : replyTo; } catch (AMQException e) { @@ -91,7 +91,7 @@ public class PropertyExpression implements Expression message.getContentHeaderBody().properties; AMQShortString type = _properties.getType(); - return (type == null) ? null : type.toString(); + return (type == null) ? null : type; } catch (AMQException e) { @@ -206,7 +206,7 @@ public class PropertyExpression implements Expression message.getContentHeaderBody().properties; AMQShortString correlationId = _properties.getCorrelationId(); - return (correlationId == null) ? null : correlationId.toString(); + return (correlationId == null) ? null : correlationId; } catch (AMQException e) { @@ -251,12 +251,12 @@ public class PropertyExpression implements Expression } - private final String name; + private final AMQShortString name; private final Expression jmsPropertyExpression; public PropertyExpression(String name) { - this.name = name; + this.name = new AMQShortString(name); jmsPropertyExpression = JMS_PROPERTY_EXPRESSIONS.get(name); } @@ -283,7 +283,7 @@ public class PropertyExpression implements Expression } } - public String getName() + public AMQShortString getName() { return name; } @@ -293,7 +293,7 @@ public class PropertyExpression implements Expression */ public String toString() { - return name; + return name.toString(); } /** |