Search code examples
pythonstompactivemq-artemis

Browsing message pushed in activemq using python: Cannot invoke "Object.getClass()" because "value" is null


I have messages in ACS01 queue which was pushed using stomp library in python3, which is working fine, but when I try to browse same message in artemis activemq console, I am getting below error in logs:

2022-03-28 19:53:13,979 WARN  [org.apache.activemq.artemis.core.management.impl.QueueControlImpl] Cannot invoke "Object.getClass()" because "value" is null: java.lang.NullPointerException: Cannot invoke "Object.getClass()" because "value" is null
at org.apache.activemq.artemis.api.core.JsonUtil.truncate(JsonUtil.java:339) [artemis-core-client-2.20.0.jar:2.20.0]
at org.apache.activemq.artemis.api.core.Message.toPropertyMap(Message.java:768) [artemis-core-client-2.20.0.jar:2.20.0]
at org.apache.activemq.artemis.core.message.openmbean.MessageOpenTypeFactory.expandProperties(MessageOpenTypeFactory.java:168) [artemis-core-client-2.20.0.jar:2.20.0]
at org.apache.activemq.artemis.core.message.openmbean.MessageOpenTypeFactory.getFields(MessageOpenTypeFactory.java:146) [artemis-core-client-2.20.0.jar:2.20.0]
at org.apache.activemq.artemis.core.message.impl.CoreMessage$BytesMessageOpenTypeFactory.getFields(CoreMessage.java:1377) [artemis-core-client-2.20.0.jar:2.20.0]
at org.apache.activemq.artemis.core.message.impl.CoreMessage$BytesMessageOpenTypeFactory.getFields(CoreMessage.java:1365) [artemis-core-client-2.20.0.jar:2.20.0]
at org.apache.activemq.artemis.core.message.impl.CoreMessage.toCompositeData(CoreMessage.java:1358) [artemis-core-client-2.20.0.jar:2.20.0]
at org.apache.activemq.artemis.core.management.impl.QueueControlImpl.browse(QueueControlImpl.java:1583) [artemis-server-2.20.0.jar:2.20.0]
at jdk.internal.reflect.GeneratedMethodAccessor102.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [java.base:]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) [java.base:]
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:72) [java.base:]
at jdk.internal.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [java.base:]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) [java.base:]
at java.base/sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:262) [java.base:]
at java.management/com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:112) [java.management:]
at java.management/com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:46) [java.management:]
at java.management/com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237) [java.management:]
at java.management/com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138) [java.management:]
at java.management/com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252) [java.management:]
at java.management/javax.management.StandardMBean.invoke(StandardMBean.java:405) [java.management:]
at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:814) [java.management:]
at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:802) [java.management:]
at java.base/jdk.internal.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [java.base:]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) [java.base:]
at org.apache.activemq.artemis.core.server.management.ArtemisMBeanServerBuilder$MBeanInvocationHandler.invoke(ArtemisMBeanServerBuilder.java:96) [artemis-server-2.20.0.jar:2.20.0]
at jdk.proxy2/jdk.proxy2.$Proxy16.invoke(Unknown Source)
at org.jolokia.handler.ExecHandler.doHandleRequest(ExecHandler.java:98) [jolokia-core-1.7.0.jar:]
at org.jolokia.handler.ExecHandler.doHandleRequest(ExecHandler.java:40) [jolokia-core-1.7.0.jar:]
at org.jolokia.handler.JsonRequestHandler.handleRequest(JsonRequestHandler.java:89) [jolokia-core-1.7.0.jar:]
at org.jolokia.backend.MBeanServerExecutorLocal.handleRequest(MBeanServerExecutorLocal.java:109) [jolokia-core-1.7.0.jar:]
at org.jolokia.backend.MBeanServerHandler.dispatchRequest(MBeanServerHandler.java:161) [jolokia-core-1.7.0.jar:]
at org.jolokia.backend.LocalRequestDispatcher.dispatchRequest(LocalRequestDispatcher.java:99) [jolokia-core-1.7.0.jar:]
at org.jolokia.backend.BackendManager.callRequestDispatcher(BackendManager.java:429) [jolokia-core-1.7.0.jar:]
at org.jolokia.backend.BackendManager.handleRequest(BackendManager.java:158) [jolokia-core-1.7.0.jar:]
at org.jolokia.http.HttpRequestHandler.executeRequest(HttpRequestHandler.java:197) [jolokia-core-1.7.0.jar:]
at org.jolokia.http.HttpRequestHandler.handlePostRequest(HttpRequestHandler.java:137) [jolokia-core-1.7.0.jar:]
at org.jolokia.http.AgentServlet$3.handleRequest(AgentServlet.java:493) [jolokia-core-1.7.0.jar:]
at org.jolokia.http.AgentServlet.handleSecurely(AgentServlet.java:383) [jolokia-core-1.7.0.jar:]
at org.jolokia.http.AgentServlet.handle(AgentServlet.java:354) [jolokia-core-1.7.0.jar:]
at org.jolokia.http.AgentServlet.doPost(AgentServlet.java:317) [jolokia-core-1.7.0.jar:]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) [jetty-all-9.4.44.v20210927-uber.jar:9.4.44.v20210927]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jetty-all-9.4.44.v20210927-uber.jar:9.4.44.v20210927]
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:1631)
at io.hawt.web.filters.FlightRecordingDownloadFacade.doFilter(FlightRecordingDownloadFacade.java:68) [hawtio-system-2.14.0.jar:2.14.0]
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:63) [hawtio-system-2.14.0.jar:2.14.0]
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.14.0.jar:2.14.0]
at java.base/java.security.AccessController.doPrivileged(AccessController.java:712) [java.base:]
at java.base/javax.security.auth.Subject.doAs(Subject.java:439) [java.base:]
at io.hawt.web.auth.AuthenticationFilter.executeAs(AuthenticationFilter.java:104) [hawtio-system-2.14.0.jar:2.14.0]
at io.hawt.web.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:72) [hawtio-system-2.14.0.jar:2.14.0]
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.14.0.jar:2.14.0]
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.14.0.jar:2.14.0]
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.14.0.jar:2.14.0]
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.14.0.jar:2.14.0]
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.14.0.jar:2.14.0]
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.14.0.jar:2.14.0]
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.14.0.jar:2.14.0]
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.14.0.jar:2.14.0]
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.14.0.jar:2.14.0]
at io.hawt.web.auth.SessionExpiryFilter.doFilter(SessionExpiryFilter.java:60) [hawtio-system-2.14.0.jar:2.14.0]
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.20.0.jar:2.20.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:600)
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:400)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:645)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:392)
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:409)
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.base/java.lang.Thread.run(Thread.java:833) [java.base:]

