http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/json/JSONObject.java
----------------------------------------------------------------------
diff --git 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/json/JSONObject.java
 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/json/JSONObject.java
deleted file mode 100644
index ce1053f..0000000
--- 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/json/JSONObject.java
+++ /dev/null
@@ -1,1540 +0,0 @@
-/*
-Copyright (c) 2002 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-package org.apache.activemq.artemis.utils.json;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.TreeSet;
-
-/**
- * A JSONObject is an unordered collection of name/value pairs.
- * <p>
- * Its external form is a string wrapped in curly braces with colons between 
the names and values,
- * and commas between the values and names. The internal form is an object 
having <code>get</code>
- * and <code>opt</code> methods for accessing the values by name, and 
<code>put</code> methods for
- * adding or replacing values by name.
- * <p>
- * The values can be any of these types: <code>Boolean</code>, 
<code>JSONArray</code>,
- * <code>JSONObject</code>, <code>Number</code>, {@code string}, or the
- * <code>JSONObject.NULL</code> object. A JSONObject constructor can be used 
to convert an external
- * form JSON text into an internal form whose values can be retrieved with the 
<code>get</code> and
- * <code>opt</code> methods, or to convert values into a JSON text using the 
<code>put</code> and
- * <code>toString</code> methods. A <code>get</code> method returns a value if 
one can be found, and
- * throws an exception if one cannot be found. An <code>opt</code> method 
returns a default value
- * instead of throwing an exception, and so is useful for obtaining optional 
values.
- * <p>
- * The generic <code>get()</code> and <code>opt()</code> methods return an 
object, which you can
- * cast or query for type. There are also typed <code>get</code> and 
<code>opt</code> methods that
- * do type checking and type coercion for you.
- * <p>
- * The <code>put</code> methods adds values to an object. For example,
- *
- * <pre>
- * myString = new JSONObject().put(&quot;JSON&quot;, &quot;Hello, 
World!&quot;).toString();
- * </pre>
- *
- * produces the string <code>{"JSON": "Hello, World"}</code>.
- * <p>
- * The texts produced by the <code>toString</code> methods strictly conform to 
the JSON syntax
- * rules. The constructors are more forgiving in the texts they will accept:
- * <ul>
- * <li>An extra <code>,</code>&nbsp;<small>(comma)</small> may appear just 
before the closing brace.
- * </li>
- * <li>Strings may be quoted with <code>'</code>&nbsp;<small>(single 
quote)</small>.</li>
- * <li>Strings do not need to be quoted at all if they do not begin with a 
quote or single quote,
- * and if they do not contain leading or trailing spaces, and if they do not 
contain any of these
- * characters: <code>{ } [ ] / \ : , = ; #</code> and if they do not look like 
numbers and if they
- * are not the reserved words <code>true</code>, <code>false</code>, or {@code 
null}.</li>
- * <li>Keys can be followed by <code>=</code> or <code>=&gt;</code> as well as 
by <code>:</code>.</li>
- * <li>Values can be followed by <code>;</code> <small>(semicolon)</small> as 
well as by
- * <code>,</code> <small>(comma)</small>.</li>
- * <li>Numbers may have the <code>0-</code> <small>(octal)</small> or 
<code>0x-</code>
- * <small>(hex)</small> prefix.</li>
- * </ul>
- */
-public class JSONObject {
-
-   /**
-    * JSONObject.NULL is equivalent to the value that JavaScript calls null,
-    * whilst Java's null is equivalent to the value that JavaScript calls
-    * undefined.
-    */
-   private static final class Null {
-
-      /**
-       * There is only intended to be a single instance of the NULL object,
-       * so the clone method returns itself.
-       *
-       * @return NULL.
-       */
-      @Override
-      protected Object clone() {
-         return this;
-      }
-
-      /**
-       * A Null object is equal to the null value and to itself.
-       *
-       * @param object An object to test for nullness.
-       * @return true if the object parameter is the JSONObject.NULL object
-       * or null.
-       */
-      @Override
-      public boolean equals(final Object object) {
-         return object == null || object == this;
-      }
-
-      @Override
-      public int hashCode() {
-         // TODO
-         return 0;
-      }
-
-      /**
-       * Get the "null" string value.
-       *
-       * @return The string "null".
-       */
-      @Override
-      public String toString() {
-         return "null";
-      }
-   }
-
-   /**
-    * The map where the JSONObject's properties are kept.
-    */
-   private final Map map;
-
-   /**
-    * It is sometimes more convenient and less ambiguous to have a
-    * {@code null} object than to use Java's {@code null} value.
-    * <code>JSONObject.NULL.equals(null)</code> returns <code>true</code>.
-    * <code>JSONObject.NULL.toString()</code> returns <code>"null"</code>.
-    */
-   public static final Object NULL = new Null();
-
-   /**
-    * Construct an empty JSONObject.
-    */
-   public JSONObject() {
-      map = new HashMap();
-   }
-
-   /**
-    * Construct a JSONObject from a subset of another JSONObject.
-    * An array of strings is used to identify the keys that should be copied.
-    * Missing keys are ignored.
-    *
-    * @param jo    A JSONObject.
-    * @param names An array of strings.
-    * @throws JSONException If a value is a non-finite number or if a name is 
duplicated.
-    */
-   public JSONObject(final JSONObject jo, final String[] names) throws 
JSONException {
-      this();
-      for (String name : names) {
-         putOnce(name, jo.opt(name));
-      }
-   }
-
-   /**
-    * Construct a JSONObject from a JSONTokener.
-    *
-    * @param x A JSONTokener object containing the source string.
-    * @throws JSONException If there is a syntax error in the source string
-    *                       or a duplicated key.
-    */
-   public JSONObject(final JSONTokener x) throws JSONException {
-      this();
-      char c;
-      String key;
-
-      if (x.nextClean() != '{') {
-         throw x.syntaxError("A JSONObject text must begin with '{'");
-      }
-      for (;;) {
-         c = x.nextClean();
-         switch (c) {
-            case 0:
-               throw x.syntaxError("A JSONObject text must end with '}'");
-            case '}':
-               return;
-            default:
-               x.back();
-               key = x.nextValue().toString();
-         }
-
-         /*
-          * The key is followed by ':'. We will also tolerate '=' or '=>'.
-          */
-
-         c = x.nextClean();
-         if (c == '=') {
-            if (x.next() != '>') {
-               x.back();
-            }
-         }
-         else if (c != ':') {
-            throw x.syntaxError("Expected a ':' after a key");
-         }
-         putOnce(key, x.nextValue());
-
-         /*
-          * Pairs are separated by ','. We will also tolerate ';'.
-          */
-
-         switch (x.nextClean()) {
-            case ';':
-            case ',':
-               if (x.nextClean() == '}') {
-                  return;
-               }
-               x.back();
-               break;
-            case '}':
-               return;
-            default:
-               throw x.syntaxError("Expected a ',' or '}'");
-         }
-      }
-   }
-
-   /**
-    * Construct a JSONObject from a Map.
-    *
-    * @param map A map object that can be used to initialize the contents of
-    *            the JSONObject.
-    */
-   public JSONObject(final Map map) {
-      this.map = map == null ? new HashMap() : map;
-   }
-
-   /**
-    * Construct a JSONObject from a Map.
-    *
-    * Note: Use this constructor when the map contains &lt;key,bean&gt;.
-    *
-    * @param map               - A map with Key-Bean data.
-    * @param includeSuperClass - Tell whether to include the super class 
properties.
-    */
-   public JSONObject(final Map map, final boolean includeSuperClass) {
-      this.map = new HashMap();
-      if (map != null) {
-         Iterator<Map.Entry> i = map.entrySet().iterator();
-         while (i.hasNext()) {
-            Map.Entry e = i.next();
-            if (JSONObject.isStandardProperty(e.getValue().getClass())) {
-               this.map.put(e.getKey(), e.getValue());
-            }
-            else {
-               this.map.put(e.getKey(), new JSONObject(e.getValue(), 
includeSuperClass));
-            }
-         }
-      }
-   }
-
-   /**
-    * Construct a JSONObject from an Object using bean getters.
-    * It reflects on all of the public methods of the object.
-    * For each of the methods with no parameters and a name starting
-    * with <code>"get"</code> or <code>"is"</code> followed by an uppercase 
letter,
-    * the method is invoked, and a key and the value returned from the getter 
method
-    * are put into the new JSONObject.
-    *
-    * The key is formed by removing the <code>"get"</code> or 
<code>"is"</code> prefix.
-    * If the second remaining character is not upper case, then the first
-    * character is converted to lower case.
-    *
-    * For example, if an object has a method named <code>"getName"</code>, and
-    * if the result of calling <code>object.getName()</code> is <code>"Larry 
Fine"</code>,
-    * then the JSONObject will contain <code>"name": "Larry Fine"</code>.
-    *
-    * @param bean An object that has getter methods that should be used
-    *             to make a JSONObject.
-    */
-   public JSONObject(final Object bean) {
-      this();
-      populateInternalMap(bean, false);
-   }
-
-   /**
-    * Construct a JSONObject from an Object using bean getters.
-    * It reflects on all of the public methods of the object.
-    * For each of the methods with no parameters and a name starting
-    * with <code>"get"</code> or <code>"is"</code> followed by an uppercase 
letter,
-    * the method is invoked, and a key and the value returned from the getter 
method
-    * are put into the new JSONObject.
-    *
-    * The key is formed by removing the <code>"get"</code> or 
<code>"is"</code> prefix.
-    * If the second remaining character is not upper case, then the first
-    * character is converted to lower case.
-    *
-    * @param bean              An object that has getter methods that should 
be used
-    *                          to make a JSONObject.
-    * @param includeSuperClass If true, include the super class properties.
-    */
-   public JSONObject(final Object bean, final boolean includeSuperClass) {
-      this();
-      populateInternalMap(bean, includeSuperClass);
-   }
-
-   private void populateInternalMap(final Object bean, boolean 
includeSuperClass) {
-      Class klass = bean.getClass();
-
-      /* If klass.getSuperClass is System class then force includeSuperClass 
to false. */
-
-      if (klass.getClassLoader() == null) {
-         includeSuperClass = false;
-      }
-
-      Method[] methods = includeSuperClass ? klass.getMethods() : 
klass.getDeclaredMethods();
-      for (Method method : methods) {
-         try {
-            if (Modifier.isPublic(method.getModifiers())) {
-               String name = method.getName();
-               String key = "";
-               if (name.startsWith("get")) {
-                  key = name.substring(3);
-               }
-               else if (name.startsWith("is")) {
-                  key = name.substring(2);
-               }
-               if (key.length() > 0 && Character.isUpperCase(key.charAt(0)) && 
method.getParameterTypes().length == 0) {
-                  if (key.length() == 1) {
-                     key = key.toLowerCase();
-                  }
-                  else if (!Character.isUpperCase(key.charAt(1))) {
-                     key = key.substring(0, 1).toLowerCase() + 
key.substring(1);
-                  }
-
-                  Object result = method.invoke(bean, (Object[]) null);
-                  if (result == null) {
-                     map.put(key, JSONObject.NULL);
-                  }
-                  else if (result.getClass().isArray()) {
-                     map.put(key, new JSONArray(result, includeSuperClass));
-                  }
-                  else if (result instanceof Collection) { // List or Set
-                     map.put(key, new JSONArray((Collection) result, 
includeSuperClass));
-                  }
-                  else if (result instanceof Map) {
-                     map.put(key, new JSONObject((Map) result, 
includeSuperClass));
-                  }
-                  else if (JSONObject.isStandardProperty(result.getClass())) { 
// Primitives, String and Wrapper
-                     map.put(key, result);
-                  }
-                  else {
-                     if 
(result.getClass().getPackage().getName().startsWith("java") || 
result.getClass().getClassLoader() == null) {
-                        map.put(key, result.toString());
-                     }
-                     else { // User defined Objects
-                        map.put(key, new JSONObject(result, 
includeSuperClass));
-                     }
-                  }
-               }
-            }
-         }
-         catch (IllegalAccessException | InvocationTargetException | 
JSONException e) {
-            throw new RuntimeException(e);
-         }
-      }
-   }
-
-   static boolean isStandardProperty(final Class<? extends Object> clazz) {
-      return clazz.isPrimitive() || clazz.isAssignableFrom(Byte.class) ||
-         clazz.isAssignableFrom(Short.class) ||
-         clazz.isAssignableFrom(Integer.class) ||
-         clazz.isAssignableFrom(Long.class) ||
-         clazz.isAssignableFrom(Float.class) ||
-         clazz.isAssignableFrom(Double.class) ||
-         clazz.isAssignableFrom(Character.class) ||
-         clazz.isAssignableFrom(String.class) ||
-         clazz.isAssignableFrom(Boolean.class);
-   }
-
-   /**
-    * Construct a JSONObject from an Object, using reflection to find the
-    * public members. The resulting JSONObject's keys will be the strings
-    * from the names array, and the values will be the field values associated
-    * with those keys in the object. If a key is not found or not visible,
-    * then it will not be copied into the new JSONObject.
-    *
-    * @param object An object that has fields that should be used to make a
-    *               JSONObject.
-    * @param names  An array of strings, the names of the fields to be obtained
-    *               from the object.
-    */
-   public JSONObject(final Object object, final String[] names) {
-      this();
-      Class c = object.getClass();
-      for (String name : names) {
-         try {
-            putOpt(name, c.getField(name).get(object));
-         }
-         catch (Exception e) {
-            /* forget about it */
-         }
-      }
-   }
-
-   /**
-    * Construct a JSONObject from a source JSON text string.
-    * This is the most commonly used JSONObject constructor.
-    *
-    * @param source A string beginning
-    *               with <code>{</code>&nbsp;<small>(left brace)</small> and 
ending
-    *               with <code>}</code>&nbsp;<small>(right brace)</small>.
-    * @throws JSONException If there is a syntax error in the source
-    *                       string or a duplicated key.
-    */
-   public JSONObject(final String source) throws JSONException {
-      this(new JSONTokener(source));
-   }
-
-   /**
-    * Accumulate values under a key. It is similar to the put method except
-    * that if there is already an object stored under the key then a
-    * JSONArray is stored under the key to hold all of the accumulated values.
-    * If there is already a JSONArray, then the new value is appended to it.
-    * In contrast, the put method replaces the previous value.
-    *
-    * @param key   A key string.
-    * @param value An object to be accumulated under the key.
-    * @return this.
-    * @throws JSONException If the value is an invalid number
-    *                       or if the key is null.
-    */
-   public JSONObject accumulate(final String key, final Object value) throws 
JSONException {
-      JSONObject.testValidity(value);
-      Object o = opt(key);
-      if (o == null) {
-         put(key, value instanceof JSONArray ? new JSONArray().put(value) : 
value);
-      }
-      else if (o instanceof JSONArray) {
-         ((JSONArray) o).put(value);
-      }
-      else {
-         put(key, new JSONArray().put(o).put(value));
-      }
-      return this;
-   }
-
-   /**
-    * Append values to the array under a key. If the key does not exist in the
-    * JSONObject, then the key is put in the JSONObject with its value being a
-    * JSONArray containing the value parameter. If the key was already
-    * associated with a JSONArray, then the value parameter is appended to it.
-    *
-    * @param key   A key string.
-    * @param value An object to be accumulated under the key.
-    * @return this.
-    * @throws JSONException If the key is null or if the current value
-    *                       associated with the key is not a JSONArray.
-    */
-   public JSONObject append(final String key, final Object value) throws 
JSONException {
-      JSONObject.testValidity(value);
-      Object o = opt(key);
-      if (o == null) {
-         put(key, new JSONArray().put(value));
-      }
-      else if (o instanceof JSONArray) {
-         put(key, ((JSONArray) o).put(value));
-      }
-      else {
-         throw new JSONException("JSONObject[" + key + "] is not a 
JSONArray.");
-      }
-      return this;
-   }
-
-   /**
-    * Produce a string from a double. The string "null" will be returned if
-    * the number is not finite.
-    *
-    * @param d A double.
-    * @return A String.
-    */
-   public static String doubleToString(final double d) {
-      if (Double.isInfinite(d) || Double.isNaN(d)) {
-         return "null";
-      }
-
-      // Shave off trailing zeros and decimal point, if possible.
-
-      String s = Double.toString(d);
-      if (s.indexOf('.') > 0 && s.indexOf('e') < 0 && s.indexOf('E') < 0) {
-         while (s.endsWith("0")) {
-            s = s.substring(0, s.length() - 1);
-         }
-         if (s.endsWith(".")) {
-            s = s.substring(0, s.length() - 1);
-         }
-      }
-      return s;
-   }
-
-   /**
-    * Get the value object associated with a key.
-    *
-    * @param key A key string.
-    * @return The object associated with the key.
-    * @throws JSONException if the key is not found.
-    */
-   public Object get(final String key) throws JSONException {
-      Object o = opt(key);
-      if (o == null) {
-         throw new JSONException("JSONObject[" + JSONObject.quote(key) + "] 
not found.");
-      }
-      return o;
-   }
-
-   /**
-    * Get the boolean value associated with a key.
-    *
-    * @param key A key string.
-    * @return The truth.
-    * @throws JSONException if the value is not a Boolean or the String "true" 
or "false".
-    */
-   public boolean getBoolean(final String key) throws JSONException {
-      Object o = get(key);
-      if (o.equals(Boolean.FALSE) || o instanceof String && ((String) 
o).equalsIgnoreCase("false")) {
-         return false;
-      }
-      else if (o.equals(Boolean.TRUE) || o instanceof String && ((String) 
o).equalsIgnoreCase("true")) {
-         return true;
-      }
-      throw new JSONException("JSONObject[" + JSONObject.quote(key) + "] is 
not a Boolean.");
-   }
-
-   /**
-    * Get the double value associated with a key.
-    *
-    * @param key A key string.
-    * @return The numeric value.
-    * @throws JSONException if the key is not found or
-    *                       if the value is not a Number object and cannot be 
converted to a number.
-    */
-   public double getDouble(final String key) throws JSONException {
-      Object o = get(key);
-      try {
-         return o instanceof Number ? ((Number) o).doubleValue() : 
Double.valueOf((String) o).doubleValue();
-      }
-      catch (Exception e) {
-         throw new JSONException("JSONObject[" + JSONObject.quote(key) + "] is 
not a number.");
-      }
-   }
-
-   /**
-    * Get the int value associated with a key. If the number value is too
-    * large for an int, it will be clipped.
-    *
-    * @param key A key string.
-    * @return The integer value.
-    * @throws JSONException if the key is not found or if the value cannot
-    *                       be converted to an integer.
-    */
-   public int getInt(final String key) throws JSONException {
-      Object o = get(key);
-      return o instanceof Number ? ((Number) o).intValue() : (int) 
getDouble(key);
-   }
-
-   /**
-    * Get the JSONArray value associated with a key.
-    *
-    * @param key A key string.
-    * @return A JSONArray which is the value.
-    * @throws JSONException if the key is not found or
-    *                       if the value is not a JSONArray.
-    */
-   public JSONArray getJSONArray(final String key) throws JSONException {
-      Object o = get(key);
-      if (o instanceof JSONArray) {
-         return (JSONArray) o;
-      }
-      throw new JSONException("JSONObject[" + JSONObject.quote(key) + "] is 
not a JSONArray.");
-   }
-
-   /**
-    * Get the JSONObject value associated with a key.
-    *
-    * @param key A key string.
-    * @return A JSONObject which is the value.
-    * @throws JSONException if the key is not found or
-    *                       if the value is not a JSONObject.
-    */
-   public JSONObject getJSONObject(final String key) throws JSONException {
-      Object o = get(key);
-      if (o instanceof JSONObject) {
-         return (JSONObject) o;
-      }
-      throw new JSONException("JSONObject[" + JSONObject.quote(key) + "] is 
not a JSONObject.");
-   }
-
-   /**
-    * Get the long value associated with a key. If the number value is too
-    * long for a long, it will be clipped.
-    *
-    * @param key A key string.
-    * @return The long value.
-    * @throws JSONException if the key is not found or if the value cannot
-    *                       be converted to a long.
-    */
-   public long getLong(final String key) throws JSONException {
-      Object o = get(key);
-      return o instanceof Number ? ((Number) o).longValue() : (long) 
getDouble(key);
-   }
-
-   /**
-    * Get an array of field names from a JSONObject.
-    *
-    * @return An array of field names, or null if there are no names.
-    */
-   public static String[] getNames(final JSONObject jo) {
-      int length = jo.length();
-      if (length == 0) {
-         return null;
-      }
-      Iterator i = jo.keys();
-      String[] names = new String[length];
-      int j = 0;
-      while (i.hasNext()) {
-         names[j] = (String) i.next();
-         j += 1;
-      }
-      return names;
-   }
-
-   /**
-    * Get an array of field names from an Object.
-    *
-    * @return An array of field names, or null if there are no names.
-    */
-   public static String[] getNames(final Object object) {
-      if (object == null) {
-         return null;
-      }
-      Class klass = object.getClass();
-      Field[] fields = klass.getFields();
-      int length = fields.length;
-      if (length == 0) {
-         return null;
-      }
-      String[] names = new String[length];
-      for (int i = 0; i < length; i += 1) {
-         names[i] = fields[i].getName();
-      }
-      return names;
-   }
-
-   /**
-    * Get the string associated with a key.
-    *
-    * @param key A key string.
-    * @return A string which is the value.
-    * @throws JSONException if the key is not found.
-    */
-   public String getString(final String key) throws JSONException {
-      return get(key).toString();
-   }
-
-   /**
-    * Determine if the JSONObject contains a specific key.
-    *
-    * @param key A key string.
-    * @return true if the key exists in the JSONObject.
-    */
-   public boolean has(final String key) {
-      return map.containsKey(key);
-   }
-
-   /**
-    * Determine if the value associated with the key is null or if there is
-    * no value.
-    *
-    * @param key A key string.
-    * @return true if there is no value associated with the key or if
-    * the value is the JSONObject.NULL object.
-    */
-   public boolean isNull(final String key) {
-      return JSONObject.NULL.equals(opt(key));
-   }
-
-   /**
-    * Get an enumeration of the keys of the JSONObject.
-    *
-    * @return An iterator of the keys.
-    */
-   public Iterator keys() {
-      return map.keySet().iterator();
-   }
-
-   /**
-    * Get the number of keys stored in the JSONObject.
-    *
-    * @return The number of keys in the JSONObject.
-    */
-   public int length() {
-      return map.size();
-   }
-
-   /**
-    * Produce a JSONArray containing the names of the elements of this
-    * JSONObject.
-    *
-    * @return A JSONArray containing the key strings, or null if the JSONObject
-    * is empty.
-    */
-   public JSONArray names() {
-      JSONArray ja = new JSONArray();
-      Iterator keys = keys();
-      while (keys.hasNext()) {
-         ja.put(keys.next());
-      }
-      return ja.length() == 0 ? null : ja;
-   }
-
-   /**
-    * Produce a string from a Number.
-    *
-    * @param n A Number
-    * @return A String.
-    * @throws JSONException If n is a non-finite number.
-    */
-   public static String numberToString(final Number n) throws JSONException {
-      if (n == null) {
-         throw new JSONException("Null pointer");
-      }
-      JSONObject.testValidity(n);
-
-      // Shave off trailing zeros and decimal point, if possible.
-
-      String s = n.toString();
-      if (s.indexOf('.') > 0 && s.indexOf('e') < 0 && s.indexOf('E') < 0) {
-         while (s.endsWith("0")) {
-            s = s.substring(0, s.length() - 1);
-         }
-         if (s.endsWith(".")) {
-            s = s.substring(0, s.length() - 1);
-         }
-      }
-      return s;
-   }
-
-   /**
-    * Get an optional value associated with a key.
-    *
-    * @param key A key string.
-    * @return An object which is the value, or null if there is no value.
-    */
-   public Object opt(final String key) {
-      return key == null ? null : map.get(key);
-   }
-
-   /**
-    * Get an optional boolean associated with a key.
-    * It returns false if there is no such key, or if the value is not
-    * Boolean.TRUE or the String "true".
-    *
-    * @param key A key string.
-    * @return The truth.
-    */
-   public boolean optBoolean(final String key) {
-      return optBoolean(key, false);
-   }
-
-   /**
-    * Get an optional boolean associated with a key.
-    * It returns the defaultValue if there is no such key, or if it is not
-    * a Boolean or the String "true" or "false" (case insensitive).
-    *
-    * @param key          A key string.
-    * @param defaultValue The default.
-    * @return The truth.
-    */
-   public boolean optBoolean(final String key, final boolean defaultValue) {
-      try {
-         return getBoolean(key);
-      }
-      catch (Exception e) {
-         return defaultValue;
-      }
-   }
-
-   /**
-    * Put a key/value pair in the JSONObject, where the value will be a
-    * JSONArray which is produced from a Collection.
-    *
-    * @param key   A key string.
-    * @param value A Collection value.
-    * @return this.
-    * @throws JSONException
-    */
-   public JSONObject put(final String key, final Collection value) throws 
JSONException {
-      put(key, new JSONArray(value));
-      return this;
-   }
-
-   /**
-    * Get an optional double associated with a key,
-    * or NaN if there is no such key or if its value is not a number.
-    * If the value is a string, an attempt will be made to evaluate it as
-    * a number.
-    *
-    * @param key A string which is the key.
-    * @return An object which is the value.
-    */
-   public double optDouble(final String key) {
-      return optDouble(key, Double.NaN);
-   }
-
-   /**
-    * Get an optional double associated with a key, or the
-    * defaultValue if there is no such key or if its value is not a number.
-    * If the value is a string, an attempt will be made to evaluate it as
-    * a number.
-    *
-    * @param key          A key string.
-    * @param defaultValue The default.
-    * @return An object which is the value.
-    */
-   public double optDouble(final String key, final double defaultValue) {
-      try {
-         Object o = opt(key);
-         return o instanceof Number ? ((Number) o).doubleValue() : new 
Double((String) o).doubleValue();
-      }
-      catch (Exception e) {
-         return defaultValue;
-      }
-   }
-
-   /**
-    * Get an optional int value associated with a key,
-    * or zero if there is no such key or if the value is not a number.
-    * If the value is a string, an attempt will be made to evaluate it as
-    * a number.
-    *
-    * @param key A key string.
-    * @return An object which is the value.
-    */
-   public int optInt(final String key) {
-      return optInt(key, 0);
-   }
-
-   /**
-    * Get an optional int value associated with a key,
-    * or the default if there is no such key or if the value is not a number.
-    * If the value is a string, an attempt will be made to evaluate it as
-    * a number.
-    *
-    * @param key          A key string.
-    * @param defaultValue The default.
-    * @return An object which is the value.
-    */
-   public int optInt(final String key, final int defaultValue) {
-      try {
-         return getInt(key);
-      }
-      catch (Exception e) {
-         return defaultValue;
-      }
-   }
-
-   /**
-    * Get an optional JSONArray associated with a key.
-    * It returns null if there is no such key, or if its value is not a
-    * JSONArray.
-    *
-    * @param key A key string.
-    * @return A JSONArray which is the value.
-    */
-   public JSONArray optJSONArray(final String key) {
-      Object o = opt(key);
-      return o instanceof JSONArray ? (JSONArray) o : null;
-   }
-
-   /**
-    * Get an optional JSONObject associated with a key.
-    * It returns null if there is no such key, or if its value is not a
-    * JSONObject.
-    *
-    * @param key A key string.
-    * @return A JSONObject which is the value.
-    */
-   public JSONObject optJSONObject(final String key) {
-      Object o = opt(key);
-      return o instanceof JSONObject ? (JSONObject) o : null;
-   }
-
-   /**
-    * Get an optional long value associated with a key,
-    * or zero if there is no such key or if the value is not a number.
-    * If the value is a string, an attempt will be made to evaluate it as
-    * a number.
-    *
-    * @param key A key string.
-    * @return An object which is the value.
-    */
-   public long optLong(final String key) {
-      return optLong(key, 0);
-   }
-
-   /**
-    * Get an optional long value associated with a key,
-    * or the default if there is no such key or if the value is not a number.
-    * If the value is a string, an attempt will be made to evaluate it as
-    * a number.
-    *
-    * @param key          A key string.
-    * @param defaultValue The default.
-    * @return An object which is the value.
-    */
-   public long optLong(final String key, final long defaultValue) {
-      try {
-         return getLong(key);
-      }
-      catch (Exception e) {
-         return defaultValue;
-      }
-   }
-
-   /**
-    * Get an optional string associated with a key.
-    * It returns an empty string if there is no such key. If the value is not
-    * a string and is not null, then it is converted to a string.
-    *
-    * @param key A key string.
-    * @return A string which is the value.
-    */
-   public String optString(final String key) {
-      return optString(key, "");
-   }
-
-   /**
-    * Get an optional string associated with a key.
-    * It returns the defaultValue if there is no such key.
-    *
-    * @param key          A key string.
-    * @param defaultValue The default.
-    * @return A string which is the value.
-    */
-   public String optString(final String key, final String defaultValue) {
-      Object o = opt(key);
-      return o != null ? o.toString() : defaultValue;
-   }
-
-   /**
-    * Put a key/boolean pair in the JSONObject.
-    *
-    * @param key   A key string.
-    * @param value A boolean which is the value.
-    * @return this.
-    * @throws JSONException If the key is null.
-    */
-   public JSONObject put(final String key, final boolean value) throws 
JSONException {
-      put(key, value ? Boolean.TRUE : Boolean.FALSE);
-      return this;
-   }
-
-   /**
-    * Put a key/double pair in the JSONObject.
-    *
-    * @param key   A key string.
-    * @param value A double which is the value.
-    * @return this.
-    * @throws JSONException If the key is null or if the number is invalid.
-    */
-   public JSONObject put(final String key, final double value) throws 
JSONException {
-      put(key, Double.valueOf(value));
-      return this;
-   }
-
-   /**
-    * Put a key/int pair in the JSONObject.
-    *
-    * @param key   A key string.
-    * @param value An int which is the value.
-    * @return this.
-    * @throws JSONException If the key is null.
-    */
-   public JSONObject put(final String key, final int value) throws 
JSONException {
-      put(key, Integer.valueOf(value));
-      return this;
-   }
-
-   /**
-    * Put a key/long pair in the JSONObject.
-    *
-    * @param key   A key string.
-    * @param value A long which is the value.
-    * @return this.
-    * @throws JSONException If the key is null.
-    */
-   public JSONObject put(final String key, final long value) throws 
JSONException {
-      put(key, Long.valueOf(value));
-      return this;
-   }
-
-   /**
-    * Put a key/value pair in the JSONObject, where the value will be a
-    * JSONObject which is produced from a Map.
-    *
-    * @param key   A key string.
-    * @param value A Map value.
-    * @return this.
-    * @throws JSONException
-    */
-   public JSONObject put(final String key, final Map value) throws 
JSONException {
-      put(key, new JSONObject(value));
-      return this;
-   }
-
-   /**
-    * Put a key/value pair in the JSONObject. If the value is null,
-    * then the key will be removed from the JSONObject if it is present.
-    *
-    * @param key   A key string.
-    * @param value An object which is the value. It should be of one of these
-    *              types: Boolean, Double, Integer, JSONArray, JSONObject, 
Long, String,
-    *              or the JSONObject.NULL object.
-    * @return this.
-    * @throws JSONException If the value is non-finite number
-    *                       or if the key is null.
-    */
-   public JSONObject put(final String key, final Object value) throws 
JSONException {
-      if (key == null) {
-         throw new JSONException("Null key.");
-      }
-      if (value != null) {
-         JSONObject.testValidity(value);
-         map.put(key, value);
-      }
-      else {
-         remove(key);
-      }
-      return this;
-   }
-
-   /**
-    * Put a key/value pair in the JSONObject, but only if the key and the
-    * value are both non-null, and only if there is not already a member
-    * with that name.
-    *
-    * @param key
-    * @param value
-    * @return his.
-    * @throws JSONException if the key is a duplicate
-    */
-   public JSONObject putOnce(final String key, final Object value) throws 
JSONException {
-      if (key != null && value != null) {
-         if (opt(key) != null) {
-            throw new JSONException("Duplicate key \"" + key + "\"");
-         }
-         put(key, value);
-      }
-      return this;
-   }
-
-   /**
-    * Put a key/value pair in the JSONObject, but only if the
-    * key and the value are both non-null.
-    *
-    * @param key   A key string.
-    * @param value An object which is the value. It should be of one of these
-    *              types: Boolean, Double, Integer, JSONArray, JSONObject, 
Long, String,
-    *              or the JSONObject.NULL object.
-    * @return this.
-    * @throws JSONException If the value is a non-finite number.
-    */
-   public JSONObject putOpt(final String key, final Object value) throws 
JSONException {
-      if (key != null && value != null) {
-         put(key, value);
-      }
-      return this;
-   }
-
-   /**
-    * Produce a string in double quotes with backslash sequences in all the
-    * right places. A backslash will be inserted within &lt;/, allowing JSON
-    * text to be delivered in HTML. In JSON text, a string cannot contain a
-    * control character or an unescaped quote or backslash.
-    *
-    * @param string A String
-    * @return A String correctly formatted for insertion in a JSON text.
-    */
-   public static String quote(final String string) {
-      if (string == null || string.length() == 0) {
-         return "\"\"";
-      }
-
-      char b;
-      char c = 0;
-      int i;
-      int len = string.length();
-      StringBuffer sb = new StringBuffer(len + 4);
-      String t;
-
-      sb.append('"');
-      for (i = 0; i < len; i += 1) {
-         b = c;
-         c = string.charAt(i);
-         switch (c) {
-            case '\\':
-            case '"':
-               sb.append('\\');
-               sb.append(c);
-               break;
-            case '/':
-               if (b == '<') {
-                  sb.append('\\');
-               }
-               sb.append(c);
-               break;
-            case '\b':
-               sb.append("\\b");
-               break;
-            case '\t':
-               sb.append("\\t");
-               break;
-            case '\n':
-               sb.append("\\n");
-               break;
-            case '\f':
-               sb.append("\\f");
-               break;
-            case '\r':
-               sb.append("\\r");
-               break;
-            default:
-               if (c < ' ' || c >= '\u0080' && c < '\u00a0' || c >= '\u2000' 
&& c < '\u2100') {
-                  t = "000" + Integer.toHexString(c);
-                  sb.append("\\u" + t.substring(t.length() - 4));
-               }
-               else {
-                  sb.append(c);
-               }
-         }
-      }
-      sb.append('"');
-      return sb.toString();
-   }
-
-   /**
-    * Remove a name and its value, if present.
-    *
-    * @param key The name to be removed.
-    * @return The value that was associated with the name,
-    * or null if there was no value.
-    */
-   public Object remove(final String key) {
-      return map.remove(key);
-   }
-
-   /**
-    * Get an enumeration of the keys of the JSONObject.
-    * The keys will be sorted alphabetically.
-    *
-    * @return An iterator of the keys.
-    */
-   public Iterator sortedKeys() {
-      return new TreeSet(map.keySet()).iterator();
-   }
-
-   /**
-    * Try to convert a string into a number, boolean, or null. If the string
-    * can't be converted, return the string.
-    *
-    * @param s A String.
-    * @return A simple JSON value.
-    */
-   public static Object stringToValue(final String s) {
-      if (s.equals("")) {
-         return s;
-      }
-      if (s.equalsIgnoreCase("true")) {
-         return Boolean.TRUE;
-      }
-      if (s.equalsIgnoreCase("false")) {
-         return Boolean.FALSE;
-      }
-      if (s.equalsIgnoreCase("null")) {
-         return JSONObject.NULL;
-      }
-
-      /*
-       * If it might be a number, try converting it. We support the 0- and 0x-
-       * conventions. If a number cannot be produced, then the value will just
-       * be a string. Note that the 0-, 0x-, plus, and implied string
-       * conventions are non-standard. A JSON parser is free to accept
-       * non-JSON forms as long as it accepts all correct JSON forms.
-       */
-
-      char b = s.charAt(0);
-      if (b >= '0' && b <= '9' || b == '.' || b == '-' || b == '+') {
-         if (b == '0') {
-            if (s.length() > 2 && (s.charAt(1) == 'x' || s.charAt(1) == 'X')) {
-               try {
-                  return Integer.valueOf(Integer.parseInt(s.substring(2), 16));
-               }
-               catch (Exception e) {
-                  /* Ignore the error */
-               }
-            }
-            else {
-               try {
-                  return Integer.valueOf(Integer.parseInt(s, 8));
-               }
-               catch (Exception e) {
-                  /* Ignore the error */
-               }
-            }
-         }
-         try {
-            if (s.indexOf('.') > -1 || s.indexOf('e') > -1 || s.indexOf('E') > 
-1) {
-               return Double.valueOf(s);
-            }
-            else {
-               Long myLong = Long.valueOf(s);
-               if (myLong.longValue() == myLong.intValue()) {
-                  return Integer.valueOf(myLong.intValue());
-               }
-               else {
-                  return myLong;
-               }
-            }
-         }
-         catch (Exception f) {
-            /* Ignore the error */
-         }
-      }
-      return s;
-   }
-
-   /**
-    * Throw an exception if the object is a NaN or infinite number.
-    *
-    * @param o The object to test.
-    * @throws JSONException If o is a non-finite number.
-    */
-   static void testValidity(final Object o) throws JSONException {
-      if (o != null) {
-         if (o instanceof Double) {
-            if (((Double) o).isInfinite() || ((Double) o).isNaN()) {
-               throw new JSONException("JSON does not allow non-finite 
numbers.");
-            }
-         }
-         else if (o instanceof Float) {
-            if (((Float) o).isInfinite() || ((Float) o).isNaN()) {
-               throw new JSONException("JSON does not allow non-finite 
numbers.");
-            }
-         }
-      }
-   }
-
-   /**
-    * Produce a JSONArray containing the values of the members of this
-    * JSONObject.
-    *
-    * @param names A JSONArray containing a list of key strings. This
-    *              determines the sequence of the values in the result.
-    * @return A JSONArray of values.
-    * @throws JSONException If any of the values are non-finite numbers.
-    */
-   public JSONArray toJSONArray(final JSONArray names) throws JSONException {
-      if (names == null || names.length() == 0) {
-         return null;
-      }
-      JSONArray ja = new JSONArray();
-      for (int i = 0; i < names.length(); i += 1) {
-         ja.put(opt(names.getString(i)));
-      }
-      return ja;
-   }
-
-   /**
-    * Make a JSON text of this JSONObject. For compactness, no whitespace
-    * is added. If this would not result in a syntactically correct JSON text,
-    * then null will be returned instead.
-    * <p>
-    * Warning: This method assumes that the data structure is acyclical.
-    *
-    * @return a printable, displayable, portable, transmittable
-    * representation of the object, beginning
-    * with <code>{</code>&nbsp;<small>(left brace)</small> and ending
-    * with <code>}</code>&nbsp;<small>(right brace)</small>.
-    */
-   @Override
-   public String toString() {
-      try {
-         Iterator keys = keys();
-         StringBuilder sb = new StringBuilder("{");
-
-         while (keys.hasNext()) {
-            if (sb.length() > 1) {
-               sb.append(',');
-            }
-            Object o = keys.next();
-            sb.append(JSONObject.quote(o.toString()));
-            sb.append(':');
-            sb.append(JSONObject.valueToString(map.get(o)));
-         }
-         sb.append('}');
-         return sb.toString();
-      }
-      catch (JSONException e) {
-         return null;
-      }
-   }
-
-   /**
-    * Make a prettyprinted JSON text of this JSONObject.
-    * <p>
-    * Warning: This method assumes that the data structure is acyclical.
-    *
-    * @param indentFactor The number of spaces to add to each level of
-    *                     indentation.
-    * @return a printable, displayable, portable, transmittable
-    * representation of the object, beginning
-    * with <code>{</code>&nbsp;<small>(left brace)</small> and ending
-    * with <code>}</code>&nbsp;<small>(right brace)</small>.
-    * @throws JSONException If the object contains an invalid number.
-    */
-   public String toString(final int indentFactor) throws JSONException {
-      return toString(indentFactor, 0);
-   }
-
-   /**
-    * Make a prettyprinted JSON text of this JSONObject.
-    * <p>
-    * Warning: This method assumes that the data structure is acyclical.
-    *
-    * @param indentFactor The number of spaces to add to each level of
-    *                     indentation.
-    * @param indent       The indentation of the top level.
-    * @return a printable, displayable, transmittable
-    * representation of the object, beginning
-    * with <code>{</code>&nbsp;<small>(left brace)</small> and ending
-    * with <code>}</code>&nbsp;<small>(right brace)</small>.
-    * @throws JSONException If the object contains an invalid number.
-    */
-   String toString(final int indentFactor, final int indent) throws 
JSONException {
-      int j;
-      int n = length();
-      if (n == 0) {
-         return "{}";
-      }
-      Iterator keys = sortedKeys();
-      StringBuffer sb = new StringBuffer("{");
-      int newindent = indent + indentFactor;
-      Object o;
-      if (n == 1) {
-         o = keys.next();
-         sb.append(JSONObject.quote(o.toString()));
-         sb.append(": ");
-         sb.append(JSONObject.valueToString(map.get(o), indentFactor, indent));
-      }
-      else {
-         while (keys.hasNext()) {
-            o = keys.next();
-            if (sb.length() > 1) {
-               sb.append(",\n");
-            }
-            else {
-               sb.append('\n');
-            }
-            for (j = 0; j < newindent; j += 1) {
-               sb.append(' ');
-            }
-            sb.append(JSONObject.quote(o.toString()));
-            sb.append(": ");
-            sb.append(JSONObject.valueToString(map.get(o), indentFactor, 
newindent));
-         }
-         if (sb.length() > 1) {
-            sb.append('\n');
-            for (j = 0; j < indent; j += 1) {
-               sb.append(' ');
-            }
-         }
-      }
-      sb.append('}');
-      return sb.toString();
-   }
-
-   /**
-    * Make a JSON text of an Object value. If the object has an
-    * value.toJSONString() method, then that method will be used to produce
-    * the JSON text. The method is required to produce a strictly
-    * conforming text. If the object does not contain a toJSONString
-    * method (which is the most common case), then a text will be
-    * produced by other means. If the value is an array or Collection,
-    * then a JSONArray will be made from it and its toJSONString method
-    * will be called. If the value is a MAP, then a JSONObject will be made
-    * from it and its toJSONString method will be called. Otherwise, the
-    * value's toString method will be called, and the result will be quoted.
-    *
-    * <p>
-    * Warning: This method assumes that the data structure is acyclical.
-    *
-    * @param value The value to be serialized.
-    * @return a printable, displayable, transmittable
-    * representation of the object, beginning
-    * with <code>{</code>&nbsp;<small>(left brace)</small> and ending
-    * with <code>}</code>&nbsp;<small>(right brace)</small>.
-    * @throws JSONException If the value is or contains an invalid number.
-    */
-   static String valueToString(final Object value) throws JSONException {
-      if (value == null || JSONObject.NULL == value) {
-         return "null";
-      }
-      if (value instanceof JSONString) {
-         String o;
-         try {
-            o = ((JSONString) value).toJSONString();
-         }
-         catch (RuntimeException e) {
-            throw new JSONException(e);
-         }
-         if (o == null)
-            throw new JSONException("Bad value from toJSONString: " + o);
-         return o;
-      }
-      if (value instanceof Number) {
-         return JSONObject.numberToString((Number) value);
-      }
-      if (value instanceof Boolean || value instanceof JSONObject || value 
instanceof JSONArray) {
-         return value.toString();
-      }
-      if (value instanceof Map) {
-         return new JSONObject((Map) value).toString();
-      }
-      if (value instanceof Collection) {
-         return new JSONArray((Collection) value).toString();
-      }
-      if (value.getClass().isArray()) {
-         return new JSONArray(value).toString();
-      }
-      return JSONObject.quote(value.toString());
-   }
-
-   /**
-    * Make a prettyprinted JSON text of an object value.
-    * <p>
-    * Warning: This method assumes that the data structure is acyclical.
-    *
-    * @param value        The value to be serialized.
-    * @param indentFactor The number of spaces to add to each level of
-    *                     indentation.
-    * @param indent       The indentation of the top level.
-    * @return a printable, displayable, transmittable
-    * representation of the object, beginning
-    * with <code>{</code>&nbsp;<small>(left brace)</small> and ending
-    * with <code>}</code>&nbsp;<small>(right brace)</small>.
-    * @throws JSONException If the object contains an invalid number.
-    */
-   static String valueToString(final Object value, final int indentFactor, 
final int indent) throws JSONException {
-      if (value == null || JSONObject.NULL == value) {
-         return "null";
-      }
-      try {
-         if (value instanceof JSONString) {
-            String o = ((JSONString) value).toJSONString();
-            if (o != null)
-               return o;
-         }
-      }
-      catch (RuntimeException e) {
-         /* forget about it */
-      }
-      if (value instanceof Number) {
-         return JSONObject.numberToString((Number) value);
-      }
-      if (value instanceof Boolean) {
-         return value.toString();
-      }
-      if (value instanceof JSONObject) {
-         return ((JSONObject) value).toString(indentFactor, indent);
-      }
-      if (value instanceof JSONArray) {
-         return ((JSONArray) value).toString(indentFactor, indent);
-      }
-      if (value instanceof Map) {
-         return new JSONObject((Map) value).toString(indentFactor, indent);
-      }
-      if (value instanceof Collection) {
-         return new JSONArray((Collection) value).toString(indentFactor, 
indent);
-      }
-      if (value.getClass().isArray()) {
-         return new JSONArray(value).toString(indentFactor, indent);
-      }
-      return JSONObject.quote(value.toString());
-   }
-
-   /**
-    * Write the contents of the JSONObject as JSON text to a writer.
-    * For compactness, no whitespace is added.
-    * <p>
-    * Warning: This method assumes that the data structure is acyclical.
-    *
-    * @return The writer.
-    * @throws JSONException
-    */
-   public Writer write(final Writer writer) throws JSONException {
-      try {
-         boolean b = false;
-         Iterator keys = keys();
-         writer.write('{');
-
-         while (keys.hasNext()) {
-            if (b) {
-               writer.write(',');
-            }
-            Object k = keys.next();
-            writer.write(JSONObject.quote(k.toString()));
-            writer.write(':');
-            Object v = map.get(k);
-            if (v instanceof JSONObject) {
-               ((JSONObject) v).write(writer);
-            }
-            else if (v instanceof JSONArray) {
-               ((JSONArray) v).write(writer);
-            }
-            else {
-               writer.write(JSONObject.valueToString(v));
-            }
-            b = true;
-         }
-         writer.write('}');
-         return writer;
-      }
-      catch (IOException e) {
-         throw new JSONException(e);
-      }
-   }
-}

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/json/JSONString.java
----------------------------------------------------------------------
diff --git 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/json/JSONString.java
 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/json/JSONString.java
deleted file mode 100644
index 07ec907..0000000
--- 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/json/JSONString.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-Copyright (c) 2002 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-package org.apache.activemq.artemis.utils.json;
-
-/**
- * The <code>JSONString</code> interface allows a <code>toJSONString()</code>
- * method so that a class can change the behavior of
- * <code>JSONObject.toString()</code>, <code>JSONArray.toString()</code>,
- * and <code>JSONWriter.value(</code>Object<code>)</code>. The
- * <code>toJSONString</code> method will be used instead of the default 
behavior
- * of using the Object's <code>toString()</code> method and quoting the result.
- */
-public interface JSONString {
-
-   /**
-    * The <code>toJSONString</code> method allows a class to produce its own 
JSON
-    * serialization.
-    *
-    * @return A strictly syntactically correct JSON text.
-    */
-   String toJSONString();
-}

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/json/JSONTokener.java
----------------------------------------------------------------------
diff --git 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/json/JSONTokener.java
 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/json/JSONTokener.java
deleted file mode 100644
index 5f5153b..0000000
--- 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/json/JSONTokener.java
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
-Copyright (c) 2002 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-package org.apache.activemq.artemis.utils.json;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-
-/**
- * A JSONTokener takes a source string and extracts characters and tokens from
- * it. It is used by the JSONObject and JSONArray constructors to parse
- * JSON source strings.
- */
-public class JSONTokener {
-
-   private int index;
-
-   private final Reader reader;
-
-   private char lastChar;
-
-   private boolean useLastChar;
-
-   /**
-    * Construct a JSONTokener from a string.
-    *
-    * @param reader A reader.
-    */
-   public JSONTokener(final Reader reader) {
-      this.reader = reader.markSupported() ? reader : new 
BufferedReader(reader);
-      useLastChar = false;
-      index = 0;
-   }
-
-   /**
-    * Construct a JSONTokener from a string.
-    *
-    * @param s A source string.
-    */
-   public JSONTokener(final String s) {
-      this(new StringReader(s));
-   }
-
-   /**
-    * Back up one character. This provides a sort of lookahead capability,
-    * so that you can test for a digit or letter before attempting to parse
-    * the next number or identifier.
-    */
-   public void back() throws JSONException {
-      if (useLastChar || index <= 0) {
-         throw new JSONException("Stepping back two steps is not supported");
-      }
-      index -= 1;
-      useLastChar = true;
-   }
-
-   /**
-    * Get the hex value of a character (base16).
-    *
-    * @param c A character between '0' and '9' or between 'A' and 'F' or
-    *          between 'a' and 'f'.
-    * @return An int between 0 and 15, or -1 if c was not a hex digit.
-    */
-   public static int dehexchar(final char c) {
-      if (c >= '0' && c <= '9') {
-         return c - '0';
-      }
-      if (c >= 'A' && c <= 'F') {
-         return c - ('A' - 10);
-      }
-      if (c >= 'a' && c <= 'f') {
-         return c - ('a' - 10);
-      }
-      return -1;
-   }
-
-   /**
-    * Determine if the source string still contains characters that next()
-    * can consume.
-    *
-    * @return true if not yet at the end of the source.
-    */
-   public boolean more() throws JSONException {
-      char nextChar = next();
-      if (nextChar == 0) {
-         return false;
-      }
-      back();
-      return true;
-   }
-
-   /**
-    * Get the next character in the source string.
-    *
-    * @return The next character, or 0 if past the end of the source string.
-    */
-   public char next() throws JSONException {
-      if (useLastChar) {
-         useLastChar = false;
-         if (lastChar != 0) {
-            index += 1;
-         }
-         return lastChar;
-      }
-      int c;
-      try {
-         c = reader.read();
-      }
-      catch (IOException exc) {
-         throw new JSONException(exc);
-      }
-
-      if (c <= 0) { // End of stream
-         lastChar = 0;
-         return 0;
-      }
-      index += 1;
-      lastChar = (char) c;
-      return lastChar;
-   }
-
-   /**
-    * Consume the next character, and check that it matches a specified
-    * character.
-    *
-    * @param c The character to match.
-    * @return The character.
-    * @throws JSONException if the character does not match.
-    */
-   public char next(final char c) throws JSONException {
-      char n = next();
-      if (n != c) {
-         throw syntaxError("Expected '" + c + "' and instead saw '" + n + "'");
-      }
-      return n;
-   }
-
-   /**
-    * Get the next n characters.
-    *
-    * @param n The number of characters to take.
-    * @return A string of n characters.
-    * @throws JSONException Substring bounds error if there are not
-    *                       n characters remaining in the source string.
-    */
-   public String next(final int n) throws JSONException {
-      if (n == 0) {
-         return "";
-      }
-
-      char[] buffer = new char[n];
-      int pos = 0;
-
-      if (useLastChar) {
-         useLastChar = false;
-         buffer[0] = lastChar;
-         pos = 1;
-      }
-
-      try {
-         int len;
-         while (pos < n && (len = reader.read(buffer, pos, n - pos)) != -1) {
-            pos += len;
-         }
-      }
-      catch (IOException exc) {
-         throw new JSONException(exc);
-      }
-      index += pos;
-
-      if (pos < n) {
-         throw syntaxError("Substring bounds error");
-      }
-
-      lastChar = buffer[n - 1];
-      return new String(buffer);
-   }
-
-   /**
-    * Get the next char in the string, skipping whitespace.
-    *
-    * @return A character, or 0 if there are no more characters.
-    * @throws JSONException
-    */
-   public char nextClean() throws JSONException {
-      for (;;) {
-         char c = next();
-         if (c == 0 || c > ' ') {
-            return c;
-         }
-      }
-   }
-
-   /**
-    * Return the characters up to the next close quote character.
-    * Backslash processing is done. The formal JSON format does not
-    * allow strings in single quotes, but an implementation is allowed to
-    * accept them.
-    *
-    * @param quote The quoting character, either
-    *              <code>"</code>&nbsp;<small>(double quote)</small> or
-    *              <code>'</code>&nbsp;<small>(single quote)</small>.
-    * @return A String.
-    * @throws JSONException Unterminated string.
-    */
-   public String nextString(final char quote) throws JSONException {
-      char c;
-      StringBuffer sb = new StringBuffer();
-      for (;;) {
-         c = next();
-         switch (c) {
-            case 0:
-            case '\n':
-            case '\r':
-               throw syntaxError("Unterminated string");
-            case '\\':
-               c = next();
-               switch (c) {
-                  case 'b':
-                     sb.append('\b');
-                     break;
-                  case 't':
-                     sb.append('\t');
-                     break;
-                  case 'n':
-                     sb.append('\n');
-                     break;
-                  case 'f':
-                     sb.append('\f');
-                     break;
-                  case 'r':
-                     sb.append('\r');
-                     break;
-                  case 'u':
-                     sb.append((char) Integer.parseInt(next(4), 16));
-                     break;
-                  case 'x':
-                     sb.append((char) Integer.parseInt(next(2), 16));
-                     break;
-                  default:
-                     sb.append(c);
-               }
-               break;
-            default:
-               if (c == quote) {
-                  return sb.toString();
-               }
-               sb.append(c);
-         }
-      }
-   }
-
-   /**
-    * Get the text up but not including the specified character or the
-    * end of line, whichever comes first.
-    *
-    * @param d A delimiter character.
-    * @return A string.
-    */
-   public String nextTo(final char d) throws JSONException {
-      StringBuffer sb = new StringBuffer();
-      for (;;) {
-         char c = next();
-         if (c == d || c == 0 || c == '\n' || c == '\r') {
-            if (c != 0) {
-               back();
-            }
-            return sb.toString().trim();
-         }
-         sb.append(c);
-      }
-   }
-
-   /**
-    * Get the text up but not including one of the specified delimiter
-    * characters or the end of line, whichever comes first.
-    *
-    * @param delimiters A set of delimiter characters.
-    * @return A string, trimmed.
-    */
-   public String nextTo(final String delimiters) throws JSONException {
-      char c;
-      StringBuffer sb = new StringBuffer();
-      for (;;) {
-         c = next();
-         if (delimiters.indexOf(c) >= 0 || c == 0 || c == '\n' || c == '\r') {
-            if (c != 0) {
-               back();
-            }
-            return sb.toString().trim();
-         }
-         sb.append(c);
-      }
-   }
-
-   /**
-    * Get the next value. The value can be a Boolean, Double, Integer,
-    * JSONArray, JSONObject, Long, or String, or the JSONObject.NULL object.
-    *
-    * @return An object.
-    * @throws JSONException If syntax error.
-    */
-   public Object nextValue() throws JSONException {
-      char c = nextClean();
-      String s;
-
-      switch (c) {
-         case '"':
-         case '\'':
-            return nextString(c);
-         case '{':
-            back();
-            return new JSONObject(this);
-         case '[':
-         case '(':
-            back();
-            return new JSONArray(this);
-      }
-
-      /*
-       * Handle unquoted text. This could be the values true, false, or
-       * null, or it can be a number. An implementation (such as this one)
-       * is allowed to also accept non-standard forms.
-       *
-       * Accumulate characters until we reach the end of the text or a
-       * formatting character.
-       */
-
-      StringBuffer sb = new StringBuffer();
-      while (c >= ' ' && ",:]}/\\\"[{;=#".indexOf(c) < 0) {
-         sb.append(c);
-         c = next();
-      }
-      back();
-
-      s = sb.toString().trim();
-      if (s.equals("")) {
-         throw syntaxError("Missing value");
-      }
-      return JSONObject.stringToValue(s);
-   }
-
-   /**
-    * Skip characters until the next character is the requested character.
-    * If the requested character is not found, no characters are skipped.
-    *
-    * @param to A character to skip to.
-    * @return The requested character, or zero if the requested character
-    * is not found.
-    */
-   public char skipTo(final char to) throws JSONException {
-      char c;
-      try {
-         int startIndex = index;
-         reader.mark(Integer.MAX_VALUE);
-         do {
-            c = next();
-            if (c == 0) {
-               reader.reset();
-               index = startIndex;
-               return c;
-            }
-         } while (c != to);
-      }
-      catch (IOException exc) {
-         throw new JSONException(exc);
-      }
-
-      back();
-      return c;
-   }
-
-   /**
-    * Make a JSONException to signal a syntax error.
-    *
-    * @param message The error message.
-    * @return A JSONException object, suitable for throwing
-    */
-   public JSONException syntaxError(final String message) {
-      return new JSONException(message + toString());
-   }
-
-   /**
-    * Make a printable string of this JSONTokener.
-    *
-    * @return " at character [this.index]"
-    */
-   @Override
-   public String toString() {
-      return " at character " + index;
-   }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-core-client/src/test/java/org/apache/activemq/artemis/api/core/management/AddressSettingsInfoTest.java
----------------------------------------------------------------------
diff --git 
a/artemis-core-client/src/test/java/org/apache/activemq/artemis/api/core/management/AddressSettingsInfoTest.java
 
b/artemis-core-client/src/test/java/org/apache/activemq/artemis/api/core/management/AddressSettingsInfoTest.java
new file mode 100644
index 0000000..f477879
--- /dev/null
+++ 
b/artemis-core-client/src/test/java/org/apache/activemq/artemis/api/core/management/AddressSettingsInfoTest.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.activemq.artemis.api.core.management;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+public class AddressSettingsInfoTest {
+
+   @Test
+   public void shouldLoadFromJSON() {
+      String json = "{\n" +
+            "\"addressFullMessagePolicy\":\"fullPolicy\",\n" +
+            "\"maxSizeBytes\":500,\n" +
+            "\"pageSizeBytes\":200,\n" +
+            "\"pageCacheMaxSize\":3,\n" +
+            "\"maxDeliveryAttempts\":3,\n" +
+            "\"redeliveryDelay\":70000,\n" +
+            "\"redeliveryMultiplier\":1.5,\n" +
+            "\"maxRedeliveryDelay\":100000,\n" +
+            "\"DLA\":\"deadLettersGoHere\",\n" +
+            "\"expiryAddress\":\"\",\n" +
+            "\"lastValueQueue\":true,\n" +
+            "\"redistributionDelay\":10004,\n" +
+            "\"sendToDLAOnNoRoute\":true,\n" +
+            "\"slowConsumerThreshold\":200,\n" +
+            "\"slowConsumerCheckPeriod\":300,\n" +
+            "\"slowConsumerPolicy\":\"retire\",\n" +
+            "\"autoCreateJmsQueues\":true,\n" +
+            "\"autoDeleteJmsQueues\":false,\n" +
+            "\"autoCreateJmsTopics\":true,\n" +
+            "\"autoDeleteJmsTopics\":false\n" +
+            "}";
+      AddressSettingsInfo addressSettingsInfo = AddressSettingsInfo.from(json);
+      assertEquals("fullPolicy", 
addressSettingsInfo.getAddressFullMessagePolicy());
+      assertEquals(500L, addressSettingsInfo.getMaxSizeBytes());
+      assertEquals(200L, addressSettingsInfo.getPageSizeBytes());
+      assertEquals(3, addressSettingsInfo.getPageCacheMaxSize());
+      assertEquals(3, addressSettingsInfo.getMaxDeliveryAttempts());
+      assertEquals(70000, addressSettingsInfo.getRedeliveryDelay());
+      assertEquals(1.5, addressSettingsInfo.getRedeliveryMultiplier(), 0);
+      assertEquals(100000, addressSettingsInfo.getMaxRedeliveryDelay());
+      assertEquals("deadLettersGoHere", 
addressSettingsInfo.getDeadLetterAddress());
+      assertEquals("", addressSettingsInfo.getExpiryAddress());
+      assertTrue(addressSettingsInfo.isLastValueQueue());
+      assertEquals(10004L, addressSettingsInfo.getRedistributionDelay());
+      assertTrue(addressSettingsInfo.isSendToDLAOnNoRoute());
+      assertEquals(200L, addressSettingsInfo.getSlowConsumerThreshold());
+      assertEquals(300L, addressSettingsInfo.getSlowConsumerCheckPeriod());
+      assertEquals("retire", addressSettingsInfo.getSlowConsumerPolicy());
+      assertTrue(addressSettingsInfo.isAutoCreateJmsQueues());
+      assertTrue(addressSettingsInfo.isAutoCreateJmsTopics());
+      assertFalse(addressSettingsInfo.isAutoDeleteJmsQueues());
+      assertFalse(addressSettingsInfo.isAutoDeleteJmsTopics());
+   }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-distribution/pom.xml
----------------------------------------------------------------------
diff --git a/artemis-distribution/pom.xml b/artemis-distribution/pom.xml
index 0faa449..33e59a3 100644
--- a/artemis-distribution/pom.xml
+++ b/artemis-distribution/pom.xml
@@ -188,6 +188,14 @@
          <groupId>io.netty</groupId>
          <artifactId>netty-codec-mqtt</artifactId>
       </dependency>
+       <dependency>
+           <groupId>org.apache.geronimo.specs</groupId>
+           <artifactId>geronimo-json_1.0_spec</artifactId>
+       </dependency>
+       <dependency>
+           <groupId>org.apache.johnzon</groupId>
+           <artifactId>johnzon-core</artifactId>
+       </dependency>
    </dependencies>
 
    <build>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-distribution/src/main/assembly/dep.xml
----------------------------------------------------------------------
diff --git a/artemis-distribution/src/main/assembly/dep.xml 
b/artemis-distribution/src/main/assembly/dep.xml
index 0feb531..a62ef25 100644
--- a/artemis-distribution/src/main/assembly/dep.xml
+++ b/artemis-distribution/src/main/assembly/dep.xml
@@ -93,6 +93,8 @@
             <include>org.fusesource.hawtbuf:hawtbuf</include>
             <include>org.jgroups:jgroups</include>
             <include>io.netty:netty-codec-mqtt</include>
+            <include>org.apache.geronimo.specs:geronimo-json_1.0_spec</include>
+            <include>org.apache.johnzon:johnzon-core</include>
          </includes>
          <!--excludes>
             <exclude>org.apache.activemq:artemis-website</exclude>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-features/src/main/resources/features.xml
----------------------------------------------------------------------
diff --git a/artemis-features/src/main/resources/features.xml 
b/artemis-features/src/main/resources/features.xml
index c6cd831..2677626 100644
--- a/artemis-features/src/main/resources/features.xml
+++ b/artemis-features/src/main/resources/features.xml
@@ -51,6 +51,9 @@
                
<bundle>mvn:org.jboss.logging/jboss-logging/${jboss.logging.version}</bundle>
                <bundle>mvn:org.jgroups/jgroups/${jgroups.version}</bundle>
 
+               
<bundle>mvn:org.apache.geronimo.specs/geronimo-json_1.0_spec/${json-p.spec.version}</bundle>
+               
<bundle>mvn:org.apache.johnzon/johnzon-core/${johnzon.version}</bundle>
+
                
<bundle>mvn:org.apache.activemq/artemis-native/${pom.version}</bundle>
                
<bundle>mvn:org.apache.activemq/artemis-server-osgi/${pom.version}</bundle>
        </feature>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-jms-client/pom.xml
----------------------------------------------------------------------
diff --git a/artemis-jms-client/pom.xml b/artemis-jms-client/pom.xml
index 6a06d41..0c50418 100644
--- a/artemis-jms-client/pom.xml
+++ b/artemis-jms-client/pom.xml
@@ -69,7 +69,6 @@
          <artifactId>junit</artifactId>
          <scope>test</scope>
       </dependency>
-
    </dependencies>
 
    <profiles>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/JMSConnectionInfo.java
----------------------------------------------------------------------
diff --git 
a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/JMSConnectionInfo.java
 
b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/JMSConnectionInfo.java
index e184c01..120610c 100644
--- 
a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/JMSConnectionInfo.java
+++ 
b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/JMSConnectionInfo.java
@@ -16,8 +16,10 @@
  */
 package org.apache.activemq.artemis.api.jms.management;
 
-import org.apache.activemq.artemis.utils.json.JSONArray;
-import org.apache.activemq.artemis.utils.json.JSONObject;
+import org.apache.activemq.artemis.api.core.JsonUtil;
+
+import javax.json.JsonArray;
+import javax.json.JsonObject;
 
 public class JMSConnectionInfo {
 
@@ -34,14 +36,16 @@ public class JMSConnectionInfo {
    // Static --------------------------------------------------------
 
    public static JMSConnectionInfo[] from(final String jsonString) throws 
Exception {
-      JSONArray array = new JSONArray(jsonString);
-      JMSConnectionInfo[] infos = new JMSConnectionInfo[array.length()];
-      for (int i = 0; i < array.length(); i++) {
-         JSONObject obj = array.getJSONObject(i);
+      JsonArray array = JsonUtil.readJsonArray(jsonString);
+      JMSConnectionInfo[] infos = new JMSConnectionInfo[array.size()];
+      for (int i = 0; i < array.size(); i++) {
+         JsonObject obj = array.getJsonObject(i);
          String cid = obj.isNull("clientID") ? null : 
obj.getString("clientID");
          String uname = obj.isNull("principal") ? null : 
obj.getString("principal");
 
-         JMSConnectionInfo info = new 
JMSConnectionInfo(obj.getString("connectionID"), 
obj.getString("clientAddress"), obj.getLong("creationTime"), cid, uname);
+         JMSConnectionInfo info = new 
JMSConnectionInfo(obj.getString("connectionID"), obj.getString("clientAddress"),
+               obj.getJsonNumber("creationTime").longValue(),
+               cid, uname);
          infos[i] = info;
       }
       return infos;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/JMSConsumerInfo.java
----------------------------------------------------------------------
diff --git 
a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/JMSConsumerInfo.java
 
b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/JMSConsumerInfo.java
index 7f4be56..10b8ba0 100644
--- 
a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/JMSConsumerInfo.java
+++ 
b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/JMSConsumerInfo.java
@@ -16,8 +16,10 @@
  */
 package org.apache.activemq.artemis.api.jms.management;
 
-import org.apache.activemq.artemis.utils.json.JSONArray;
-import org.apache.activemq.artemis.utils.json.JSONObject;
+import org.apache.activemq.artemis.api.core.JsonUtil;
+
+import javax.json.JsonArray;
+import javax.json.JsonObject;
 
 /**
  * Helper class to create Java Objects from the
@@ -48,11 +50,14 @@ public class JMSConsumerInfo {
     * by {@link TopicControl#listAllSubscriptionsAsJSON()} and related methods.
     */
    public static JMSConsumerInfo[] from(final String jsonString) throws 
Exception {
-      JSONArray array = new JSONArray(jsonString);
-      JMSConsumerInfo[] infos = new JMSConsumerInfo[array.length()];
-      for (int i = 0; i < array.length(); i++) {
-         JSONObject sub = array.getJSONObject(i);
-         JMSConsumerInfo info = new 
JMSConsumerInfo(sub.getString("consumerID"), sub.getString("connectionID"), 
sub.getString("destinationName"), sub.getString("destinationType"), 
sub.getBoolean("browseOnly"), sub.getLong("creationTime"), 
sub.getBoolean("durable"), sub.optString("filter", null));
+      JsonArray array = JsonUtil.readJsonArray(jsonString);
+      JMSConsumerInfo[] infos = new JMSConsumerInfo[array.size()];
+      for (int i = 0; i < array.size(); i++) {
+         JsonObject sub = array.getJsonObject(i);
+         JMSConsumerInfo info = new 
JMSConsumerInfo(sub.getString("consumerID"), sub.getString("connectionID"),
+               sub.getString("destinationName"), 
sub.getString("destinationType"), sub.getBoolean("browseOnly"),
+               sub.getJsonNumber("creationTime").longValue(),
+               sub.getBoolean("durable"), sub.getString("filter", null));
          infos[i] = info;
       }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/JMSSessionInfo.java
----------------------------------------------------------------------
diff --git 
a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/JMSSessionInfo.java
 
b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/JMSSessionInfo.java
index 56829c9..b5f0d08 100644
--- 
a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/JMSSessionInfo.java
+++ 
b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/JMSSessionInfo.java
@@ -16,9 +16,10 @@
  */
 package org.apache.activemq.artemis.api.jms.management;
 
-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.apache.activemq.artemis.api.core.JsonUtil;
+
+import javax.json.JsonArray;
+import javax.json.JsonObject;
 
 public class JMSSessionInfo {
 
@@ -31,13 +32,14 @@ public class JMSSessionInfo {
       this.creationTime = creationTime;
    }
 
-   public static JMSSessionInfo[] from(final String jsonString) throws 
JSONException {
-      JSONArray array = new JSONArray(jsonString);
-      JMSSessionInfo[] infos = new JMSSessionInfo[array.length()];
-      for (int i = 0; i < array.length(); i++) {
-         JSONObject obj = array.getJSONObject(i);
+   public static JMSSessionInfo[] from(final String jsonString) {
+      JsonArray array = JsonUtil.readJsonArray(jsonString);
+      JMSSessionInfo[] infos = new JMSSessionInfo[array.size()];
+      for (int i = 0; i < array.size(); i++) {
+         JsonObject obj = array.getJsonObject(i);
 
-         JMSSessionInfo info = new JMSSessionInfo(obj.getString("sessionID"), 
obj.getLong("creationTime"));
+         JMSSessionInfo info = new JMSSessionInfo(obj.getString("sessionID"),
+               obj.getJsonNumber("creationTime").longValue());
          infos[i] = info;
       }
       return infos;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/SubscriptionInfo.java
----------------------------------------------------------------------
diff --git 
a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/SubscriptionInfo.java
 
b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/SubscriptionInfo.java
index 66d04b6..1728d4f 100644
--- 
a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/SubscriptionInfo.java
+++ 
b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/api/jms/management/SubscriptionInfo.java
@@ -16,8 +16,11 @@
  */
 package org.apache.activemq.artemis.api.jms.management;
 
-import org.apache.activemq.artemis.utils.json.JSONArray;
-import org.apache.activemq.artemis.utils.json.JSONObject;
+
+import org.apache.activemq.artemis.api.core.JsonUtil;
+
+import javax.json.JsonArray;
+import javax.json.JsonObject;
 
 /**
  * Helper class to create Java Objects from the
@@ -46,11 +49,13 @@ public class SubscriptionInfo {
     * by {@link TopicControl#listAllSubscriptionsAsJSON()} and related methods.
     */
    public static SubscriptionInfo[] from(final String jsonString) throws 
Exception {
-      JSONArray array = new JSONArray(jsonString);
-      SubscriptionInfo[] infos = new SubscriptionInfo[array.length()];
-      for (int i = 0; i < array.length(); i++) {
-         JSONObject sub = array.getJSONObject(i);
-         SubscriptionInfo info = new 
SubscriptionInfo(sub.getString("queueName"), sub.optString("clientID", null), 
sub.optString("name", null), sub.getBoolean("durable"), 
sub.optString("selector", null), sub.getInt("messageCount"), 
sub.getInt("deliveringCount"));
+      JsonArray array = JsonUtil.readJsonArray(jsonString);
+      SubscriptionInfo[] infos = new SubscriptionInfo[array.size()];
+      for (int i = 0; i < array.size(); i++) {
+         JsonObject sub = array.getJsonObject(i);
+         SubscriptionInfo info = new 
SubscriptionInfo(sub.getString("queueName"), sub.getString("clientID", null),
+               sub.getString("name", null), sub.getBoolean("durable"), 
sub.getString("selector", null),
+               sub.getInt("messageCount"), sub.getInt("deliveringCount"));
          infos[i] = info;
       }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/d0ecf0f3/artemis-jms-server/pom.xml
----------------------------------------------------------------------
diff --git a/artemis-jms-server/pom.xml b/artemis-jms-server/pom.xml
index 0603955..3aa293c 100644
--- a/artemis-jms-server/pom.xml
+++ b/artemis-jms-server/pom.xml
@@ -71,6 +71,14 @@
          <artifactId>geronimo-jta_1.1_spec</artifactId>
          <version>1.1.1</version>
       </dependency>
+      <dependency>
+         <groupId>org.apache.geronimo.specs</groupId>
+         <artifactId>geronimo-json_1.0_spec</artifactId>
+      </dependency>
+      <dependency>
+         <groupId>org.apache.johnzon</groupId>
+         <artifactId>johnzon-core</artifactId>
+      </dependency>
    </dependencies>
 
    <profiles>

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/JMSQueueControlImpl.java
----------------------------------------------------------------------
diff --git 
a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSQueueControlImpl.java
 
b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSQueueControlImpl.java
index f41b85e..0516182 100644
--- 
a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSQueueControlImpl.java
+++ 
b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSQueueControlImpl.java
@@ -17,6 +17,8 @@
 package org.apache.activemq.artemis.jms.management.impl;
 
 import javax.jms.InvalidSelectorException;
+import javax.json.Json;
+import javax.json.JsonArrayBuilder;
 import javax.management.MBeanInfo;
 import javax.management.StandardMBean;
 import javax.management.openmbean.CompositeData;
@@ -33,6 +35,7 @@ import 
org.apache.activemq.artemis.api.core.ActiveMQInvalidFilterExpressionExcep
 import org.apache.activemq.artemis.api.core.FilterConstants;
 import org.apache.activemq.artemis.api.core.Message;
 import org.apache.activemq.artemis.api.core.SimpleString;
+import org.apache.activemq.artemis.api.core.JsonUtil;
 import org.apache.activemq.artemis.api.core.management.MessageCounterInfo;
 import org.apache.activemq.artemis.api.core.management.Operation;
 import org.apache.activemq.artemis.api.core.management.QueueControl;
@@ -47,8 +50,6 @@ import 
org.apache.activemq.artemis.jms.server.JMSServerManager;
 import org.apache.activemq.artemis.utils.Base64;
 import org.apache.activemq.artemis.utils.SelectorTranslator;
 import org.apache.activemq.artemis.utils.UUIDGenerator;
-import org.apache.activemq.artemis.utils.json.JSONArray;
-import org.apache.activemq.artemis.utils.json.JSONObject;
 
 public class JMSQueueControlImpl extends StandardMBean implements 
JMSQueueControl {
 
@@ -74,11 +75,11 @@ public class JMSQueueControlImpl extends StandardMBean 
implements JMSQueueContro
    }
 
    static String toJSON(final Map<String, Object>[] messages) {
-      JSONArray array = new JSONArray();
+      JsonArrayBuilder array = Json.createArrayBuilder();
       for (Map<String, Object> message : messages) {
-         array.put(new JSONObject(message));
+         array.add(JsonUtil.toJsonObject(message));
       }
-      return array.toString();
+      return array.build().toString();
    }
 
    // Constructors --------------------------------------------------

Reply via email to