You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2016/07/26 01:46:36 UTC
[3/5] activemq-artemis git commit: ARTEMIS-565 Replace json.org with
javax.json
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("JSON", "Hello, World!").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> <small>(comma)</small> may appear just before the closing brace.
- * </li>
- * <li>Strings may be quoted with <code>'</code> <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>=></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 <key,bean>.
- *
- * @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> <small>(left brace)</small> and ending
- * with <code>}</code> <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 </, 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> <small>(left brace)</small> and ending
- * with <code>}</code> <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> <small>(left brace)</small> and ending
- * with <code>}</code> <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> <small>(left brace)</small> and ending
- * with <code>}</code> <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> <small>(left brace)</small> and ending
- * with <code>}</code> <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> <small>(left brace)</small> and ending
- * with <code>}</code> <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> <small>(double quote)</small> or
- * <code>'</code> <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 --------------------------------------------------