I am using Apache Apollo -1.1 as my JMS broker.
Within that, I am trying to use a selector on a JMS Header, which contains colon in the value. The JMS header is as follows:
SYMBOL=USDGBP17MAYFUT::CDE
When I try to use the message selector
symbolSelector = "(SYMBOL='USDGBP17MAYFUT::CDE')"
OR
symbolSelector = "(SYMBOL LIKE 'USDGBP17MAYFUT!:!:CDE' ESCAPE '!')"
The correct message is not getting selected.
If I remove the colon from the symbol in the JMS header, and correspondingly in the symbolSelector, filtering works fine.
Please help me to use correct selector,as I need to have the symbol with a colon.
Update:
I tried the following as escape characters (based on Peter's inputs), but didn't work:
symbolSelector= "(SYMBOL LIKE 'USDINR17JUNFUT\\$:\\$:CDE_FO' ESCAPE '\\$')"
AND
symbolSelector= "(SYMBOL LIKE 'USDINR17JUNFUT\\!:\\!:CDE_FO' ESCAPE '\\!')"
But I keep on getting the exception:
org.fusesource.stomp.client.ProtocolException: Received an error: Invalid selector expression: (MESSAGE_TYPE='REGISTER_REQUEST') AND (SYMBOL LIKE 'USDINR17JUNFUT\$:\$:CDE_FO' ESCAPE '\$')
javax.jms.JMSException: Received an error: Invalid selector expression: (MESSAGE_TYPE='REGISTER_REQUEST') AND (SYMBOL LIKE 'USDINR17JUNFUT\$:\$:CDE_FO' ESCAPE '\$')
at org.fusesource.stomp.jms.StompJmsExceptionSupport.create(StompJmsExceptionSupport.java:59) ~[stompjms-client-1.18.jar:1.18]
at org.fusesource.stomp.jms.StompChannel.subscribe(StompChannel.java:257) ~[stompjms-client-1.18.jar:1.18]
at org.fusesource.stomp.jms.StompJmsSession.add(StompJmsSession.java:608) ~[stompjms-client-1.18.jar:1.18]
at org.fusesource.stomp.jms.StompJmsMessageConsumer.init(StompJmsMessageConsumer.java:67) ~[stompjms-client-1.18.jar:1.18]
at org.fusesource.stomp.jms.StompJmsSession.createConsumer(StompJmsSession.java:223) ~[stompjms-client-1.18.jar:1.18]
at com.edelweiss.libs.AnalyticsJMSPubSub.consumer.GenericJMSConsumer.<init>(GenericJMSConsumer.java:53) [AnalyticsJMSPubSub-0.0.1-SNAPSHOT.jar:?]
at com.edelweiss.algo.tmp.JMSPubSub.App.main(App.java:43) [classes/:?]
Caused by: org.fusesource.stomp.client.ProtocolException: Received an error: Invalid selector expression: (MESSAGE_TYPE='REGISTER_REQUEST') AND (SYMBOL LIKE 'USDINR17JUNFUT\$:\$:CDE_FO' ESCAPE '\$')
at org.fusesource.stomp.client.CallbackConnection.processStompFrame(CallbackConnection.java:110) ~[stompjms-client-1.18.jar:1.18]
at org.fusesource.stomp.client.CallbackConnection.access$000(CallbackConnection.java:33) ~[stompjms-client-1.18.jar:1.18]
at org.fusesource.stomp.client.CallbackConnection$1.onTransportCommand(CallbackConnection.java:61) ~[stompjms-client-1.18.jar:1.18]
at org.fusesource.hawtdispatch.transport.TcpTransport.drainInbound(TcpTransport.java:664) ~[hawtdispatch-transport-1.18.jar:1.18]
at org.fusesource.hawtdispatch.transport.TcpTransport$6.run(TcpTransport.java:543) ~[hawtdispatch-transport-1.18.jar:1.18]
at org.fusesource.hawtdispatch.internal.NioDispatchSource$3.run(NioDispatchSource.java:209) ~[hawtdispatch-1.18.jar:1.18]
at org.fusesource.hawtdispatch.internal.SerialDispatchQueue.run(SerialDispatchQueue.java:100) ~[hawtdispatch-1.18.jar:1.18]
at org.fusesource.hawtdispatch.internal.pool.SimpleThread.run(SimpleThread.java:77) ~[hawtdispatch-1.18.jar:1.18]
at org.fusesource.stomp.client.CallbackConnection.processStompFrame(CallbackConnection.java:110)
at org.fusesource.stomp.client.CallbackConnection.access$000(CallbackConnection.java:33)
at org.fusesource.stomp.client.CallbackConnection$1.onTransportCommand(CallbackConnection.java:61)
at org.fusesource.hawtdispatch.transport.TcpTransport.drainInbound(TcpTransport.java:664)
at org.fusesource.hawtdispatch.transport.TcpTransport$6.run(TcpTransport.java:543)
at org.fusesource.hawtdispatch.internal.NioDispatchSource$3.run(NioDispatchSource.java:209)
at org.fusesource.hawtdispatch.internal.SerialDispatchQueue.run(SerialDispatchQueue.java:100)
at org.fusesource.hawtdispatch.internal.pool.SimpleThread.run(SimpleThread.java:77)