[ https://issues.apache.org/jira/browse/AMQ-8277?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jean-Baptiste Onofré resolved AMQ-8277. --------------------------------------- Resolution: Auto Closed > 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 > Priority: Major > Time Spent: 50m > Remaining Estimate: 0h > > 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.20.10#820010)