http://git-wip-us.apache.org/repos/asf/activemq-6/blob/23e8edd9/activemq6-core-client/src/main/java/org/apache/activemq6/utils/json/JSONArray.java ---------------------------------------------------------------------- diff --git a/activemq6-core-client/src/main/java/org/apache/activemq6/utils/json/JSONArray.java b/activemq6-core-client/src/main/java/org/apache/activemq6/utils/json/JSONArray.java new file mode 100644 index 0000000..982570f --- /dev/null +++ b/activemq6-core-client/src/main/java/org/apache/activemq6/utils/json/JSONArray.java @@ -0,0 +1,1034 @@ +/* + * Copyright 2005-2014 Red Hat, Inc. + * Red Hat 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. + */ +/* +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.activemq6.utils.json; + +import java.io.IOException; +import java.io.Writer; +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; + +/** + * A JSONArray is an ordered sequence of values. Its external text form is a + * string wrapped in square brackets with commas separating the values. The + * internal form is an object having <code>get</code> and <code>opt</code> + * methods for accessing the values by index, and <code>put</code> methods for + * adding or replacing values. 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 object</code>. + * <p> + * The constructor can convert a JSON text into a Java object. The + * <code>toString</code> method converts to JSON text. + * <p> + * 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 texts produced by the <code>toString</code> methods strictly conform to + * 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 bracket.</li> + * <li>The {@code null} value will be inserted when there + * is <code>,</code> <small>(comma)</small> elision.</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>Values can be separated 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> + + * @author JSON.org + * @version 2009-04-13 + */ +public class JSONArray +{ + + /** + * The arrayList where the JSONArray's properties are kept. + */ + private final ArrayList<Object> myArrayList; + + /** + * Construct an empty JSONArray. + */ + public JSONArray() + { + myArrayList = new ArrayList<Object>(); + } + + /** + * Construct a JSONArray from a JSONTokener. + * @param x A JSONTokener + * @throws JSONException If there is a syntax error. + */ + public JSONArray(final JSONTokener x) throws JSONException + { + this(); + char c = x.nextClean(); + char q; + if (c == '[') + { + q = ']'; + } + else if (c == '(') + { + q = ')'; + } + else + { + throw x.syntaxError("A JSONArray text must start with '['"); + } + if (x.nextClean() == ']') + { + return; + } + x.back(); + for (;;) + { + if (x.nextClean() == ',') + { + x.back(); + myArrayList.add(null); + } + else + { + x.back(); + myArrayList.add(x.nextValue()); + } + c = x.nextClean(); + switch (c) + { + case ';': + case ',': + if (x.nextClean() == ']') + { + return; + } + x.back(); + break; + case ']': + case ')': + if (q != c) + { + throw x.syntaxError("Expected a '" + Character.valueOf(q) + "'"); + } + return; + default: + throw x.syntaxError("Expected a ',' or ']'"); + } + } + } + + /** + * Construct a JSONArray from a source JSON text. + * @param source A string that begins with + * <code>[</code> <small>(left bracket)</small> + * and ends with <code>]</code> <small>(right bracket)</small>. + * @throws JSONException If there is a syntax error. + */ + public JSONArray(final String source) throws JSONException + { + this(new JSONTokener(source)); + } + + /** + * Construct a JSONArray from a Collection. + * @param collection A Collection. + */ + public JSONArray(final Collection collection) + { + myArrayList = collection == null ? new ArrayList<Object>() : new ArrayList<Object>(collection); + } + + /** + * Construct a JSONArray from a collection of beans. + * The collection should have Java Beans. + */ + public JSONArray(final Collection collection, final boolean includeSuperClass) + { + myArrayList = collection == null ? new ArrayList<Object>() : new ArrayList<Object>(collection.size()); + if (collection != null) + { + Iterator<Object> iter = collection.iterator(); + while (iter.hasNext()) + { + Object o = iter.next(); + if (o instanceof Map<?, ?>) + { + myArrayList.add(new JSONObject((Map<?, ?>)o, includeSuperClass)); + } + else if (!JSONObject.isStandardProperty(o.getClass())) + { + myArrayList.add(new JSONObject(o, includeSuperClass)); + } + else + { + myArrayList.add(o); + } + } + } + } + + /** + * Construct a JSONArray from an array + * @throws JSONException If not an array. + */ + public JSONArray(final Object array) throws JSONException + { + this(); + if (array.getClass().isArray()) + { + int length = Array.getLength(array); + for (int i = 0; i < length; i += 1) + { + this.put(Array.get(array, i)); + } + } + else + { + throw new JSONException("JSONArray initial value should be a string or collection or array."); + } + } + + /** + * Construct a JSONArray from an array with a bean. + * The array should have Java Beans. + * + * @throws JSONException If not an array. + */ + public JSONArray(final Object array, final boolean includeSuperClass) throws JSONException + { + this(); + if (array.getClass().isArray()) + { + int length = Array.getLength(array); + for (int i = 0; i < length; i += 1) + { + Object o = Array.get(array, i); + if (JSONObject.isStandardProperty(o.getClass())) + { + myArrayList.add(o); + } + else + { + myArrayList.add(new JSONObject(o, includeSuperClass)); + } + } + } + else + { + throw new JSONException("JSONArray initial value should be a string or collection or array."); + } + } + + /** + * Get the object value associated with an index. + * @param index + * The index must be between 0 and length() - 1. + * @return An object value. + * @throws JSONException If there is no value for the index. + */ + public Object get(final int index) throws JSONException + { + Object o = opt(index); + if (o == null) + { + throw new JSONException("JSONArray[" + index + "] not found."); + } + return o; + } + + /** + * Get the boolean value associated with an index. + * The string values "true" and "false" are converted to boolean. + * + * @param index The index must be between 0 and length() - 1. + * @return The truth. + * @throws JSONException If there is no value for the index or if the + * value is not convertable to boolean. + */ + public boolean getBoolean(final int index) throws JSONException + { + Object o = get(index); + 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("JSONArray[" + index + "] is not a Boolean."); + } + + /** + * Get the double value associated with an index. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + * @throws JSONException If the key is not found or if the value cannot + * be converted to a number. + */ + public double getDouble(final int index) throws JSONException + { + Object o = get(index); + try + { + return o instanceof Number ? ((Number)o).doubleValue() : Double.valueOf((String)o).doubleValue(); + } + catch (Exception e) + { + throw new JSONException("JSONArray[" + index + "] is not a number."); + } + } + + /** + * Get the int value associated with an index. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + * @throws JSONException If the key is not found or if the value cannot + * be converted to a number. + * if the value cannot be converted to a number. + */ + public int getInt(final int index) throws JSONException + { + Object o = get(index); + return o instanceof Number ? ((Number)o).intValue() : (int)getDouble(index); + } + + /** + * Get the JSONArray associated with an index. + * @param index The index must be between 0 and length() - 1. + * @return A JSONArray value. + * @throws JSONException If there is no value for the index. or if the + * value is not a JSONArray + */ + public JSONArray getJSONArray(final int index) throws JSONException + { + Object o = get(index); + if (o instanceof JSONArray) + { + return (JSONArray)o; + } + throw new JSONException("JSONArray[" + index + "] is not a JSONArray."); + } + + /** + * Get the JSONObject associated with an index. + * @param index subscript + * @return A JSONObject value. + * @throws JSONException If there is no value for the index or if the + * value is not a JSONObject + */ + public JSONObject getJSONObject(final int index) throws JSONException + { + Object o = get(index); + if (o instanceof JSONObject) + { + return (JSONObject)o; + } + throw new JSONException("JSONArray[" + index + "] is not a JSONObject."); + } + + /** + * Get the long value associated with an index. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + * @throws JSONException If the key is not found or if the value cannot + * be converted to a number. + */ + public long getLong(final int index) throws JSONException + { + Object o = get(index); + return o instanceof Number ? ((Number)o).longValue() : (long)getDouble(index); + } + + /** + * Get the string associated with an index. + * @param index The index must be between 0 and length() - 1. + * @return A string value. + * @throws JSONException If there is no value for the index. + */ + public String getString(final int index) throws JSONException + { + return get(index).toString(); + } + + /** + * Determine if the value is null. + * @param index The index must be between 0 and length() - 1. + * @return true if the value at the index is null, or if there is no value. + */ + public boolean isNull(final int index) + { + return JSONObject.NULL.equals(opt(index)); + } + + /** + * Make a string from the contents of this JSONArray. The + * <code>separator</code> string is inserted between each element. + * Warning: This method assumes that the data structure is acyclical. + * @param separator A string that will be inserted between the elements. + * @return a string. + * @throws JSONException If the array contains an invalid number. + */ + public String join(final String separator) throws JSONException + { + int len = length(); + StringBuffer sb = new StringBuffer(); + + for (int i = 0; i < len; i += 1) + { + if (i > 0) + { + sb.append(separator); + } + sb.append(JSONObject.valueToString(myArrayList.get(i))); + } + return sb.toString(); + } + + /** + * Get the number of elements in the JSONArray, included nulls. + * + * @return The length (or size). + */ + public int length() + { + return myArrayList.size(); + } + + /** + * Get the optional object value associated with an index. + * @param index The index must be between 0 and length() - 1. + * @return An object value, or null if there is no + * object at that index. + */ + public Object opt(final int index) + { + return index < 0 || index >= length() ? null : myArrayList.get(index); + } + + /** + * Get the optional boolean value associated with an index. + * It returns false if there is no value at that index, + * or if the value is not Boolean.TRUE or the String "true". + * + * @param index The index must be between 0 and length() - 1. + * @return The truth. + */ + public boolean optBoolean(final int index) + { + return optBoolean(index, false); + } + + /** + * Get the optional boolean value associated with an index. + * It returns the defaultValue if there is no value at that index or if + * it is not a Boolean or the String "true" or "false" (case insensitive). + * + * @param index The index must be between 0 and length() - 1. + * @param defaultValue A boolean default. + * @return The truth. + */ + public boolean optBoolean(final int index, final boolean defaultValue) + { + try + { + return getBoolean(index); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * Get the optional double value associated with an index. + * NaN is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + */ + public double optDouble(final int index) + { + return optDouble(index, Double.NaN); + } + + /** + * Get the optional double value associated with an index. + * The defaultValue is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * + * @param index subscript + * @param defaultValue The default value. + * @return The value. + */ + public double optDouble(final int index, final double defaultValue) + { + try + { + return getDouble(index); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * Get the optional int value associated with an index. + * Zero is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + */ + public int optInt(final int index) + { + return optInt(index, 0); + } + + /** + * Get the optional int value associated with an index. + * The defaultValue is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * @param index The index must be between 0 and length() - 1. + * @param defaultValue The default value. + * @return The value. + */ + public int optInt(final int index, final int defaultValue) + { + try + { + return getInt(index); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * Get the optional JSONArray associated with an index. + * @param index subscript + * @return A JSONArray value, or null if the index has no value, + * or if the value is not a JSONArray. + */ + public JSONArray optJSONArray(final int index) + { + Object o = opt(index); + return o instanceof JSONArray ? (JSONArray)o : null; + } + + /** + * Get the optional JSONObject associated with an index. + * Null is returned if the key is not found, or null if the index has + * no value, or if the value is not a JSONObject. + * + * @param index The index must be between 0 and length() - 1. + * @return A JSONObject value. + */ + public JSONObject optJSONObject(final int index) + { + Object o = opt(index); + return o instanceof JSONObject ? (JSONObject)o : null; + } + + /** + * Get the optional long value associated with an index. + * Zero is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * + * @param index The index must be between 0 and length() - 1. + * @return The value. + */ + public long optLong(final int index) + { + return optLong(index, 0); + } + + /** + * Get the optional long value associated with an index. + * The defaultValue is returned if there is no value for the index, + * or if the value is not a number and cannot be converted to a number. + * @param index The index must be between 0 and length() - 1. + * @param defaultValue The default value. + * @return The value. + */ + public long optLong(final int index, final long defaultValue) + { + try + { + return getLong(index); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * Get the optional string value associated with an index. It returns an + * empty string if there is no value at that index. If the value + * is not a string and is not null, then it is converted to a string. + * + * @param index The index must be between 0 and length() - 1. + * @return A String value. + */ + public String optString(final int index) + { + return optString(index, ""); + } + + /** + * Get the optional string associated with an index. + * The defaultValue is returned if the key is not found. + * + * @param index The index must be between 0 and length() - 1. + * @param defaultValue The default value. + * @return A String value. + */ + public String optString(final int index, final String defaultValue) + { + Object o = opt(index); + return o != null ? o.toString() : defaultValue; + } + + /** + * Append a boolean value. This increases the array's length by one. + * + * @param value A boolean value. + * @return this. + */ + public JSONArray put(final boolean value) + { + put(value ? Boolean.TRUE : Boolean.FALSE); + return this; + } + + /** + * Put a value in the JSONArray, where the value will be a + * JSONArray which is produced from a Collection. + * @param value A Collection value. + * @return this. + */ + public JSONArray put(final Collection value) + { + put(new JSONArray(value)); + return this; + } + + /** + * Append a double value. This increases the array's length by one. + * + * @param value A double value. + * @throws JSONException if the value is not finite. + * @return this. + */ + public JSONArray put(final double value) throws JSONException + { + Double d = new Double(value); + JSONObject.testValidity(d); + put(d); + return this; + } + + /** + * Append an int value. This increases the array's length by one. + * + * @param value An int value. + * @return this. + */ + public JSONArray put(final int value) + { + put(Integer.valueOf(value)); + return this; + } + + /** + * Append an long value. This increases the array's length by one. + * + * @param value A long value. + * @return this. + */ + public JSONArray put(final long value) + { + put(Long.valueOf(value)); + return this; + } + + /** + * Put a value in the JSONArray, where the value will be a + * JSONObject which is produced from a Map. + * @param value A Map value. + * @return this. + */ + public JSONArray put(final Map value) + { + put(new JSONObject(value)); + return this; + } + + /** + * Append an object value. This increases the array's length by one. + * @param value An object value. The value should be a + * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the + * JSONObject.NULL object. + * @return this. + */ + public JSONArray put(final Object value) + { + myArrayList.add(value); + return this; + } + + /** + * Put or replace a boolean value in the JSONArray. If the index is greater + * than the length of the JSONArray, then null elements will be added as + * necessary to pad it out. + * @param index The subscript. + * @param value A boolean value. + * @return this. + * @throws JSONException If the index is negative. + */ + public JSONArray put(final int index, final boolean value) throws JSONException + { + put(index, value ? Boolean.TRUE : Boolean.FALSE); + return this; + } + + /** + * Put a value in the JSONArray, where the value will be a + * JSONArray which is produced from a Collection. + * @param index The subscript. + * @param value A Collection value. + * @return this. + * @throws JSONException If the index is negative or if the value is + * not finite. + */ + public JSONArray put(final int index, final Collection value) throws JSONException + { + put(index, new JSONArray(value)); + return this; + } + + /** + * Put or replace a double value. If the index is greater than the length of + * the JSONArray, then null elements will be added as necessary to pad + * it out. + * @param index The subscript. + * @param value A double value. + * @return this. + * @throws JSONException If the index is negative or if the value is + * not finite. + */ + public JSONArray put(final int index, final double value) throws JSONException + { + put(index, new Double(value)); + return this; + } + + /** + * Put or replace an int value. If the index is greater than the length of + * the JSONArray, then null elements will be added as necessary to pad + * it out. + * @param index The subscript. + * @param value An int value. + * @return this. + * @throws JSONException If the index is negative. + */ + public JSONArray put(final int index, final int value) throws JSONException + { + put(index, Integer.valueOf(value)); + return this; + } + + /** + * Put or replace a long value. If the index is greater than the length of + * the JSONArray, then null elements will be added as necessary to pad + * it out. + * @param index The subscript. + * @param value A long value. + * @return this. + * @throws JSONException If the index is negative. + */ + public JSONArray put(final int index, final long value) throws JSONException + { + put(index, Long.valueOf(value)); + return this; + } + + /** + * Put a value in the JSONArray, where the value will be a + * JSONObject which is produced from a Map. + * @param index The subscript. + * @param value The Map value. + * @return this. + * @throws JSONException If the index is negative or if the the value is + * an invalid number. + */ + public JSONArray put(final int index, final Map value) throws JSONException + { + put(index, new JSONObject(value)); + return this; + } + + /** + * Put or replace an object value in the JSONArray. If the index is greater + * than the length of the JSONArray, then null elements will be added as + * necessary to pad it out. + * @param index The subscript. + * @param value The value to put into the array. The value should be a + * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the + * JSONObject.NULL object. + * @return this. + * @throws JSONException If the index is negative or if the the value is + * an invalid number. + */ + public JSONArray put(final int index, final Object value) throws JSONException + { + JSONObject.testValidity(value); + if (index < 0) + { + throw new JSONException("JSONArray[" + index + "] not found."); + } + if (index < length()) + { + myArrayList.set(index, value); + } + else + { + while (index != length()) + { + put(JSONObject.NULL); + } + put(value); + } + return this; + } + + /** + * Remove a index and close the hole. + * @param index The index of the element to be removed. + * @return The value that was associated with the index, + * or null if there was no value. + */ + public Object remove(final int index) + { + Object o = opt(index); + myArrayList.remove(index); + return o; + } + + /** + * Produce a JSONObject by combining a JSONArray of names with the values + * of this JSONArray. + * @param names A JSONArray containing a list of key strings. These will be + * paired with the values. + * @return A JSONObject, or null if there are no names or if this JSONArray + * has no values. + * @throws JSONException If any of the names are null. + */ + public JSONObject toJSONObject(final JSONArray names) throws JSONException + { + if (names == null || names.length() == 0 || length() == 0) + { + return null; + } + JSONObject jo = new JSONObject(); + for (int i = 0; i < names.length(); i += 1) + { + jo.put(names.getString(i), opt(i)); + } + return jo; + } + + /** + * Make a JSON text of this JSONArray. For compactness, no + * unnecessary whitespace is added. If it is not possible to produce a + * syntactically correct JSON text then null will be returned instead. This + * could occur if the array contains an invalid number. + * <p> + * Warning: This method assumes that the data structure is acyclical. + * + * @return a printable, displayable, transmittable + * representation of the array. + */ + @Override + public String toString() + { + try + { + return '[' + join(",") + ']'; + } + catch (Exception e) + { + return ""; + } + } + + /** + * Make a pretty-printed JSON text of this JSONArray. 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, transmittable representation of the object, beginning with + * <code>[</code> <small>(left bracket)</small> and ending with <code>]</code> + * <small>(right bracket)</small>. + * @throws JSONException + */ + public String toString(final int indentFactor) throws JSONException + { + return toString(indentFactor, 0); + } + + /** + * Make a pretty-printed JSON text of this JSONArray. 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 indention of the top level. + * @return a printable, displayable, transmittable representation of the array. + * @throws JSONException + */ + String toString(final int indentFactor, final int indent) throws JSONException + { + int len = length(); + if (len == 0) + { + return "[]"; + } + int i; + StringBuffer sb = new StringBuffer("["); + if (len == 1) + { + sb.append(JSONObject.valueToString(myArrayList.get(0), indentFactor, indent)); + } + else + { + int newindent = indent + indentFactor; + sb.append('\n'); + for (i = 0; i < len; i += 1) + { + if (i > 0) + { + sb.append(",\n"); + } + for (int j = 0; j < newindent; j += 1) + { + sb.append(' '); + } + sb.append(JSONObject.valueToString(myArrayList.get(i), indentFactor, newindent)); + } + sb.append('\n'); + for (i = 0; i < indent; i += 1) + { + sb.append(' '); + } + } + sb.append(']'); + return sb.toString(); + } + + /** + * Write the contents of the JSONArray 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; + int len = length(); + + writer.write('['); + + for (int i = 0; i < len; i += 1) + { + if (b) + { + writer.write(','); + } + Object v = myArrayList.get(i); + 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-6/blob/23e8edd9/activemq6-core-client/src/main/java/org/apache/activemq6/utils/json/JSONException.java ---------------------------------------------------------------------- diff --git a/activemq6-core-client/src/main/java/org/apache/activemq6/utils/json/JSONException.java b/activemq6-core-client/src/main/java/org/apache/activemq6/utils/json/JSONException.java new file mode 100644 index 0000000..f1b47c9 --- /dev/null +++ b/activemq6-core-client/src/main/java/org/apache/activemq6/utils/json/JSONException.java @@ -0,0 +1,73 @@ +/* + * Copyright 2005-2014 Red Hat, Inc. + * Red Hat 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. + */ +/* +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.activemq6.utils.json; + +/** + * The JSONException is thrown by the JSON.org classes then things are amiss. + * @author JSON.org + * @version 2008-09-18 + */ +public class JSONException extends Exception +{ + /** + * + */ + private static final long serialVersionUID = -3940674325153571604L; + + private Throwable cause; + + /** + * Constructs a JSONException with an explanatory message. + * @param message Detail about the reason for the exception. + */ + public JSONException(final String message) + { + super(message); + } + + public JSONException(final Throwable t) + { + super(t.getMessage()); + cause = t; + } + + @Override + public synchronized Throwable getCause() + { + return cause; + } +}
