http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSServerControlImpl.java
----------------------------------------------------------------------
diff --git 
a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSServerControlImpl.java
 
b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSServerControlImpl.java
index 99d742d..d7cced1 100644
--- 
a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSServerControlImpl.java
+++ 
b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSServerControlImpl.java
@@ -17,6 +17,11 @@
 package org.apache.activemq.artemis.jms.management.impl;
 
 import javax.jms.JMSRuntimeException;
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
 import javax.management.ListenerNotFoundException;
 import javax.management.MBeanAttributeInfo;
 import javax.management.MBeanNotificationInfo;
@@ -61,8 +66,6 @@ import 
org.apache.activemq.artemis.jms.server.config.impl.ConnectionFactoryConfi
 import org.apache.activemq.artemis.jms.server.management.JMSNotificationType;
 import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
 import org.apache.activemq.artemis.utils.TypedProperties;
-import org.apache.activemq.artemis.utils.json.JSONArray;
-import org.apache.activemq.artemis.utils.json.JSONObject;
 
 public class JMSServerControlImpl extends AbstractControl implements 
JMSServerControl, NotificationEmitter, 
org.apache.activemq.artemis.core.server.management.NotificationListener {
 
@@ -599,7 +602,7 @@ public class JMSServerControlImpl extends AbstractControl 
implements JMSServerCo
       clearIO();
 
       try {
-         JSONArray array = new JSONArray();
+         JsonArrayBuilder array = Json.createArrayBuilder();
 
          Set<RemotingConnection> connections = 
server.getActiveMQServer().getRemotingService().getConnections();
 
@@ -617,14 +620,15 @@ public class JMSServerControlImpl extends AbstractControl 
implements JMSServerCo
          for (RemotingConnection connection : connections) {
             ServerSession session = jmsSessions.get(connection.getID());
             if (session != null) {
-               JSONObject obj = new JSONObject();
-               obj.put("connectionID", connection.getID().toString());
-               obj.put("clientAddress", connection.getRemoteAddress());
-               obj.put("creationTime", connection.getCreationTime());
-               // Notice: this will be null when the user haven't set the 
client-id
-               obj.put("clientID", 
session.getMetaData(ClientSession.JMS_SESSION_CLIENT_ID_PROPERTY));
-               obj.put("principal", session.getUsername());
-               array.put(obj);
+               JsonObject obj = Json.createObjectBuilder()
+                  .add("connectionID", connection.getID().toString())
+                  .add("clientAddress", connection.getRemoteAddress())
+                  .add("creationTime", connection.getCreationTime())
+                  // Notice: this will be null when the user haven't set the 
client-id
+                  .add("clientID", 
session.getMetaData(ClientSession.JMS_SESSION_CLIENT_ID_PROPERTY))
+                  .add("principal", session.getUsername())
+                  .build();
+               array.add(obj);
             }
          }
          return array.toString();
@@ -641,24 +645,17 @@ public class JMSServerControlImpl extends AbstractControl 
implements JMSServerCo
       clearIO();
 
       try {
-         JSONArray array = new JSONArray();
+         JsonArrayBuilder array = Json.createArrayBuilder();
 
          Set<RemotingConnection> connections = 
server.getActiveMQServer().getRemotingService().getConnections();
          for (RemotingConnection connection : connections) {
             if (connectionID.equals(connection.getID().toString())) {
                List<ServerSession> sessions = 
server.getActiveMQServer().getSessions(connectionID);
-               for (ServerSession session : sessions) {
-                  Set<ServerConsumer> consumers = session.getServerConsumers();
-                  for (ServerConsumer consumer : consumers) {
-                     JSONObject obj = toJSONObject(consumer);
-                     if (obj != null) {
-                        array.put(obj);
-                     }
-                  }
-               }
+               JsonArray jsonSessions = toJsonArray(sessions);
+               array.add(jsonSessions);
             }
          }
-         return array.toString();
+         return array.build().toString();
       }
       finally {
          blockOnIO();
@@ -672,19 +669,8 @@ public class JMSServerControlImpl extends AbstractControl 
implements JMSServerCo
       clearIO();
 
       try {
-         JSONArray array = new JSONArray();
-
-         Set<ServerSession> sessions = 
server.getActiveMQServer().getSessions();
-         for (ServerSession session : sessions) {
-            Set<ServerConsumer> consumers = session.getServerConsumers();
-            for (ServerConsumer consumer : consumers) {
-               JSONObject obj = toJSONObject(consumer);
-               if (obj != null) {
-                  array.put(obj);
-               }
-            }
-         }
-         return array.toString();
+         JsonArray jsonArray = 
toJsonArray(server.getActiveMQServer().getSessions());
+         return jsonArray.toString();
       }
       finally {
          blockOnIO();
@@ -810,14 +796,14 @@ public class JMSServerControlImpl extends AbstractControl 
implements JMSServerCo
 
       clearIO();
 
-      JSONArray array = new JSONArray();
+      JsonArrayBuilder array = Json.createArrayBuilder();
       try {
          List<ServerSession> sessions = 
server.getActiveMQServer().getSessions(connectionID);
          for (ServerSession sess : sessions) {
-            JSONObject obj = new JSONObject();
-            obj.put("sessionID", sess.getName());
-            obj.put("creationTime", sess.getCreationTime());
-            array.put(obj);
+            JsonObjectBuilder obj = Json.createObjectBuilder()
+                  .add("sessionID", sess.getName())
+                  .add("creationTime", sess.getCreationTime());
+            array.add(obj);
          }
       }
       finally {
@@ -832,7 +818,7 @@ public class JMSServerControlImpl extends AbstractControl 
implements JMSServerCo
 
       clearIO();
       try {
-         JSONArray brokers = new JSONArray();
+         JsonArrayBuilder brokers = Json.createArrayBuilder();
          ClusterManager clusterManager = 
server.getActiveMQServer().getClusterManager();
          if (clusterManager != null) {
             Set<ClusterConnection> clusterConnections = 
clusterManager.getClusterConnections();
@@ -841,17 +827,17 @@ public class JMSServerControlImpl extends AbstractControl 
implements JMSServerCo
                Collection<TopologyMemberImpl> members = topology.getMembers();
                for (TopologyMemberImpl member : members) {
 
-                  JSONObject obj = new JSONObject();
+                  JsonObjectBuilder obj = Json.createObjectBuilder();
                   TransportConfiguration live = member.getLive();
                   if (live != null) {
-                     obj.put("nodeID", member.getNodeId());
-                     obj.put("live", live.getParams().get("host") + ":" + 
live.getParams().get("port"));
+                     obj.add("nodeID", member.getNodeId())
+                        .add("live", live.getParams().get("host") + ":" + 
live.getParams().get("port"));
                      TransportConfiguration backup = member.getBackup();
                      if (backup != null) {
-                        obj.put("backup", backup.getParams().get("host") + ":" 
+ backup.getParams().get("port"));
+                        obj.add("backup", backup.getParams().get("host") + ":" 
+ backup.getParams().get("port"));
                      }
                   }
-                  brokers.put(obj);
+                  brokers.add(obj);
                }
             }
          }
@@ -867,39 +853,41 @@ public class JMSServerControlImpl extends AbstractControl 
implements JMSServerCo
       return 
server.getActiveMQServer().destroyConnectionWithSessionMetadata(ClientSession.JMS_SESSION_CLIENT_ID_PROPERTY,
 clientID);
    }
 
-   private JSONObject toJSONObject(ServerConsumer consumer) throws Exception {
-      JSONObject obj = new JSONObject();
-      obj.put("consumerID", consumer.getID());
-      obj.put("connectionID", consumer.getConnectionID());
-      obj.put("sessionID", consumer.getSessionID());
-      obj.put("queueName", consumer.getQueue().getName().toString());
-      obj.put("browseOnly", consumer.isBrowseOnly());
-      obj.put("creationTime", consumer.getCreationTime());
-      // JMS consumer with message filter use the queue's filter
-      Filter queueFilter = consumer.getQueue().getFilter();
-      if (queueFilter != null) {
-         obj.put("filter", queueFilter.getFilterString().toString());
-      }
+   private JsonObject toJSONObject(ServerConsumer consumer) {
       String[] destinationInfo = 
determineJMSDestination(consumer.getQueue().getAddress().toString());
       if (destinationInfo == null) {
          return null;
       }
-      obj.put("destinationName", destinationInfo[0]);
-      obj.put("destinationType", destinationInfo[1]);
+      JsonObjectBuilder obj = Json.createObjectBuilder()
+         .add("consumerID", consumer.getID())
+         .add("connectionID", consumer.getConnectionID().toString())
+         .add("sessionID", consumer.getSessionID())
+         .add("queueName", consumer.getQueue().getName().toString())
+         .add("browseOnly", consumer.isBrowseOnly())
+         .add("creationTime", consumer.getCreationTime())
+         .add("destinationName", destinationInfo[0])
+         .add("destinationType", destinationInfo[1]);
+      // JMS consumer with message filter use the queue's filter
+      Filter queueFilter = consumer.getQueue().getFilter();
+      if (queueFilter != null) {
+         obj.add("filter", queueFilter.getFilterString().toString());
+      }
+
+
       if (destinationInfo[1].equals("topic")) {
          try {
             
ActiveMQDestination.decomposeQueueNameForDurableSubscription(consumer.getQueue().getName().toString());
-            obj.put("durable", true);
+            obj.add("durable", true);
          }
          catch (IllegalArgumentException | JMSRuntimeException e) {
-            obj.put("durable", false);
+            obj.add("durable", false);
          }
       }
       else {
-         obj.put("durable", false);
+         obj.add("durable", false);
       }
 
-      return obj;
+      return obj.build();
    }
 
    @Override
@@ -912,4 +900,19 @@ public class JMSServerControlImpl extends AbstractControl 
implements JMSServerCo
       this.broadcaster.sendNotification(new Notification(type.toString(), 
this, notifSeq.incrementAndGet(), 
prop.getSimpleStringProperty(JMSNotificationType.MESSAGE).toString()));
    }
 
+   private JsonArray toJsonArray(Collection<ServerSession> sessions) {
+      JsonArrayBuilder array = Json.createArrayBuilder();
+
+      for (ServerSession session : sessions) {
+         Set<ServerConsumer> consumers = session.getServerConsumers();
+         for (ServerConsumer consumer : consumers) {
+            JsonObject obj = toJSONObject(consumer);
+            if (obj != null) {
+               array.add(obj);
+            }
+         }
+      }
+      return array.build();
+   }
+
 }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSTopicControlImpl.java
----------------------------------------------------------------------
diff --git 
a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSTopicControlImpl.java
 
b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSTopicControlImpl.java
index 5a0842d..5de407d 100644
--- 
a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSTopicControlImpl.java
+++ 
b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSTopicControlImpl.java
@@ -21,6 +21,9 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
+import javax.json.Json;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObject;
 import javax.management.MBeanInfo;
 import javax.management.StandardMBean;
 
@@ -37,8 +40,8 @@ import 
org.apache.activemq.artemis.jms.client.ActiveMQDestination;
 import org.apache.activemq.artemis.jms.client.ActiveMQMessage;
 import org.apache.activemq.artemis.jms.server.JMSServerManager;
 import org.apache.activemq.artemis.utils.SelectorTranslator;
-import org.apache.activemq.artemis.utils.json.JSONArray;
-import org.apache.activemq.artemis.utils.json.JSONObject;
+
+import static org.apache.activemq.artemis.api.core.JsonUtil.nullSafe;
 
 public class JMSTopicControlImpl extends StandardMBean implements TopicControl 
{
 
@@ -289,7 +292,7 @@ public class JMSTopicControlImpl extends StandardMBean 
implements TopicControl {
    private String listSubscribersInfosAsJSON(final DurabilityType durability) 
throws Exception {
       try {
          List<QueueControl> queues = getQueues(durability);
-         JSONArray array = new JSONArray();
+         JsonArrayBuilder array = Json.createArrayBuilder();
 
          for (QueueControl queue : queues) {
             String clientID = null;
@@ -310,20 +313,21 @@ public class JMSTopicControlImpl extends StandardMBean 
implements TopicControl {
 
             String filter = queue.getFilter() != null ? queue.getFilter() : 
null;
 
-            JSONObject info = new JSONObject();
-
-            info.put("queueName", queue.getName());
-            info.put("clientID", clientID);
-            info.put("selector", filter);
-            info.put("name", subName);
-            info.put("durable", queue.isDurable());
-            info.put("messageCount", queue.getMessageCount());
-            info.put("deliveringCount", queue.getDeliveringCount());
-            info.put("consumers", new JSONArray(queue.listConsumersAsJSON()));
-            array.put(info);
+            JsonObject info = Json.createObjectBuilder()
+               .add("queueName", queue.getName())
+               .add("clientID", nullSafe(clientID))
+               .add("selector", nullSafe(filter))
+               .add("name", nullSafe(subName))
+               .add("durable", queue.isDurable())
+               .add("messageCount", queue.getMessageCount())
+               .add("deliveringCount", queue.getDeliveringCount())
+               .add("consumers", queue.listConsumersAsJSON())
+               .build();
+
+            array.add(info);
          }
 
-         return array.toString();
+         return array.build().toString();
       }
       catch (Exception e) {
          e.printStackTrace();

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
 
b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
index 228c1bd..194c598 100644
--- 
a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
+++ 
b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
@@ -16,6 +16,10 @@
  */
 package org.apache.activemq.artemis.jms.server.impl;
 
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObject;
 import javax.naming.NamingException;
 import javax.transaction.xa.Xid;
 import java.net.InetAddress;
@@ -87,8 +91,6 @@ import 
org.apache.activemq.artemis.spi.core.naming.BindingRegistry;
 import org.apache.activemq.artemis.utils.SelectorTranslator;
 import org.apache.activemq.artemis.utils.TimeAndCounterIDGenerator;
 import org.apache.activemq.artemis.utils.TypedProperties;
-import org.apache.activemq.artemis.utils.json.JSONArray;
-import org.apache.activemq.artemis.utils.json.JSONObject;
 
 /**
  * A Deployer used to create and add to Bindings queues, topics and connection
@@ -1343,7 +1345,7 @@ public class JMSServerManagerImpl implements 
JMSServerManager, ActivateCallback
          }
       });
 
-      JSONArray txDetailListJson = new JSONArray();
+      JsonArrayBuilder txDetailListJson = Json.createArrayBuilder();
       for (Map.Entry<Xid, Long> entry : xidsSortedByCreationTime) {
          Xid xid = entry.getKey();
          Transaction tx = resourceManager.getTransaction(xid);
@@ -1351,7 +1353,7 @@ public class JMSServerManagerImpl implements 
JMSServerManager, ActivateCallback
             continue;
          }
          TransactionDetail detail = new JMSTransactionDetail(xid, tx, 
entry.getValue());
-         txDetailListJson.put(detail.toJSON());
+         txDetailListJson.add(detail.toJSON());
       }
       return txDetailListJson.toString();
    }
@@ -1383,7 +1385,7 @@ public class JMSServerManagerImpl implements 
JMSServerManager, ActivateCallback
             continue;
          }
          TransactionDetail detail = new JMSTransactionDetail(xid, tx, 
entry.getValue());
-         JSONObject txJson = detail.toJSON();
+         JsonObject txJson = detail.toJSON();
 
          html.append("<table border=\"1\">");
          html.append("<tr><th>creation_time</th>");
@@ -1401,14 +1403,13 @@ public class JMSServerManagerImpl implements 
JMSServerManager, ActivateCallback
          html.append("<tr><td colspan=\"6\">");
          html.append("<table border=\"1\" cellspacing=\"0\" 
cellpadding=\"0\">");
 
-         JSONArray msgs = 
txJson.getJSONArray(TransactionDetail.KEY_TX_RELATED_MESSAGES);
-         for (int i = 0; i < msgs.length(); i++) {
-            JSONObject msgJson = msgs.getJSONObject(i);
-            JSONObject props = 
msgJson.getJSONObject(TransactionDetail.KEY_MSG_PROPERTIES);
+         JsonArray msgs = 
txJson.getJsonArray(TransactionDetail.KEY_TX_RELATED_MESSAGES);
+         for (int i = 0; i < msgs.size(); i++) {
+            JsonObject msgJson = msgs.getJsonObject(i);
+            JsonObject props = 
msgJson.getJsonObject(TransactionDetail.KEY_MSG_PROPERTIES);
             StringBuilder propstr = new StringBuilder();
-            Iterator<String> propkeys = props.keys();
-            while (propkeys.hasNext()) {
-               String key = propkeys.next();
+
+            for (String key : props.keySet()) {
                propstr.append(key);
                propstr.append("=");
                propstr.append(props.get(key));

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-server/src/main/java/org/apache/activemq/artemis/api/core/management/MessageCounterInfo.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/api/core/management/MessageCounterInfo.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/api/core/management/MessageCounterInfo.java
index dba80b6..bbad79b 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/api/core/management/MessageCounterInfo.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/api/core/management/MessageCounterInfo.java
@@ -19,8 +19,13 @@ package org.apache.activemq.artemis.api.core.management;
 import java.text.DateFormat;
 import java.util.Date;
 
+import org.apache.activemq.artemis.api.core.JsonUtil;
 import org.apache.activemq.artemis.core.messagecounter.MessageCounter;
-import org.apache.activemq.artemis.utils.json.JSONObject;
+
+import javax.json.Json;
+import javax.json.JsonObject;
+
+import static org.apache.activemq.artemis.api.core.JsonUtil.nullSafe;
 
 /**
  * Helper class to create Java Objects from the
@@ -55,27 +60,33 @@ public final class MessageCounterInfo {
     */
    public static String toJSon(final MessageCounter counter) throws Exception {
       DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, 
DateFormat.MEDIUM);
-
-      JSONObject json = new JSONObject(counter);
       String lastAddTimestamp = dateFormat.format(new 
Date(counter.getLastAddedMessageTime()));
-      json.put("lastAddTimestamp", lastAddTimestamp);
       String updateTimestamp = dateFormat.format(new 
Date(counter.getLastUpdate()));
-      json.put("updateTimestamp", updateTimestamp);
-
-      return json.toString();
+      return Json.createObjectBuilder()
+         .add("destinationName", nullSafe(counter.getDestinationName()))
+         .add("destinationSubscription", 
nullSafe(counter.getDestinationSubscription()))
+         .add("destinationDurable", counter.isDestinationDurable())
+         .add("count", counter.getCount())
+         .add("countDelta", counter.getCountDelta())
+         .add("messageCount", counter.getMessageCount())
+         .add("messageCountDelta", counter.getMessageCountDelta())
+         .add("lastAddTimestamp", lastAddTimestamp)
+         .add("updateTimestamp", updateTimestamp)
+         .build()
+         .toString();
    }
 
    /**
-    * Returns an array of RoleInfo corresponding to the JSON serialization 
returned
+    * Returns a MessageCounterInfo corresponding to the JSON serialization 
returned
     * by {@link QueueControl#listMessageCounter()}.
     */
    public static MessageCounterInfo fromJSON(final String jsonString) throws 
Exception {
-      JSONObject data = new JSONObject(jsonString);
+      JsonObject data = JsonUtil.readJsonObject(jsonString);
       String name = data.getString("destinationName");
-      String subscription = data.getString("destinationSubscription");
+      String subscription = data.getString("destinationSubscription", null);
       boolean durable = data.getBoolean("destinationDurable");
-      long count = data.getLong("count");
-      long countDelta = data.getLong("countDelta");
+      long count = data.getJsonNumber("count").longValue();
+      long countDelta = data.getJsonNumber("countDelta").longValue();
       int depth = data.getInt("messageCount");
       int depthDelta = data.getInt("messageCountDelta");
       String lastAddTimestamp = data.getString("lastAddTimestamp");

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
index 9b5ec20..e7c26aa 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
@@ -22,14 +22,17 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
 
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
 import javax.management.ListenerNotFoundException;
 import javax.management.MBeanAttributeInfo;
 import javax.management.MBeanNotificationInfo;
@@ -88,8 +91,6 @@ import 
org.apache.activemq.artemis.core.transaction.impl.XidImpl;
 import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
 import org.apache.activemq.artemis.utils.SecurityFormatter;
 import org.apache.activemq.artemis.utils.TypedProperties;
-import org.apache.activemq.artemis.utils.json.JSONArray;
-import org.apache.activemq.artemis.utils.json.JSONObject;
 
 public class ActiveMQServerControlImpl extends AbstractControl implements 
ActiveMQServerControl, NotificationEmitter, 
org.apache.activemq.artemis.core.server.management.NotificationListener {
    // Constants -----------------------------------------------------
@@ -974,7 +975,7 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
             }
          });
 
-         JSONArray txDetailListJson = new JSONArray();
+         JsonArrayBuilder txDetailListJson = Json.createArrayBuilder();
          for (Map.Entry<Xid, Long> entry : xidsSortedByCreationTime) {
             Xid xid = entry.getKey();
 
@@ -986,9 +987,9 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
 
             TransactionDetail detail = new CoreTransactionDetail(xid, tx, 
entry.getValue());
 
-            txDetailListJson.put(detail.toJSON());
+            txDetailListJson.add(detail.toJSON());
          }
-         return txDetailListJson.toString();
+         return txDetailListJson.build().toString();
       }
       finally {
          blockOnIO();
@@ -1029,7 +1030,7 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
 
             TransactionDetail detail = new CoreTransactionDetail(xid, tx, 
entry.getValue());
 
-            JSONObject txJson = detail.toJSON();
+            JsonObject txJson = detail.toJSON();
 
             html.append("<table border=\"1\">");
             html.append("<tr><th>creation_time</th>");
@@ -1047,14 +1048,13 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
             html.append("<tr><td colspan=\"6\">");
             html.append("<table border=\"1\" cellspacing=\"0\" 
cellpadding=\"0\">");
 
-            JSONArray msgs = 
txJson.getJSONArray(TransactionDetail.KEY_TX_RELATED_MESSAGES);
-            for (int i = 0; i < msgs.length(); i++) {
-               JSONObject msgJson = msgs.getJSONObject(i);
-               JSONObject props = 
msgJson.getJSONObject(TransactionDetail.KEY_MSG_PROPERTIES);
+            JsonArray msgs = 
txJson.getJsonArray(TransactionDetail.KEY_TX_RELATED_MESSAGES);
+            for (int i = 0; i < msgs.size(); i++) {
+               JsonObject msgJson = msgs.getJsonObject(i);
+               JsonObject props = 
msgJson.getJsonObject(TransactionDetail.KEY_MSG_PROPERTIES);
                StringBuilder propstr = new StringBuilder();
-               Iterator<String> propkeys = props.keys();
-               while (propkeys.hasNext()) {
-                  String key = propkeys.next();
+               Set<String> keys = props.keySet();
+               for (String key : keys) {
                   propstr.append(key);
                   propstr.append("=");
                   propstr.append(props.get(key));
@@ -1350,13 +1350,13 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
    */
    @Override
    public String listProducersInfoAsJSON() throws Exception {
-      JSONArray producers = new JSONArray();
+      JsonArrayBuilder producers = Json.createArrayBuilder();
 
       for (ServerSession session : server.getSessions()) {
          session.describeProducersInfo(producers);
       }
 
-      return producers.toString();
+      return producers.build().toString();
    }
 
    @Override
@@ -1393,13 +1393,13 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
 
       clearIO();
       try {
-         JSONArray array = new JSONArray();
+         JsonArrayBuilder array = Json.createArrayBuilder();
 
          for (TransportConfiguration config : 
configuration.getConnectorConfigurations().values()) {
-            array.put(new JSONObject(config));
+            array.add(config.toJson());
          }
 
-         return array.toString();
+         return array.build().toString();
       }
       finally {
          blockOnIO();
@@ -1488,13 +1488,13 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
 
       clearIO();
       try {
-         JSONArray json = new JSONArray();
+         JsonArrayBuilder json = Json.createArrayBuilder();
          Set<Role> roles = 
server.getSecurityRepository().getMatch(addressMatch);
 
          for (Role role : roles) {
-            json.put(new JSONObject(role));
+            json.add(role.toJson());
          }
-         return json.toString();
+         return json.build().toString();
       }
       finally {
          blockOnIO();
@@ -1506,37 +1506,36 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
       checkStarted();
 
       AddressSettings addressSettings = 
server.getAddressSettingsRepository().getMatch(address);
-      Map<String, Object> settings = new HashMap<>();
+      String policy = addressSettings.getAddressFullMessagePolicy() == 
AddressFullMessagePolicy.PAGE ? "PAGE" : 
addressSettings.getAddressFullMessagePolicy() == AddressFullMessagePolicy.BLOCK 
? "BLOCK" : addressSettings.getAddressFullMessagePolicy() == 
AddressFullMessagePolicy.DROP ? "DROP" : "FAIL";
+      String consumerPolicy = addressSettings.getSlowConsumerPolicy() == 
SlowConsumerPolicy.NOTIFY ? "NOTIFY" : "KILL";
+      JsonObjectBuilder settings = Json.createObjectBuilder();
       if (addressSettings.getDeadLetterAddress() != null) {
-         settings.put("DLA", addressSettings.getDeadLetterAddress());
+         settings.add("DLA", 
addressSettings.getDeadLetterAddress().toString());
       }
       if (addressSettings.getExpiryAddress() != null) {
-         settings.put("expiryAddress", addressSettings.getExpiryAddress());
-      }
-      settings.put("expiryDelay", addressSettings.getExpiryDelay());
-      settings.put("maxDeliveryAttempts", 
addressSettings.getMaxDeliveryAttempts());
-      settings.put("pageCacheMaxSize", addressSettings.getPageCacheMaxSize());
-      settings.put("maxSizeBytes", addressSettings.getMaxSizeBytes());
-      settings.put("pageSizeBytes", addressSettings.getPageSizeBytes());
-      settings.put("redeliveryDelay", addressSettings.getRedeliveryDelay());
-      settings.put("redeliveryMultiplier", 
addressSettings.getRedeliveryMultiplier());
-      settings.put("maxRedeliveryDelay", 
addressSettings.getMaxRedeliveryDelay());
-      settings.put("redistributionDelay", 
addressSettings.getRedistributionDelay());
-      settings.put("lastValueQueue", addressSettings.isLastValueQueue());
-      settings.put("sendToDLAOnNoRoute", 
addressSettings.isSendToDLAOnNoRoute());
-      String policy = addressSettings.getAddressFullMessagePolicy() == 
AddressFullMessagePolicy.PAGE ? "PAGE" : 
addressSettings.getAddressFullMessagePolicy() == AddressFullMessagePolicy.BLOCK 
? "BLOCK" : addressSettings.getAddressFullMessagePolicy() == 
AddressFullMessagePolicy.DROP ? "DROP" : "FAIL";
-      settings.put("addressFullMessagePolicy", policy);
-      settings.put("slowConsumerThreshold", 
addressSettings.getSlowConsumerThreshold());
-      settings.put("slowConsumerCheckPeriod", 
addressSettings.getSlowConsumerCheckPeriod());
-      policy = addressSettings.getSlowConsumerPolicy() == 
SlowConsumerPolicy.NOTIFY ? "NOTIFY" : "KILL";
-      settings.put("slowConsumerPolicy", policy);
-      settings.put("autoCreateJmsQueues", 
addressSettings.isAutoCreateJmsQueues());
-      settings.put("autoDeleteJmsQueues", 
addressSettings.isAutoDeleteJmsQueues());
-      settings.put("autoCreateJmsTopics", 
addressSettings.isAutoCreateJmsTopics());
-      settings.put("autoDeleteJmsTopics", 
addressSettings.isAutoDeleteJmsTopics());
-
-      JSONObject jsonObject = new JSONObject(settings);
-      return jsonObject.toString();
+         settings.add("expiryAddress", 
addressSettings.getExpiryAddress().toString());
+      }
+      return settings
+         .add("expiryDelay", addressSettings.getExpiryDelay())
+         .add("maxDeliveryAttempts", addressSettings.getMaxDeliveryAttempts())
+         .add("pageCacheMaxSize", addressSettings.getPageCacheMaxSize())
+         .add("maxSizeBytes", addressSettings.getMaxSizeBytes())
+         .add("pageSizeBytes", addressSettings.getPageSizeBytes())
+         .add("redeliveryDelay", addressSettings.getRedeliveryDelay())
+         .add("redeliveryMultiplier", 
addressSettings.getRedeliveryMultiplier())
+         .add("maxRedeliveryDelay", addressSettings.getMaxRedeliveryDelay())
+         .add("redistributionDelay", addressSettings.getRedistributionDelay())
+         .add("lastValueQueue", addressSettings.isLastValueQueue())
+         .add("sendToDLAOnNoRoute", addressSettings.isSendToDLAOnNoRoute())
+         .add("addressFullMessagePolicy", policy)
+         .add("slowConsumerThreshold", 
addressSettings.getSlowConsumerThreshold())
+         .add("slowConsumerCheckPeriod", 
addressSettings.getSlowConsumerCheckPeriod())
+         .add("slowConsumerPolicy", consumerPolicy)
+         .add("autoCreateJmsQueues", addressSettings.isAutoCreateJmsQueues())
+         .add("autoDeleteJmsQueues", addressSettings.isAutoDeleteJmsQueues())
+         .add("autoCreateJmsTopics", addressSettings.isAutoCreateJmsTopics())
+         .add("autoDeleteJmsTopics", addressSettings.isAutoDeleteJmsTopics())
+         .build().toString();
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AddressControlImpl.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AddressControlImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AddressControlImpl.java
index 7cb67af..9ea4081 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AddressControlImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/AddressControlImpl.java
@@ -16,6 +16,8 @@
  */
 package org.apache.activemq.artemis.core.management.impl;
 
+import javax.json.Json;
+import javax.json.JsonArrayBuilder;
 import javax.management.MBeanAttributeInfo;
 import javax.management.MBeanOperationInfo;
 import java.util.ArrayList;
@@ -34,8 +36,6 @@ import 
org.apache.activemq.artemis.core.postoffice.QueueBinding;
 import org.apache.activemq.artemis.core.security.CheckType;
 import org.apache.activemq.artemis.core.security.Role;
 import org.apache.activemq.artemis.core.settings.HierarchicalRepository;
-import org.apache.activemq.artemis.utils.json.JSONArray;
-import org.apache.activemq.artemis.utils.json.JSONObject;
 
 public class AddressControlImpl extends AbstractControl implements 
AddressControl {
 
@@ -140,11 +140,11 @@ public class AddressControlImpl extends AbstractControl 
implements AddressContro
    public String getRolesAsJSON() throws Exception {
       clearIO();
       try {
-         JSONArray json = new JSONArray();
+         JsonArrayBuilder json = Json.createArrayBuilder();
          Set<Role> roles = securityRepository.getMatch(address.toString());
 
          for (Role role : roles) {
-            json.put(new JSONObject(role));
+            json.add(role.toJson());
          }
          return json.toString();
       }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/BroadcastGroupControlImpl.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/BroadcastGroupControlImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/BroadcastGroupControlImpl.java
index d6ef25e..7b206e8 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/BroadcastGroupControlImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/BroadcastGroupControlImpl.java
@@ -22,9 +22,9 @@ import javax.management.MBeanOperationInfo;
 import org.apache.activemq.artemis.api.core.BroadcastGroupConfiguration;
 import org.apache.activemq.artemis.api.core.UDPBroadcastEndpointFactory;
 import org.apache.activemq.artemis.api.core.management.BroadcastGroupControl;
+import org.apache.activemq.artemis.api.core.JsonUtil;
 import org.apache.activemq.artemis.core.persistence.StorageManager;
 import org.apache.activemq.artemis.core.server.cluster.BroadcastGroup;
-import org.apache.activemq.artemis.utils.json.JSONArray;
 
 public class BroadcastGroupControlImpl extends AbstractControl implements 
BroadcastGroupControl {
 
@@ -94,12 +94,7 @@ public class BroadcastGroupControlImpl extends 
AbstractControl implements Broadc
    public String getConnectorPairsAsJSON() throws Exception {
       clearIO();
       try {
-         JSONArray array = new JSONArray();
-
-         for (String connector : configuration.getConnectorInfos()) {
-            array.put(connector);
-         }
-         return array.toString();
+         return 
JsonUtil.toJsonArray(configuration.getConnectorInfos()).toString();
       }
       finally {
          blockOnIO();

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ClusterConnectionControlImpl.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ClusterConnectionControlImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ClusterConnectionControlImpl.java
index 17426d0..f374c3f 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ClusterConnectionControlImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ClusterConnectionControlImpl.java
@@ -22,10 +22,10 @@ import java.util.List;
 import java.util.Map;
 
 import 
org.apache.activemq.artemis.api.core.management.ClusterConnectionControl;
+import org.apache.activemq.artemis.api.core.JsonUtil;
 import org.apache.activemq.artemis.core.config.ClusterConnectionConfiguration;
 import org.apache.activemq.artemis.core.persistence.StorageManager;
 import org.apache.activemq.artemis.core.server.cluster.ClusterConnection;
-import org.apache.activemq.artemis.utils.json.JSONArray;
 
 public class ClusterConnectionControlImpl extends AbstractControl implements 
ClusterConnectionControl {
 
@@ -143,18 +143,7 @@ public class ClusterConnectionControlImpl extends 
AbstractControl implements Clu
    public String getStaticConnectorsAsJSON() throws Exception {
       clearIO();
       try {
-         List<String> connectors = configuration.getStaticConnectors();
-
-         if (connectors == null) {
-            return null;
-         }
-
-         JSONArray array = new JSONArray();
-
-         for (String connector : connectors) {
-            array.put(connector);
-         }
-         return array.toString();
+         return 
JsonUtil.toJsonArray(configuration.getStaticConnectors()).toString();
       }
       finally {
          blockOnIO();

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java
index a375cb3..de2459f 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java
@@ -16,6 +16,10 @@
  */
 package org.apache.activemq.artemis.core.management.impl;
 
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObjectBuilder;
 import javax.management.MBeanAttributeInfo;
 import javax.management.MBeanOperationInfo;
 import javax.management.openmbean.CompositeData;
@@ -27,6 +31,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.activemq.artemis.api.core.ActiveMQException;
+import org.apache.activemq.artemis.api.core.JsonUtil;
 import org.apache.activemq.artemis.api.core.Message;
 import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.api.core.management.MessageCounterInfo;
@@ -55,9 +60,6 @@ import 
org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
 import org.apache.activemq.artemis.utils.Base64;
 import org.apache.activemq.artemis.utils.LinkedListIterator;
 import org.apache.activemq.artemis.utils.UUID;
-import org.apache.activemq.artemis.utils.json.JSONArray;
-import org.apache.activemq.artemis.utils.json.JSONException;
-import org.apache.activemq.artemis.utils.json.JSONObject;
 
 public class QueueControlImpl extends AbstractControl implements QueueControl {
 
@@ -81,33 +83,28 @@ public class QueueControlImpl extends AbstractControl 
implements QueueControl {
    // Static --------------------------------------------------------
 
    private static String toJSON(final Map<String, Object>[] messages) {
-      JSONArray array = toJSONMsgArray(messages);
+      JsonArray array = toJSONMsgArray(messages);
       return array.toString();
    }
 
-   private static JSONArray toJSONMsgArray(final Map<String, Object>[] 
messages) {
-      JSONArray array = new JSONArray();
+   private static JsonArray toJSONMsgArray(final Map<String, Object>[] 
messages) {
+      JsonArrayBuilder array = Json.createArrayBuilder();
       for (Map<String, Object> message : messages) {
-         array.put(new JSONObject(message));
+         array.add(JsonUtil.toJsonObject(message));
       }
-      return array;
+      return array.build();
    }
 
    private static String toJSON(final Map<String, Map<String, Object>[]> 
messages) {
-      try {
-         JSONArray arrayReturn = new JSONArray();
-         for (Map.Entry<String, Map<String, Object>[]> entry : 
messages.entrySet()) {
-            JSONObject objectItem = new JSONObject();
-            objectItem.put("consumerName", entry.getKey());
-            objectItem.put("elements", toJSONMsgArray(entry.getValue()));
-            arrayReturn.put(objectItem);
-         }
-
-         return arrayReturn.toString();
-      }
-      catch (JSONException e) {
-         return "Invalid conversion " + e.toString();
+      JsonArrayBuilder arrayReturn = Json.createArrayBuilder();
+      for (Map.Entry<String, Map<String, Object>[]> entry : 
messages.entrySet()) {
+         JsonObjectBuilder objectItem = Json.createObjectBuilder();
+         objectItem.add("consumerName", entry.getKey());
+         objectItem.add("elements", toJSONMsgArray(entry.getValue()));
+         arrayReturn.add(objectItem);
       }
+
+      return arrayReturn.build().toString();
    }
 
    // Constructors --------------------------------------------------
@@ -950,26 +947,26 @@ public class QueueControlImpl extends AbstractControl 
implements QueueControl {
       try {
          Collection<Consumer> consumers = queue.getConsumers();
 
-         JSONArray jsonArray = new JSONArray();
+         JsonArrayBuilder jsonArray = Json.createArrayBuilder();
 
          for (Consumer consumer : consumers) {
 
             if (consumer instanceof ServerConsumer) {
                ServerConsumer serverConsumer = (ServerConsumer) consumer;
 
-               JSONObject obj = new JSONObject();
-               obj.put("consumerID", serverConsumer.getID());
-               obj.put("connectionID", 
serverConsumer.getConnectionID().toString());
-               obj.put("sessionID", serverConsumer.getSessionID());
-               obj.put("browseOnly", serverConsumer.isBrowseOnly());
-               obj.put("creationTime", serverConsumer.getCreationTime());
+               JsonObjectBuilder obj = Json.createObjectBuilder()
+                  .add("consumerID", serverConsumer.getID())
+                  .add("connectionID", 
serverConsumer.getConnectionID().toString())
+                  .add("sessionID", serverConsumer.getSessionID())
+                  .add("browseOnly", serverConsumer.isBrowseOnly())
+                  .add("creationTime", serverConsumer.getCreationTime());
 
-               jsonArray.put(obj);
+               jsonArray.add(obj);
             }
 
          }
 
-         return jsonArray.toString();
+         return jsonArray.build().toString();
       }
       finally {
          blockOnIO();

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
index 7378b5a..2b90cbc 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
@@ -16,6 +16,7 @@
  */
 package org.apache.activemq.artemis.core.server;
 
+import javax.json.JsonArrayBuilder;
 import javax.transaction.xa.Xid;
 import java.util.List;
 import java.util.Set;
@@ -27,7 +28,6 @@ import 
org.apache.activemq.artemis.core.postoffice.RoutingStatus;
 import org.apache.activemq.artemis.core.security.SecurityAuth;
 import org.apache.activemq.artemis.core.transaction.Transaction;
 import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
-import org.apache.activemq.artemis.utils.json.JSONArray;
 
 public interface ServerSession extends SecurityAuth {
 
@@ -166,7 +166,7 @@ public interface ServerSession extends SecurityAuth {
     * @param objs
     * @throws Exception
     */
-   void describeProducersInfo(JSONArray objs) throws Exception;
+   void describeProducersInfo(JsonArrayBuilder objs) throws Exception;
 
    String getLastSentMessageID(String address);
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
index e4ad9b4..79154f7 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
@@ -16,6 +16,9 @@
  */
 package org.apache.activemq.artemis.core.server.impl;
 
+import javax.json.Json;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObjectBuilder;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.Xid;
 import java.util.ArrayList;
@@ -83,10 +86,10 @@ import 
org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
 import org.apache.activemq.artemis.spi.core.protocol.SessionCallback;
 import org.apache.activemq.artemis.utils.TypedProperties;
 import org.apache.activemq.artemis.utils.UUID;
-import org.apache.activemq.artemis.utils.json.JSONArray;
-import org.apache.activemq.artemis.utils.json.JSONObject;
 import org.jboss.logging.Logger;
 
+import static org.apache.activemq.artemis.api.core.JsonUtil.nullSafe;
+
 /**
  * Server side Session implementation
  */
@@ -1402,17 +1405,21 @@ public class ServerSessionImpl implements 
ServerSession, FailureListener {
    }
 
    @Override
-   public void describeProducersInfo(JSONArray array) throws Exception {
+   public void describeProducersInfo(JsonArrayBuilder array) throws Exception {
       Map<SimpleString, Pair<UUID, AtomicLong>> targetCopy = 
cloneTargetAddresses();
 
       for (Map.Entry<SimpleString, Pair<UUID, AtomicLong>> entry : 
targetCopy.entrySet()) {
-         JSONObject producerInfo = new JSONObject();
-         producerInfo.put("connectionID", this.getConnectionID().toString());
-         producerInfo.put("sessionID", this.getName());
-         producerInfo.put("destination", entry.getKey().toString());
-         producerInfo.put("lastUUIDSent", entry.getValue().getA());
-         producerInfo.put("msgSent", entry.getValue().getB().longValue());
-         array.put(producerInfo);
+         String uuid = null;
+         if (entry.getValue().getA() != null) {
+            uuid = entry.getValue().getA().toString();
+         }
+         JsonObjectBuilder producerInfo = Json.createObjectBuilder()
+            .add("connectionID", this.getConnectionID().toString())
+            .add("sessionID", this.getName())
+            .add("destination", entry.getKey().toString())
+            .add("lastUUIDSent", nullSafe(uuid))
+            .add("msgSent", entry.getValue().getB().longValue());
+         array.add(producerInfo);
       }
    }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/TransactionDetail.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/TransactionDetail.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/TransactionDetail.java
index 068b15f..01b39dc 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/TransactionDetail.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/TransactionDetail.java
@@ -21,13 +21,16 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
+import javax.json.Json;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
 import javax.transaction.xa.Xid;
 
+import org.apache.activemq.artemis.api.core.JsonUtil;
 import org.apache.activemq.artemis.core.server.MessageReference;
 import org.apache.activemq.artemis.core.server.ServerMessage;
 import org.apache.activemq.artemis.core.transaction.impl.XidImpl;
-import org.apache.activemq.artemis.utils.json.JSONArray;
-import org.apache.activemq.artemis.utils.json.JSONObject;
 
 public abstract class TransactionDetail {
 
@@ -61,27 +64,24 @@ public abstract class TransactionDetail {
       this.creationTime = creation;
    }
 
-   public JSONObject toJSON() throws Exception {
+   public JsonObject toJSON() throws Exception {
       DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, 
DateFormat.MEDIUM);
-      JSONObject detailJson = new JSONObject();
+      JsonObjectBuilder detailJson = Json.createObjectBuilder()
+         .add(KEY_CREATION_TIME, dateFormat.format(new 
Date(this.creationTime)))
+         .add(KEY_XID_AS_BASE64, XidImpl.toBase64String(this.xid))
+         .add(KEY_XID_FORMAT_ID, this.xid.getFormatId())
+         .add(KEY_XID_GLOBAL_TXID, new 
String(this.xid.getGlobalTransactionId()))
+         .add(KEY_XID_BRANCH_QUAL, new String(this.xid.getBranchQualifier()));
 
-      detailJson.put(KEY_CREATION_TIME, dateFormat.format(new 
Date(this.creationTime)));
-      detailJson.put(KEY_XID_AS_BASE64, XidImpl.toBase64String(this.xid));
-      detailJson.put(KEY_XID_FORMAT_ID, this.xid.getFormatId());
-      detailJson.put(KEY_XID_GLOBAL_TXID, new 
String(this.xid.getGlobalTransactionId()));
-      detailJson.put(KEY_XID_BRANCH_QUAL, new 
String(this.xid.getBranchQualifier()));
-
-      JSONArray msgsJson = new JSONArray();
+      JsonArrayBuilder msgsJson = Json.createArrayBuilder();
 
       List<TransactionOperation> txops = null;
 
       if (this.transaction != null) {
          txops = this.transaction.getAllOperations();
       }
-
-      detailJson.put(KEY_TX_RELATED_MESSAGES, msgsJson);
       if (txops == null) {
-         return detailJson;
+         return detailJson.build();
       }
 
       for (TransactionOperation op : txops) {
@@ -100,18 +100,19 @@ public abstract class TransactionDetail {
          }
 
          for (MessageReference ref : msgs) {
-            JSONObject msgJson = new JSONObject();
-            msgsJson.put(msgJson);
+            JsonObjectBuilder msgJson = Json.createObjectBuilder();
 
-            msgJson.put(KEY_MSG_OP_TYPE, opType);
+            msgJson.add(KEY_MSG_OP_TYPE, opType);
 
             ServerMessage msg = ref.getMessage().copy();
 
-            msgJson.put(KEY_MSG_TYPE, decodeMessageType(msg));
-            msgJson.put(KEY_MSG_PROPERTIES, decodeMessageProperties(msg));
+            msgJson.add(KEY_MSG_TYPE, decodeMessageType(msg));
+            JsonUtil.addToObject(KEY_MSG_PROPERTIES, 
decodeMessageProperties(msg), msgJson);
+            msgsJson.add(msgJson);
          }
       }
-      return detailJson;
+      detailJson.add(KEY_TX_RELATED_MESSAGES, msgsJson);
+      return detailJson.build();
    }
 
    public abstract String decodeMessageType(ServerMessage msg);

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 20f78bb..4456c65 100644
--- a/pom.xml
+++ b/pom.xml
@@ -84,6 +84,8 @@
       <resteasy.version>3.0.17.Final</resteasy.version>
       <slf4j.version>1.7.12</slf4j.version>
       <qpid.jms.version>0.9.0</qpid.jms.version>
+      <johnzon.version>0.9.4</johnzon.version>
+      <json-p.spec.version>1.0-alpha-1</json-p.spec.version>
 
       
<activemq.version.versionName>${project.version}</activemq.version.versionName>
       <activemq.version.majorVersion>1</activemq.version.majorVersion>
@@ -91,9 +93,7 @@
       <activemq.version.microVersion>0</activemq.version.microVersion>
       
<activemq.version.incrementingVersion>127,126,125,124,123,122</activemq.version.incrementingVersion>
       
<activemq.version.versionTag>${project.version}</activemq.version.versionTag>
-      <ActiveMQ-Version>
-         ${project.version}(${activemq.version.incrementingVersion})
-      </ActiveMQ-Version>
+      
<ActiveMQ-Version>${project.version}(${activemq.version.incrementingVersion})</ActiveMQ-Version>
 
       <skipUnitTests>true</skipUnitTests>
       <skipJmsTests>true</skipJmsTests>
@@ -436,6 +436,17 @@
            <version>${slf4j.version}</version>
            <!-- License: MIT -->
          </dependency>
+         <!-- json -->
+         <dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-json_1.0_spec</artifactId>
+            <version>${json-p.spec.version}</version>
+         </dependency>
+         <dependency>
+            <groupId>org.apache.johnzon</groupId>
+            <artifactId>johnzon-core</artifactId>
+            <version>${johnzon.version}</version>
+         </dependency>
 
          <!--needed for the rest support-->
          <dependency>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/tests/integration-tests/pom.xml
----------------------------------------------------------------------
diff --git a/tests/integration-tests/pom.xml b/tests/integration-tests/pom.xml
index 5d7617c..3622eb1 100644
--- a/tests/integration-tests/pom.xml
+++ b/tests/integration-tests/pom.xml
@@ -73,6 +73,16 @@
          <version>${project.version}</version>
       </dependency>
       <dependency>
+         <groupId>org.apache.geronimo.specs</groupId>
+         <artifactId>geronimo-json_1.0_spec</artifactId>
+         <scope>test</scope>
+      </dependency>
+      <dependency>
+         <groupId>org.apache.johnzon</groupId>
+         <artifactId>johnzon-core</artifactId>
+         <scope>test</scope>
+      </dependency>
+      <dependency>
          <groupId>org.apache.activemq</groupId>
          <artifactId>artemis-jms-server</artifactId>
          <version>${project.version}</version>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/aerogear/AeroGearBasicServerTest.java
----------------------------------------------------------------------
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/aerogear/AeroGearBasicServerTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/aerogear/AeroGearBasicServerTest.java
index ded85ec..7babcfc 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/aerogear/AeroGearBasicServerTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/aerogear/AeroGearBasicServerTest.java
@@ -24,6 +24,7 @@ import 
org.apache.activemq.artemis.api.core.client.ClientSession;
 import org.apache.activemq.artemis.api.core.client.ClientSessionFactory;
 import org.apache.activemq.artemis.api.core.client.SendAcknowledgementHandler;
 import org.apache.activemq.artemis.api.core.client.ServerLocator;
+import org.apache.activemq.artemis.api.core.JsonUtil;
 import org.apache.activemq.artemis.core.config.Configuration;
 import org.apache.activemq.artemis.core.config.ConnectorServiceConfiguration;
 import org.apache.activemq.artemis.core.config.CoreQueueConfiguration;
@@ -31,9 +32,6 @@ import org.apache.activemq.artemis.core.server.ActiveMQServer;
 import 
org.apache.activemq.artemis.integration.aerogear.AeroGearConnectorServiceFactory;
 import org.apache.activemq.artemis.integration.aerogear.AeroGearConstants;
 import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
-import org.apache.activemq.artemis.utils.json.JSONArray;
-import org.apache.activemq.artemis.utils.json.JSONException;
-import org.apache.activemq.artemis.utils.json.JSONObject;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -42,6 +40,8 @@ import org.mortbay.jetty.Server;
 import org.mortbay.jetty.handler.AbstractHandler;
 import org.mortbay.jetty.nio.SelectChannelConnector;
 
+import javax.json.JsonArray;
+import javax.json.JsonObject;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -118,7 +118,7 @@ public class AeroGearBasicServerTest extends 
ActiveMQTestBase {
 
       assertTrue(latch.await(5, TimeUnit.SECONDS));
       assertNotNull(aeroGearHandler.jsonObject);
-      JSONObject body = (JSONObject) aeroGearHandler.jsonObject.get("message");
+      JsonObject body = aeroGearHandler.jsonObject.getJsonObject("message");
       assertNotNull(body);
       String prop1 = body.getString("AEROGEAR_PROP1");
       assertNotNull(prop1);
@@ -132,25 +132,24 @@ public class AeroGearBasicServerTest extends 
ActiveMQTestBase {
       String sound = body.getString("sound");
       assertNotNull(sound);
       assertEquals(sound, "sound1");
-      String badge = body.getString("badge");
+      int badge = body.getInt("badge");
       assertNotNull(badge);
-      assertEquals(badge, "99");
-      JSONArray jsonArray = (JSONArray) 
aeroGearHandler.jsonObject.get("variants");
+      assertEquals(badge, 99);
+      JsonArray jsonArray = 
aeroGearHandler.jsonObject.getJsonArray("variants");
       assertNotNull(jsonArray);
       assertEquals(jsonArray.getString(0), "variant1");
       assertEquals(jsonArray.getString(1), "variant2");
-      jsonArray = (JSONArray) aeroGearHandler.jsonObject.get("alias");
+      jsonArray = aeroGearHandler.jsonObject.getJsonArray("alias");
       assertNotNull(jsonArray);
       assertEquals(jsonArray.getString(0), "me");
       assertEquals(jsonArray.getString(1), "him");
       assertEquals(jsonArray.getString(2), "them");
-      jsonArray = (JSONArray) aeroGearHandler.jsonObject.get("deviceType");
+      jsonArray = aeroGearHandler.jsonObject.getJsonArray("deviceType");
       assertNotNull(jsonArray);
       assertEquals(jsonArray.getString(0), "android");
       assertEquals(jsonArray.getString(1), "ipad");
-      Integer ttl = (Integer) aeroGearHandler.jsonObject.get("ttl");
-      assertNotNull(ttl);
-      assertEquals(ttl.intValue(), 3600);
+      int ttl = aeroGearHandler.jsonObject.getInt("ttl");
+      assertEquals(ttl, 3600);
       latch = new CountDownLatch(1);
       aeroGearHandler.resetLatch(latch);
 
@@ -167,7 +166,7 @@ public class AeroGearBasicServerTest extends 
ActiveMQTestBase {
       producer.send(m);
       assertTrue(latch.await(5, TimeUnit.SECONDS));
       assertNotNull(aeroGearHandler.jsonObject);
-      body = (JSONObject) aeroGearHandler.jsonObject.get("message");
+      body = aeroGearHandler.jsonObject.getJsonObject("message");
       assertNotNull(body);
       alert = body.getString("alert");
       assertNotNull(alert);
@@ -175,24 +174,22 @@ public class AeroGearBasicServerTest extends 
ActiveMQTestBase {
       sound = body.getString("sound");
       assertNotNull(sound);
       assertEquals(sound, "s1");
-      badge = body.getString("badge");
-      assertNotNull(badge);
-      assertEquals(badge, "111");
-      jsonArray = (JSONArray) aeroGearHandler.jsonObject.get("variants");
+      badge = body.getInt("badge");
+      assertEquals(badge, 111);
+      jsonArray = aeroGearHandler.jsonObject.getJsonArray("variants");
       assertNotNull(jsonArray);
       assertEquals(jsonArray.getString(0), "v1");
       assertEquals(jsonArray.getString(1), "v2");
-      jsonArray = (JSONArray) aeroGearHandler.jsonObject.get("alias");
+      jsonArray = aeroGearHandler.jsonObject.getJsonArray("alias");
       assertNotNull(jsonArray);
       assertEquals(jsonArray.getString(0), "alias1");
       assertEquals(jsonArray.getString(1), "alias2");
-      jsonArray = (JSONArray) aeroGearHandler.jsonObject.get("deviceType");
+      jsonArray = aeroGearHandler.jsonObject.getJsonArray("deviceType");
       assertNotNull(jsonArray);
       assertEquals(jsonArray.getString(0), "dev1");
       assertEquals(jsonArray.getString(1), "dev2");
-      ttl = (Integer) aeroGearHandler.jsonObject.get("ttl");
-      assertNotNull(ttl);
-      assertEquals(ttl.intValue(), 10000);
+      ttl = aeroGearHandler.jsonObject.getInt("ttl");
+      assertEquals(ttl, 10000);
       session.start();
       ClientMessage message = 
session.createConsumer("testQueue").receiveImmediate();
       assertNull(message);
@@ -200,7 +197,7 @@ public class AeroGearBasicServerTest extends 
ActiveMQTestBase {
 
    class AeroGearHandler extends AbstractHandler {
 
-      JSONObject jsonObject;
+      JsonObject jsonObject;
       private CountDownLatch latch;
 
       AeroGearHandler(CountDownLatch latch) {
@@ -219,12 +216,7 @@ public class AeroGearBasicServerTest extends 
ActiveMQTestBase {
          byte[] bytes = new byte[httpServletRequest.getContentLength()];
          httpServletRequest.getInputStream().read(bytes);
          String json = new String(bytes);
-         try {
-            jsonObject = new JSONObject(json);
-         }
-         catch (JSONException e) {
-            jsonObject = null;
-         }
+         jsonObject = JsonUtil.readJsonObject(json);
          latch.countDown();
       }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/management/JMSQueueControlTest.java
----------------------------------------------------------------------
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/management/JMSQueueControlTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/management/JMSQueueControlTest.java
index 90aa8f9..406dc8f 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/management/JMSQueueControlTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/management/JMSQueueControlTest.java
@@ -43,6 +43,7 @@ import 
org.apache.activemq.artemis.api.core.client.ClientProducer;
 import org.apache.activemq.artemis.api.core.client.ClientSession;
 import org.apache.activemq.artemis.api.core.client.ClientSessionFactory;
 import org.apache.activemq.artemis.api.core.client.ServerLocator;
+import org.apache.activemq.artemis.api.core.JsonUtil;
 import org.apache.activemq.artemis.api.core.management.ObjectNameBuilder;
 import org.apache.activemq.artemis.api.jms.ActiveMQJMSClient;
 import org.apache.activemq.artemis.api.jms.JMSFactoryType;
@@ -68,10 +69,10 @@ import 
org.apache.activemq.artemis.tests.integration.management.ManagementTestBa
 import org.apache.activemq.artemis.tests.unit.util.InVMNamingContext;
 import org.apache.activemq.artemis.utils.RandomUtil;
 import org.apache.activemq.artemis.utils.UUIDGenerator;
-import org.apache.activemq.artemis.utils.json.JSONArray;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import javax.json.JsonArray;
 
 /**
  * A QueueControlTest
@@ -111,9 +112,9 @@ public class JMSQueueControlTest extends ManagementTestBase 
{
 
       Assert.assertEquals(1, queueControl.getConsumerCount());
 
-      JSONArray jsonArray = new JSONArray(queueControl.listConsumersAsJSON());
+      JsonArray jsonArray = 
JsonUtil.readJsonArray(queueControl.listConsumersAsJSON());
 
-      assertEquals(1, jsonArray.length());
+      assertEquals(1, jsonArray.size());
 
       JMSUtil.sendMessages(queue, 2);
 
@@ -433,17 +434,17 @@ public class JMSQueueControlTest extends 
ManagementTestBase {
 
       String jsonString = queueControl.listMessagesAsJSON(null);
       Assert.assertNotNull(jsonString);
-      JSONArray array = new JSONArray(jsonString);
-      Assert.assertEquals(2, array.length());
-      Assert.assertEquals(ids[0], array.getJSONObject(0).get("JMSMessageID"));
-      Assert.assertEquals(ids[1], array.getJSONObject(1).get("JMSMessageID"));
+      JsonArray array = JsonUtil.readJsonArray(jsonString);
+      Assert.assertEquals(2, array.size());
+      Assert.assertEquals(ids[0], 
array.getJsonObject(0).getString("JMSMessageID"));
+      Assert.assertEquals(ids[1], 
array.getJsonObject(1).getString("JMSMessageID"));
 
       JMSUtil.consumeMessages(2, queue);
 
       jsonString = queueControl.listMessagesAsJSON(null);
       Assert.assertNotNull(jsonString);
-      array = new JSONArray(jsonString);
-      Assert.assertEquals(0, array.length());
+      array = JsonUtil.readJsonArray(jsonString);
+      Assert.assertEquals(0, array.size());
    }
 
    @Test

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/management/JMSServerControlTest.java
----------------------------------------------------------------------
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/management/JMSServerControlTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/management/JMSServerControlTest.java
index 11546fc..41bfc70 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/management/JMSServerControlTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/management/JMSServerControlTest.java
@@ -22,6 +22,7 @@ import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.api.core.TransportConfiguration;
 import org.apache.activemq.artemis.api.core.client.ActiveMQClient;
 import org.apache.activemq.artemis.api.core.management.AddressControl;
+import org.apache.activemq.artemis.api.core.JsonUtil;
 import org.apache.activemq.artemis.api.core.management.ObjectNameBuilder;
 import org.apache.activemq.artemis.api.core.management.ResourceNames;
 import org.apache.activemq.artemis.api.jms.ActiveMQJMSClient;
@@ -48,7 +49,6 @@ import 
org.apache.activemq.artemis.tests.integration.management.ManagementTestBa
 import org.apache.activemq.artemis.tests.unit.util.InVMNamingContext;
 import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
 import org.apache.activemq.artemis.utils.RandomUtil;
-import org.apache.activemq.artemis.utils.json.JSONArray;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -66,6 +66,7 @@ import javax.jms.Topic;
 import javax.jms.XAConnection;
 import javax.jms.XAConnectionFactory;
 import javax.jms.XASession;
+import javax.json.JsonArray;
 import javax.naming.NamingException;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
@@ -627,15 +628,15 @@ public class JMSServerControlTest extends 
ManagementTestBase {
       // create a consumer will create a Core queue bound to the topic address
       MessageConsumer cons = session.createConsumer(topic);
 
-      JSONArray jsonArray = new JSONArray(control.listAllConsumersAsJSON());
+      JsonArray jsonArray = 
JsonUtil.readJsonArray(control.listAllConsumersAsJSON());
 
-      Assert.assertEquals(1 + getNumberOfConsumers(), jsonArray.length());
+      Assert.assertEquals(1 + getNumberOfConsumers(), jsonArray.size());
 
       cons.close();
 
-      jsonArray = new JSONArray(control.listAllConsumersAsJSON());
+      jsonArray = JsonUtil.readJsonArray(control.listAllConsumersAsJSON());
 
-      Assert.assertEquals(getNumberOfConsumers(), jsonArray.length());
+      Assert.assertEquals(getNumberOfConsumers(), jsonArray.size());
 
       String topicAddress = 
ActiveMQDestination.createTopicAddressFromName(topicName).toString();
       AddressControl addressControl = (AddressControl) 
server.getManagementService().getResource(ResourceNames.CORE_ADDRESS + 
topicAddress);

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/management/TopicControlTest.java
----------------------------------------------------------------------
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/management/TopicControlTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/management/TopicControlTest.java
index 238aaa0..25fd608 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/management/TopicControlTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/server/management/TopicControlTest.java
@@ -17,6 +17,7 @@
 package org.apache.activemq.artemis.tests.integration.jms.server.management;
 
 import org.apache.activemq.artemis.api.core.client.ActiveMQClient;
+import org.apache.activemq.artemis.api.core.JsonUtil;
 import org.apache.activemq.artemis.api.core.management.ObjectNameBuilder;
 import org.apache.activemq.artemis.api.jms.ActiveMQJMSClient;
 import org.apache.activemq.artemis.api.jms.management.JMSServerControl;
@@ -37,7 +38,6 @@ import 
org.apache.activemq.artemis.tests.integration.management.ManagementContro
 import 
org.apache.activemq.artemis.tests.integration.management.ManagementTestBase;
 import org.apache.activemq.artemis.tests.unit.util.InVMNamingContext;
 import org.apache.activemq.artemis.utils.RandomUtil;
-import org.apache.activemq.artemis.utils.json.JSONArray;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -51,6 +51,7 @@ import javax.jms.MessageProducer;
 import javax.jms.Session;
 import javax.jms.TextMessage;
 import javax.jms.TopicSubscriber;
+import javax.json.JsonArray;
 import javax.management.Notification;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -159,9 +160,9 @@ public class TopicControlTest extends ManagementTestBase {
 
       String json = topicControl.listAllSubscriptionsAsJSON();
       System.out.println("Json: " + json);
-      JSONArray jsonArray = new JSONArray(json);
+      JsonArray jsonArray = JsonUtil.readJsonArray(json);
 
-      Assert.assertEquals(3, jsonArray.length());
+      Assert.assertEquals(3, jsonArray.size());
 
       connection_1.close();
       connection_2.close();
@@ -221,17 +222,17 @@ public class TopicControlTest extends ManagementTestBase {
       SubscriptionInfo[] infos = SubscriptionInfo.from(jsonString);
       Assert.assertEquals(2, infos.length);
 
-      Assert.assertTrue(infos[0].getClientID().length() == 0);
+      Assert.assertNull(infos[0].getClientID());
       Assert.assertTrue(infos[0].getName().equals(subscriptionName));
 
-      Assert.assertTrue(infos[1].getClientID().length() == 0);
+      Assert.assertNull(infos[1].getClientID());
       Assert.assertTrue(infos[1].getName().equals(subscriptionName + "2"));
 
       jsonString = topicControl.listNonDurableSubscriptionsAsJSON();
       infos = SubscriptionInfo.from(jsonString);
       Assert.assertEquals(1, infos.length);
-      Assert.assertEquals(null, infos[0].getClientID());
-      Assert.assertEquals(null, infos[0].getName());
+      Assert.assertNull(infos[0].getClientID());
+      Assert.assertNull(infos[0].getName());
 
       jsonString = topicControl.listAllSubscriptionsAsJSON();
       infos = SubscriptionInfo.from(jsonString);
@@ -442,10 +443,10 @@ public class TopicControlTest extends ManagementTestBase {
       TopicControl topicControl = createManagementControl();
       String jsonString = 
topicControl.listMessagesForSubscriptionAsJSON(ActiveMQDestination.createQueueNameForDurableSubscription(true,
 clientID, subscriptionName));
       Assert.assertNotNull(jsonString);
-      JSONArray array = new JSONArray(jsonString);
-      Assert.assertEquals(3, array.length());
+      JsonArray array = JsonUtil.readJsonArray(jsonString);
+      Assert.assertEquals(3, array.size());
       for (int i = 0; i < 3; i++) {
-         Assert.assertEquals(ids[i], 
array.getJSONObject(i).get("JMSMessageID"));
+         Assert.assertEquals(ids[i], 
array.getJsonObject(i).getString("JMSMessageID"));
       }
 
       connection.close();

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
----------------------------------------------------------------------
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
index 2d4d983..7de651d 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.activemq.artemis.tests.integration.management;
 
+import javax.json.JsonArray;
+import javax.json.JsonObject;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
 import java.util.HashMap;
@@ -33,6 +35,7 @@ import 
org.apache.activemq.artemis.api.core.management.ActiveMQServerControl;
 import org.apache.activemq.artemis.api.core.management.AddressSettingsInfo;
 import org.apache.activemq.artemis.api.core.management.BridgeControl;
 import org.apache.activemq.artemis.api.core.management.DivertControl;
+import org.apache.activemq.artemis.api.core.JsonUtil;
 import org.apache.activemq.artemis.api.core.management.ObjectNameBuilder;
 import org.apache.activemq.artemis.api.core.management.QueueControl;
 import org.apache.activemq.artemis.api.core.management.RoleInfo;
@@ -47,8 +50,6 @@ import 
org.apache.activemq.artemis.core.transaction.impl.XidImpl;
 import org.apache.activemq.artemis.jlibaio.LibaioContext;
 import org.apache.activemq.artemis.utils.RandomUtil;
 import org.apache.activemq.artemis.utils.UUIDGenerator;
-import org.apache.activemq.artemis.utils.json.JSONArray;
-import org.apache.activemq.artemis.utils.json.JSONObject;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -154,12 +155,12 @@ public class ActiveMQServerControlTest extends 
ManagementTestBase {
 
       String jsonString = serverControl.getConnectorsAsJSON();
       Assert.assertNotNull(jsonString);
-      JSONArray array = new JSONArray(jsonString);
-      Assert.assertEquals(1, array.length());
-      JSONObject data = array.getJSONObject(0);
-      Assert.assertEquals(connectorConfig.getName(), data.optString("name"));
-      Assert.assertEquals(connectorConfig.getFactoryClassName(), 
data.optString("factoryClassName"));
-      Assert.assertEquals(connectorConfig.getParams().size(), 
data.getJSONObject("params").length());
+      JsonArray array = JsonUtil.readJsonArray(jsonString);
+      Assert.assertEquals(1, array.size());
+      JsonObject data = array.getJsonObject(0);
+      Assert.assertEquals(connectorConfig.getName(), data.getString("name"));
+      Assert.assertEquals(connectorConfig.getFactoryClassName(), 
data.getString("factoryClassName"));
+      Assert.assertEquals(connectorConfig.getParams().size(), 
data.getJsonObject("params").size());
    }
 
    @Test
@@ -755,10 +756,10 @@ public class ActiveMQServerControlTest extends 
ManagementTestBase {
 
       ActiveMQServerControl serverControl = createManagementControl();
 
-      JSONArray jsonArray = new 
JSONArray(serverControl.listProducersInfoAsJSON());
+      JsonArray jsonArray = 
JsonUtil.readJsonArray(serverControl.listProducersInfoAsJSON());
 
-      assertEquals(1, jsonArray.length());
-      assertEquals(4, ((JSONObject) jsonArray.get(0)).getInt("msgSent"));
+      assertEquals(1, jsonArray.size());
+      assertEquals(4, ((JsonObject) jsonArray.get(0)).getInt("msgSent"));
 
       clientSession.close();
       locator.close();

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/BroadcastGroupControlTest.java
----------------------------------------------------------------------
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/BroadcastGroupControlTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/BroadcastGroupControlTest.java
index 0298eb4..ce8873f 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/BroadcastGroupControlTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/BroadcastGroupControlTest.java
@@ -20,15 +20,16 @@ import 
org.apache.activemq.artemis.api.core.BroadcastGroupConfiguration;
 import org.apache.activemq.artemis.api.core.TransportConfiguration;
 import org.apache.activemq.artemis.api.core.UDPBroadcastEndpointFactory;
 import org.apache.activemq.artemis.api.core.management.BroadcastGroupControl;
+import org.apache.activemq.artemis.api.core.JsonUtil;
 import org.apache.activemq.artemis.core.config.Configuration;
 import org.apache.activemq.artemis.core.server.ActiveMQServer;
 import org.apache.activemq.artemis.core.server.ActiveMQServers;
 import org.apache.activemq.artemis.utils.RandomUtil;
-import org.apache.activemq.artemis.utils.json.JSONArray;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
+import javax.json.JsonArray;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -54,8 +55,8 @@ public class BroadcastGroupControlTest extends 
ManagementTestBase {
       Assert.assertEquals(broadcastGroupConfig.getConnectorInfos().get(0), 
connectorPairData);
       String jsonString = broadcastGroupControl.getConnectorPairsAsJSON();
       Assert.assertNotNull(jsonString);
-      JSONArray array = new JSONArray(jsonString);
-      Assert.assertEquals(1, array.length());
+      JsonArray array = JsonUtil.readJsonArray(jsonString);
+      Assert.assertEquals(1, array.size());
       Assert.assertEquals(broadcastGroupConfig.getConnectorInfos().get(0), 
array.getString(0));
 
       Assert.assertTrue(broadcastGroupControl.isStarted());

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ClusterConnectionControlTest.java
----------------------------------------------------------------------
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ClusterConnectionControlTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ClusterConnectionControlTest.java
index 98b9bed..f2b85ec 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ClusterConnectionControlTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ClusterConnectionControlTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.activemq.artemis.tests.integration.management;
 
+import org.apache.activemq.artemis.api.core.JsonUtil;
 import 
org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType;
 import org.junit.Before;
 import org.junit.After;
@@ -26,6 +27,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.json.JsonArray;
 import javax.management.MBeanServer;
 import javax.management.MBeanServerFactory;
 
@@ -48,7 +50,6 @@ import 
org.apache.activemq.artemis.core.server.ActiveMQServers;
 import org.apache.activemq.artemis.core.server.management.Notification;
 import org.apache.activemq.artemis.tests.integration.SimpleNotificationService;
 import org.apache.activemq.artemis.utils.RandomUtil;
-import org.apache.activemq.artemis.utils.json.JSONArray;
 
 public class ClusterConnectionControlTest extends ManagementTestBase {
 
@@ -91,8 +92,8 @@ public class ClusterConnectionControlTest extends 
ManagementTestBase {
 
       String jsonString = clusterConnectionControl.getStaticConnectorsAsJSON();
       Assert.assertNotNull(jsonString);
-      JSONArray array = new JSONArray(jsonString);
-      Assert.assertEquals(1, array.length());
+      JsonArray array = JsonUtil.readJsonArray(jsonString);
+      Assert.assertEquals(1, array.size());
       
Assert.assertEquals(clusterConnectionConfig1.getStaticConnectors().get(0), 
array.getString(0));
 
       Assert.assertNull(clusterConnectionControl.getDiscoveryGroupName());

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ManagementHelperTest.java
----------------------------------------------------------------------
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ManagementHelperTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ManagementHelperTest.java
index bf72cc6..9fb95e7 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ManagementHelperTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ManagementHelperTest.java
@@ -227,87 +227,6 @@ public class ManagementHelperTest extends Assert {
 
    }
 
-   @Test
-   public void testFromCommaSeparatedKeyValues() throws Exception {
-      String str = "key1=1, key2=false, key3=2.0, key4=whatever";
-
-      Map<String, Object> map = 
ManagementHelper.fromCommaSeparatedKeyValues(str);
-      Assert.assertEquals(4, map.size());
-      Assert.assertTrue(map.containsKey("key1"));
-      Assert.assertEquals(1L, map.get("key1"));
-
-      Assert.assertTrue(map.containsKey("key2"));
-      Assert.assertEquals(false, map.get("key2"));
-
-      Assert.assertTrue(map.containsKey("key3"));
-      Assert.assertEquals(2.0, map.get("key3"));
-
-      Assert.assertTrue(map.containsKey("key4"));
-      Assert.assertEquals("whatever", map.get("key4"));
-   }
-
-   @Test
-   public void 
testFromCommaSeparatedArrayOfCommaSeparatedKeyValuesForSingleItem() throws 
Exception {
-      // if there is a single item, no need to enclose it in { }
-      String str = "k11=1, k12=false, k13=2.0, k14=whatever ";
-
-      Object[] objects = 
ManagementHelper.fromCommaSeparatedArrayOfCommaSeparatedKeyValues(str);
-      Assert.assertEquals(1, objects.length);
-
-      Assert.assertTrue(objects[0] instanceof Map<?, ?>);
-      Map<String, Object> map = (Map<String, Object>) objects[0];
-      Assert.assertEquals(4, map.size());
-      Assert.assertTrue(map.containsKey("k11"));
-      Assert.assertEquals(1L, map.get("k11"));
-
-      Assert.assertTrue(map.containsKey("k12"));
-      Assert.assertEquals(false, map.get("k12"));
-
-      Assert.assertTrue(map.containsKey("k13"));
-      Assert.assertEquals(2.0, map.get("k13"));
-
-      Assert.assertTrue(map.containsKey("k14"));
-      Assert.assertEquals("whatever", map.get("k14"));
-   }
-
-   @Test
-   public void testFromCommaSeparatedArrayOfCommaSeparatedKeyValues() throws 
Exception {
-      String str = "{ k11=1, k12=false, k13=2.0, k14=whatever },{ k21=2, 
k22=true, k23=23.0, k24=foo }";
-
-      Object[] objects = 
ManagementHelper.fromCommaSeparatedArrayOfCommaSeparatedKeyValues(str);
-      Assert.assertEquals(2, objects.length);
-
-      Assert.assertTrue(objects[0] instanceof Map<?, ?>);
-      Map<String, Object> map = (Map<String, Object>) objects[0];
-      Assert.assertEquals(4, map.size());
-      Assert.assertTrue(map.containsKey("k11"));
-      Assert.assertEquals(1L, map.get("k11"));
-
-      Assert.assertTrue(map.containsKey("k12"));
-      Assert.assertEquals(false, map.get("k12"));
-
-      Assert.assertTrue(map.containsKey("k13"));
-      Assert.assertEquals(2.0, map.get("k13"));
-
-      Assert.assertTrue(map.containsKey("k14"));
-      Assert.assertEquals("whatever", map.get("k14"));
-
-      Assert.assertTrue(objects[1] instanceof Map<?, ?>);
-      map = (Map<String, Object>) objects[1];
-      Assert.assertEquals(4, map.size());
-      Assert.assertTrue(map.containsKey("k21"));
-      Assert.assertEquals(2L, map.get("k21"));
-
-      Assert.assertTrue(map.containsKey("k22"));
-      Assert.assertEquals(true, map.get("k22"));
-
-      Assert.assertTrue(map.containsKey("k23"));
-      Assert.assertEquals(23.0, map.get("k23"));
-
-      Assert.assertTrue(map.containsKey("k24"));
-      Assert.assertEquals("foo", map.get("k24"));
-   }
-
    // Package protected ---------------------------------------------
 
    // Protected -----------------------------------------------------

Reply via email to