Uploaded image for project: 'ActiveMQ Artemis'
  1. ActiveMQ Artemis
  2. ARTEMIS-3461

Browse Queue fails when the queue contains AMQP highly structured messages

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.18.0
    • 2.19.1, 2.20.0
    • Web Console
    • None

    Description

      send AMQP message to broker with a complex AMQP data structure of at least 2 levels.
      e.g. an array containing another array
      the code below are 6 individual snippets of simple qpid-proton-PY implementations:

      msg = proton.Message('hello') --> OK (no levels)
      
      msg = proton.Message([4,5,6,'hello']) --> OK (1 level)
      
      msg = proton.Message({"a":4,"b":5,"c":6,"d":'hello'}) --> OK (1 level)
      
      msg = proton.Message([4,5,6,["abc","def","ghi"]]) --> FAIL (2 levels)
      
      msg = proton.Message([4,{"a":5,"b":5,"c":5},6]) --> FAIL (2 levels)
      
      msg = proton.Message({"a":[4,5,6,'hello']}) --> FAIL (2 levels)
      

      The messages can be constructed and send in proton without any problem. The messages also look good when they are inspected using WireShark.

      The problem occurs when viewing the messages with "Browse queue" in the Artemis console.
      The message/page counters are properly populated, but the table remains empty.
      In the log-file, the following exception is shown:

      2021-09-06 09:10:51,863 WARN  [org.apache.activemq.artemis.protocol.amqp.broker.AMQPMessage] class java.util.ArrayList is not a valid property type: org.apache.activemq.artemis.api.core.ActiveMQPropertyConversionException: class java.util.ArrayList is not a valid property type
         at org.apache.activemq.artemis.utils.collections.TypedProperties.setObjectProperty(TypedProperties.java:1194) [artemis-commons-2.18.0. jar:2.18.0]
         at org.apache.activemq.artemis.protocol.amqp.converter.coreWrapper.CoreMapMessageWrapper.setObject(CoreMapMessageWrapper.java:140) [artemis-amqp-protocol-2.18.0.jar:2.18.0]
         at org.apache.activemq.artemis.protocol.amqp.converter.AMQPMessageSupport.createMapMessage(AMQPMessageSupport.java:364) [artemis-amqp-protocol-2.18.0.jar:2.18.0]
         at org.apache.activemq.artemis.protocol.amqp.converter.AmqpCoreConverter.toCore(AmqpCoreConverter.java:197) [artemis-amqp-protocol-2.18.0.jar:2.18.0]
         at org.apache.activemq.artemis.protocol.amqp.broker.AMQPMessage.toCore(AMQPMessage.java:865) [artemis-amqp-protocol-2.18.0.jar:2.18.0]
         at org.apache.activemq.artemis.protocol.amqp.broker.AMQPMessage.toCore(AMQPMessage.java:875) [artemis-amqp-protocol-2.18.0.jar:2.18.0]
         at org.apache.activemq.artemis.core.management.impl.openmbean.OpenTypeSupport.convert(OpenTypeSupport.java:53) [artemis-server-2.18.0.jar:2.18.0]
         at org.apache.activemq.artemis.core.management.impl.QueueControlImpl.browse(QueueControlImpl.java:1575) [artemis-server-2.18.0.jar:2.18.0]
         at sun.reflect.GeneratedMethodAccessor122.invoke(Unknown Source) [:1.8.0_302]
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_302]
         at java.lang.reflect.Method.invoke(Method.java:498) [rt.jar:1.8.0_302]
         at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:72) [rt.jar:1.8.0_302]
         at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source) [:1.8.0_302]
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_302]
         at java.lang.reflect.Method.invoke(Method.java:498) [rt.jar:1.8.0_302]
         at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:276) [rt.jar:1.8.0_302]
         at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:112) [rt.jar:1.8.0_302]
         at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:46) [rt.jar:1.8.0_302]
         at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237) [rt.jar:1.8.0_302]
         at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138) [rt.jar:1.8.0_302]
         at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252) [rt.jar:1.8.0_302]
         at javax.management.StandardMBean.invoke(StandardMBean.java:405) [rt.jar:1.8.0_302]
         at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) [rt.jar:1.8.0_302]
         at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) [rt.jar:1.8.0_302]
         at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source) [:1.8.0_302]
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_302]
         at java.lang.reflect.Method.invoke(Method.java:498) [rt.jar:1.8.0_302]
         at org.apache.activemq.artemis.core.server.management.ArtemisMBeanServerBuilder$MBeanInvocationHandler.invoke(ArtemisMBeanServerBuilder.java:96) [artemis-server-2.18.0.jar:2.18.0]
         at com.sun.proxy.$Proxy13.invoke(Unknown Source)
         at org.jolokia.handler.ExecHandler.doHandleRequest(ExecHandler.java:98) [jolokia-core-1.6.2.jar:]
         at org.jolokia.handler.ExecHandler.doHandleRequest(ExecHandler.java:40) [jolokia-core-1.6.2.jar:]
         at org.jolokia.handler.JsonRequestHandler.handleRequest(JsonRequestHandler.java:89) [jolokia-core-1.6.2.jar:]
         at org.jolokia.backend.MBeanServerExecutorLocal.handleRequest(MBeanServerExecutorLocal.java:109) [jolokia-core-1.6.2.jar:]
         at org.jolokia.backend.MBeanServerHandler.dispatchRequest(MBeanServerHandler.java:161) [jolokia-core-1.6.2.jar:]
         at org.jolokia.backend.LocalRequestDispatcher.dispatchRequest(LocalRequestDispatcher.java:99) [jolokia-core-1.6.2.jar:]
         at org.jolokia.backend.BackendManager.callRequestDispatcher(BackendManager.java:429) [jolokia-core-1.6.2.jar:]
         at org.jolokia.backend.BackendManager.handleRequest(BackendManager.java:158) [jolokia-core-1.6.2.jar:]
         at org.jolokia.http.HttpRequestHandler.executeRequest(HttpRequestHandler.java:197) [jolokia-core-1.6.2.jar:]
         at org.jolokia.http.HttpRequestHandler.handlePostRequest(HttpRequestHandler.java:137) [jolokia-core-1.6.2.jar:]
         at org.jolokia.http.AgentServlet$3.handleRequest(AgentServlet.java:460) [jolokia-core-1.6.2.jar:]
         at org.jolokia.http.AgentServlet.handleSecurely(AgentServlet.java:350) [jolokia-core-1.6.2.jar:]
         at org.jolokia.http.AgentServlet.handle(AgentServlet.java:321) [jolokia-core-1.6.2.jar:]
         at org.jolokia.http.AgentServlet.doPost(AgentServlet.java:284) [jolokia-core-1.6.2.jar:]
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) [jetty-all-9.4.43.v20210629-uber.jar:9.4.43.v20210629]
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jetty-all-9.4.43.v20210629-uber.jar:9.4.43.v20210629]
         at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1459)
         at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
         at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1626)
         at io.hawt.web.filters.FlightRecordingDownloadFacade.doFilter(FlightRecordingDownloadFacade.java:68) [hawtio-system-2.13.5.jar:2.13.5]
         at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
         at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
         at io.hawt.web.auth.LoginRedirectFilter.doFilter(LoginRedirectFilter.java:57) [hawtio-system-2.13.5.jar:2.13.5]
         at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
         at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
         at io.hawt.web.auth.AuthenticationFilter.lambda$executeAs$1(AuthenticationFilter.java:105) [hawtio-system-2.13.5.jar:2.13.5]
         at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.8.0_302]
         at javax.security.auth.Subject.doAs(Subject.java:422) [rt.jar:1.8.0_302]
         at io.hawt.web.auth.AuthenticationFilter.executeAs(AuthenticationFilter.java:104) [hawtio-system-2.13.5.jar:2.13.5]
         at io.hawt.web.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:72) [hawtio-system-2.13.5.jar:2.13.5]
         at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
         at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
         at io.hawt.web.filters.HttpHeaderFilter.doFilter(HttpHeaderFilter.java:43) [hawtio-system-2.13.5.jar:2.13.5]
         at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
         at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
         at io.hawt.web.filters.HttpHeaderFilter.doFilter(HttpHeaderFilter.java:43) [hawtio-system-2.13.5.jar:2.13.5]
         at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
         at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
         at io.hawt.web.filters.HttpHeaderFilter.doFilter(HttpHeaderFilter.java:43) [hawtio-system-2.13.5.jar:2.13.5]
         at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
         at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
         at io.hawt.web.filters.HttpHeaderFilter.doFilter(HttpHeaderFilter.java:43) [hawtio-system-2.13.5.jar:2.13.5]
         at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
         at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
         at io.hawt.web.filters.HttpHeaderFilter.doFilter(HttpHeaderFilter.java:43) [hawtio-system-2.13.5.jar:2.13.5]
         at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
         at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
         at io.hawt.web.filters.HttpHeaderFilter.doFilter(HttpHeaderFilter.java:43) [hawtio-system-2.13.5.jar:2.13.5]
         at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
         at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
         at io.hawt.web.filters.HttpHeaderFilter.doFilter(HttpHeaderFilter.java:43) [hawtio-system-2.13.5.jar:2.13.5]
         at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
         at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
         at io.hawt.web.filters.HttpHeaderFilter.doFilter(HttpHeaderFilter.java:43) [hawtio-system-2.13.5.jar:2.13.5]
         at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
         at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
         at io.hawt.web.auth.SessionExpiryFilter.process(SessionExpiryFilter.java:166) [hawtio-system-2.13.5.jar:2.13.5]
         at io.hawt.web.auth.SessionExpiryFilter.doFilter(SessionExpiryFilter.java:60) [hawtio-system-2.13.5.jar:2.13.5]
         at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
         at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
         at org.apache.activemq.artemis.component.JolokiaFilter.doFilter(JolokiaFilter.java:50) [artemis-web-2.18.0.jar:2.18.0]
         at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
         at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
         at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
         at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
         at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:602)
         at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
         at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
         at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
         at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
         at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434)
         at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
         at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
         at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
         at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
         at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349)
         at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
         at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:59)
         at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
         at org.eclipse.jetty.server.Server.handle(Server.java:516)
         at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388)
         at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633)
         at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380)
         at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
         at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
         at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
         at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
         at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
         at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
         at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
         at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
         at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:386)
         at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
         at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
         at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_302]
      

      The stack trace has minor differences based on the exact message structure.

      Attachments

        Issue Links

          Activity

            People

              clebertsuconic Clebert Suconic
              erwindon Erwin Dondorp
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 3h 20m
                  3h 20m