Code for pushing message is -

import time
import sys
import stomp

hosts = [('localhost', 61613)]

class Listener(stomp.ConnectionListener):
    def on_error(self, frame):
        print('received an error "%s"' % frame.body)
    def on_message(self, frame):
        print('received an message "%s"' % frame.body)

conn = stomp.Connection(host_and_ports=hosts)
conn.set_listener('', Listener())
conn.connect('aau01', 'aau01', wait=True)
conn.send(destination='ACS01', body='<hello>Red</hello>')
conn.send(destination='ACS01', body='<hello>Blue</hello>')
time.sleep(5)
conn.disconnect()

Also, console indicates messages still in the queue(bottom pane of the image- 1-2 of 2), but doesn't display messages in browse window -

enter image description here

Also other thing to consider is when I browse message which was pushed using console, message are visible in browse queue window. Any help is appreciated!


Solution

  • There is a bug which prevents browsing messages when one of the messages in the queue contains a null property value. In this case the broker itself is setting the null property value by mistake. You'll need to upgrade to ActiveMQ Artemis 2.21.0 once it is available as it will contain the fixes for ARTEMIS-3677 and ARTEMIS-3696. It just passed the release vote so it should be available on the website for download in the next few days. To be clear, the only problem here is with browsing the messages. You should be able to consume the message no problem.

    When you push a message to the queue via the web console the core protocol is used (i.e. not STOMP) which is why you can browse successfully.