You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by StefanL <st...@yahoo.se> on 2007/09/04 16:05:22 UTC
Empty message selector throws InvalidSelectorException
When I'm trying to apply the
https://issues.apache.org/activemq/browse/AMQNET-44 patch in nms I get an
exception in the broker since I send in an empty/blank selector.
According to jms doc I find this should be ok and null or empty shall be
treated as no selector.
The stack trace I get is:
Thread [ActiveMQ Transport: tcp:///127.0.0.1:2329] (Suspended (exception
InvalidSelectorException))
SelectorParser.parse(String) line: 47
AbstractSubscription.parseSelector(ConsumerInfo) line: 66
TopicSubscription(AbstractSubscription).<init>(Broker, ConnectionContext,
ConsumerInfo) line: 60
TopicSubscription.<init>(Broker, ConnectionContext, ConsumerInfo,
UsageManager) line: 70
ManagedTopicRegion(TopicRegion).createSubscription(ConnectionContext,
ConsumerInfo) line: 231
ManagedTopicRegion.createSubscription(ConnectionContext, ConsumerInfo)
line: 44
ManagedTopicRegion(AbstractRegion).addConsumer(ConnectionContext,
ConsumerInfo) line: 201
ManagedTopicRegion(TopicRegion).addConsumer(ConnectionContext,
ConsumerInfo) line: 110
ManagedRegionBroker(RegionBroker).addConsumer(ConnectionContext,
ConsumerInfo) line: 340
TransactionBroker(BrokerFilter).addConsumer(ConnectionContext,
ConsumerInfo) line: 86
AdvisoryBroker.addConsumer(ConnectionContext, ConsumerInfo) line: 78
CompositeDestinationBroker(BrokerFilter).addConsumer(ConnectionContext,
ConsumerInfo) line: 86
BrokerService$2(MutableBrokerFilter).addConsumer(ConnectionContext,
ConsumerInfo) line: 96
ManagedTransportConnection(TransportConnection).processAddConsumer(ConsumerInfo)
line: 586
ConsumerInfo.visit(CommandVisitor) line: 313
ManagedTransportConnection(TransportConnection).service(Command) line: 294
TransportConnection$1.onCommand(Object) line: 185
MutexTransport(TransportFilter).onCommand(Object) line: 65
WireFormatNegotiator.onCommand(Object) line: 133
InactivityMonitor.onCommand(Object) line: 122
TcpTransport(TransportSupport).doConsume(Object) line: 84
TcpTransport.run() line: 137
Thread.run() line: 619
And this test case I've written on the selector also gets the error
org.apache.activemq.selector
public void testEmptySelector() throws Exception {
Message message = createMessage();
assertSelector(message, "", true);
}
Is this a bug or am I doing something wrong? (4.1.1 release)
/Stefan
--
View this message in context: http://www.nabble.com/Empty-message-selector-throws-InvalidSelectorException-tf4377911s2354.html#a12478790
Sent from the ActiveMQ - Dev mailing list archive at Nabble.com.
Re: Empty message selector throws InvalidSelectorException
Posted by StefanL <st...@yahoo.se>.
I'll answer this myself, sorry for assuming that this was a problem in the
amq core when it's in nms.
In java an empty/blank selector is not passed on to the jms broker. See the
ctor in ActiveMQMessageConsumer.java which has this code:
if (selector != null && selector.trim().length() != 0) {
// Validate that the selector
new SelectorParser().parse(selector);
this.info.setSelector(selector);
} else {
this.info.setSelector(null);
}
I suggest the following change to ActiveMQ.Session.CreateConsumerInfo
(session.cs),
- answer.Selector = selector;
+ answer.Selector = String.IsNullOrEmpty(selector) ? null : selector;
Which will set the selector to null if it's empty/blank.
I'll try to update the existing issue AMQNET-44 with this information.
Regards
Stefan
StefanL wrote:
>
> When I'm trying to apply the
> https://issues.apache.org/activemq/browse/AMQNET-44 patch in nms I get an
> exception in the broker since I send in an empty/blank selector.
>
> According to jms doc I find this should be ok and null or empty shall be
> treated as no selector.
>
> The stack trace I get is:
> Thread [ActiveMQ Transport: tcp:///127.0.0.1:2329] (Suspended (exception
> InvalidSelectorException))
> SelectorParser.parse(String) line: 47
> AbstractSubscription.parseSelector(ConsumerInfo) line: 66
> TopicSubscription(AbstractSubscription).<init>(Broker, ConnectionContext,
> ConsumerInfo) line: 60
> TopicSubscription.<init>(Broker, ConnectionContext, ConsumerInfo,
> UsageManager) line: 70
> ManagedTopicRegion(TopicRegion).createSubscription(ConnectionContext,
> ConsumerInfo) line: 231
> ManagedTopicRegion.createSubscription(ConnectionContext, ConsumerInfo)
> line: 44
> ManagedTopicRegion(AbstractRegion).addConsumer(ConnectionContext,
> ConsumerInfo) line: 201
> ManagedTopicRegion(TopicRegion).addConsumer(ConnectionContext,
> ConsumerInfo) line: 110
> ManagedRegionBroker(RegionBroker).addConsumer(ConnectionContext,
> ConsumerInfo) line: 340
> TransactionBroker(BrokerFilter).addConsumer(ConnectionContext,
> ConsumerInfo) line: 86
> AdvisoryBroker.addConsumer(ConnectionContext, ConsumerInfo) line: 78
> CompositeDestinationBroker(BrokerFilter).addConsumer(ConnectionContext,
> ConsumerInfo) line: 86
> BrokerService$2(MutableBrokerFilter).addConsumer(ConnectionContext,
> ConsumerInfo) line: 96
>
> ManagedTransportConnection(TransportConnection).processAddConsumer(ConsumerInfo)
> line: 586
> ConsumerInfo.visit(CommandVisitor) line: 313
> ManagedTransportConnection(TransportConnection).service(Command) line:
> 294
> TransportConnection$1.onCommand(Object) line: 185
> MutexTransport(TransportFilter).onCommand(Object) line: 65
> WireFormatNegotiator.onCommand(Object) line: 133
> InactivityMonitor.onCommand(Object) line: 122
> TcpTransport(TransportSupport).doConsume(Object) line: 84
> TcpTransport.run() line: 137
> Thread.run() line: 619
>
> And this test case I've written on the selector also gets the error
>
> org.apache.activemq.selector
> public void testEmptySelector() throws Exception {
> Message message = createMessage();
> assertSelector(message, "", true);
> }
>
> Is this a bug or am I doing something wrong? (4.1.1 release)
> /Stefan
>
>
--
View this message in context: http://www.nabble.com/Empty-message-selector-throws-InvalidSelectorException-tf4377911s2354.html#a12495969
Sent from the ActiveMQ - Dev mailing list archive at Nabble.com.