From fe8be8080bac5adebcf83b0bb2c7ce0bfc1c8bc1 Mon Sep 17 00:00:00 2001 From: saurabhrai Date: Mon, 27 Nov 2017 13:01:04 +0530 Subject: [PATCH] ARTEMIS-1505: NPE prevents browsing queue with large messages --- .../impl/openmbean/OpenTypeSupport.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/openmbean/OpenTypeSupport.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/openmbean/OpenTypeSupport.java index 0c781b7965b..30c9a2e4785 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/openmbean/OpenTypeSupport.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/openmbean/OpenTypeSupport.java @@ -35,6 +35,7 @@ import org.apache.activemq.artemis.api.core.ICoreMessage; import org.apache.activemq.artemis.api.core.Message; import org.apache.activemq.artemis.api.core.SimpleString; +import org.apache.activemq.artemis.core.persistence.impl.journal.LargeServerMessageImpl; import org.apache.activemq.artemis.core.server.MessageReference; public final class OpenTypeSupport { @@ -267,10 +268,14 @@ protected void init() throws OpenDataException { public Map getFields(MessageReference ref) throws OpenDataException { Map rc = super.getFields(ref); ICoreMessage m = ref.getMessage().toCore(); - ActiveMQBuffer bodyCopy = m.getReadOnlyBodyBuffer(); - byte[] bytes = new byte[bodyCopy.readableBytes()]; - bodyCopy.readBytes(bytes); - rc.put(CompositeDataConstants.BODY, bytes); + if (!(m instanceof LargeServerMessageImpl)) { + ActiveMQBuffer bodyCopy = m.getReadOnlyBodyBuffer(); + byte[] bytes = new byte[bodyCopy.readableBytes()]; + bodyCopy.readBytes(bytes); + rc.put(CompositeDataConstants.BODY, bytes); + } else { + rc.put(CompositeDataConstants.BODY, new byte[0]); + } return rc; } } @@ -288,8 +293,12 @@ protected void init() throws OpenDataException { public Map getFields(MessageReference ref) throws OpenDataException { Map rc = super.getFields(ref); ICoreMessage m = ref.getMessage().toCore(); - SimpleString text = m.getReadOnlyBodyBuffer().readNullableSimpleString(); - rc.put(CompositeDataConstants.TEXT_BODY, text != null ? text.toString() : ""); + if (!(m instanceof LargeServerMessageImpl)) { + SimpleString text = m.getReadOnlyBodyBuffer().readNullableSimpleString(); + rc.put(CompositeDataConstants.TEXT_BODY, text != null ? text.toString() : ""); + } else { + rc.put(CompositeDataConstants.TEXT_BODY, ""); + } return rc; } }