Jonathan Gallimore created AMQ-8277:
---------------------------------------

             Summary: Subscriber with additional predicate causes 
ClassCastException and doesn't forward messages between brokers
                 Key: AMQ-8277
                 URL: https://issues.apache.org/jira/browse/AMQ-8277
             Project: ActiveMQ
          Issue Type: Bug
    Affects Versions: 5.16.2
            Reporter: Jonathan Gallimore


I have a network of brokers set up, and use a plugin to set the additional 
predicate, to enable message filtering based on the consumer.

(JavaDoc for MessageConsumer.setAdditionalPredicate() is "A transient 
additional predicate that can be used it inject additional predicates into the 
selector on the fly. Handy if if say a Security Broker interceptor wants to 
filter out messages based on security level of the consumer.")

This works fine for a single broker, or in a failover scenario, but if used 
with a network of brokers, whenever the consumer starts, the following 
exception is thrown, and messages are not forwarded across the network for this 
consumer.

 

java.lang.ClassCastException: class 
org.apache.activemq.filter.ComparisonExpression$1 cannot be cast to class 
org.apache.activemq.command.DataStructure 
(org.apache.activemq.filter.ComparisonExpression$1 and 
org.apache.activemq.command.DataStructure are in unnamed module of loader 
org.apache.catalina.loader.ParallelWebappClassLoader @749f539e)
        at 
org.apache.activemq.openwire.v12.ConsumerInfoMarshaller.tightMarshal1(ConsumerInfoMarshaller.java:133)
        at 
org.apache.activemq.openwire.OpenWireFormat.tightMarshalNestedObject1(OpenWireFormat.java:400)
        at 
org.apache.activemq.openwire.v12.BaseDataStreamMarshaller.tightMarshalNestedObject1(BaseDataStreamMarshaller.java:130)
        at 
org.apache.activemq.openwire.v12.MessageMarshaller.tightMarshal1(MessageMarshaller.java:140)
        at 
org.apache.activemq.openwire.v12.ActiveMQMessageMarshaller.tightMarshal1(ActiveMQMessageMarshaller.java:76)
        at 
org.apache.activemq.openwire.OpenWireFormat.tightMarshalNestedObject1(OpenWireFormat.java:400)
        at 
org.apache.activemq.openwire.v12.BaseDataStreamMarshaller.tightMarshalNestedObject1(BaseDataStreamMarshaller.java:130)
        at 
org.apache.activemq.openwire.v12.MessageDispatchMarshaller.tightMarshal1(MessageDispatchMarshaller.java:87)
        at 
org.apache.activemq.openwire.OpenWireFormat.marshal(OpenWireFormat.java:226)
        at 
org.apache.activemq.transport.tcp.TcpTransport.oneway(TcpTransport.java:193)
        at 
org.apache.activemq.transport.AbstractInactivityMonitor.doOnewaySend(AbstractInactivityMonitor.java:335)
        at 
org.apache.activemq.transport.AbstractInactivityMonitor.oneway(AbstractInactivityMonitor.java:317)
        at 
org.apache.activemq.transport.TransportFilter.oneway(TransportFilter.java:94)
        at 
org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:116)
        at 
org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:68)
        at 
org.apache.activemq.broker.TransportConnection.dispatch(TransportConnection.java:1474)
        at 
org.apache.activemq.broker.TransportConnection.processDispatch(TransportConnection.java:972)
        at 
org.apache.activemq.broker.TransportConnection.iterate(TransportConnection.java:1022)
        at 
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:133)
        at 
org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:48)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)

 

This is very similar to the exception noted in this query: 
[http://activemq.2283324.n4.nabble.com/Network-broker-and-filter-predicate-td2367038.html]

 

This appears to be down to the *Expression objects not implementing 
DataStructure, and therefore not being marshalable to OpenWire format.

I have prepared a simple patch with a unit test which I'll provide as a PR.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to