From cb62441d65a7bdd2540b58c11271775f2f9db02b Mon Sep 17 00:00:00 2001 From: Joakim Uddholm Date: Sat, 23 Mar 2013 11:08:02 +0100 Subject: [PATCH 1/3] Annotation and JSONMappedObj Annotation and JSONMappedObj to make parsing to object super easy. Just inherit JSONMappedObject and mark any JSON Serializable field with JSONObj --- JSONMappedObject.java | 101 +++++++ JSONObj.java | 11 + JSONWriter.java | 659 +++++++++++++++++++++--------------------- javajson.jar | Bin 0 -> 47930 bytes 4 files changed, 444 insertions(+), 327 deletions(-) create mode 100644 JSONMappedObject.java create mode 100644 JSONObj.java create mode 100644 javajson.jar diff --git a/JSONMappedObject.java b/JSONMappedObject.java new file mode 100644 index 000000000..b599baf1a --- /dev/null +++ b/JSONMappedObject.java @@ -0,0 +1,101 @@ +package org.json; + +import java.lang.reflect.Array; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; + + + + +public abstract class JSONMappedObject { + + private static boolean debug = false; + + protected Object getValue(Class type, Object obj) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, JSONException + { + Object value; + + if(JSONMappedObject.class.isAssignableFrom(type)) { + // Recursion + if(debug) System.out.println("Object found"); + Constructor constructor = type.getConstructor(JSONObject.class); + if(debug) System.out.println("Constructor created"); + value = constructor.newInstance((JSONObject) obj); + } else if(type.isEnum()) { + // Enums + if(debug) System.out.println("Enum found"); + value = Enum.valueOf((Class) type, (String) obj); + } else if(type.isArray()) { + JSONArray array = (JSONArray) obj; + Object[] objects = new Object[array.length()]; + for(int i = 0; i < array.length(); i++) + objects[i] = getValue(type.getComponentType(), array.get(i)); + value = objects; + } else { + // Basic type. Or error :( + if(debug) System.out.println("Basic found"); + value = obj; + } + + return value; + } + + protected Object getValue(Class type, String key, JSONObject obj) throws NoSuchMethodException, SecurityException, JSONException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException + { + Object value; + + if(JSONMappedObject.class.isAssignableFrom(type)) { + // Recursion + if(debug) System.out.println("Object found"); + Constructor constructor = type.getConstructor(JSONObject.class); + if(debug) System.out.println("Constructor created"); + value = constructor.newInstance(obj.getJSONObject(key)); + } else if(type.isEnum()) { + // Enums + if(debug) System.out.println("Enum found"); + value = Enum.valueOf((Class) type, obj.getString(key)); + } else if(type.isArray()) { + JSONArray array = obj.getJSONArray(key); + Object objects = type.cast(Array.newInstance(type.getComponentType(), array.length())); + for(int i = 0; i < array.length(); i++) + Array.set(objects, i, type.getComponentType().cast(getValue(type.getComponentType(), array.get(i)))); + value = objects; + } else { + // Basic type. Or error :( + if(debug) System.out.println("Basic found"); + value = obj.get(key); + } + + return value; + } + + protected void parseJson(JSONObject obj) throws JSONException, IllegalArgumentException, IllegalAccessException, InstantiationException, NoSuchMethodException, SecurityException, InvocationTargetException { + if(debug) System.out.println("parseJson called on " + this.getClass().getName()); + Field[] fields = this.getClass().getDeclaredFields(); + + for(Field field : fields) { + if(debug) System.out.println("Checking " + field.getName()); + if(!field.isAnnotationPresent(JSONObj.class)) + continue; + + String key = field.getName(); + Class type = field.getType(); + if(debug) System.out.println("Annotation found on " + key + " type: " + type.getName()); + + Object value = getValue(type, key, obj); + + field.set(this, value); + if(debug) System.out.println("Field set to " + value); + } + } + + public JSONMappedObject(JSONObject obj) throws JSONException + { + try { + parseJson(obj); + } catch (IllegalArgumentException | IllegalAccessException | InstantiationException | NoSuchMethodException | SecurityException | InvocationTargetException e) { + throw new JSONException(e); + } + } +} diff --git a/JSONObj.java b/JSONObj.java new file mode 100644 index 000000000..20f0046e7 --- /dev/null +++ b/JSONObj.java @@ -0,0 +1,11 @@ +package org.json; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD}) +public @interface JSONObj { +} diff --git a/JSONWriter.java b/JSONWriter.java index 855b2bdb1..e29d980d4 100755 --- a/JSONWriter.java +++ b/JSONWriter.java @@ -1,327 +1,332 @@ -package org.json; - -import java.io.IOException; -import java.io.Writer; - -/* -Copyright (c) 2006 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. -*/ - -/** - * JSONWriter provides a quick and convenient way of producing JSON text. - * The texts produced strictly conform to JSON syntax rules. No whitespace is - * added, so the results are ready for transmission or storage. Each instance of - * JSONWriter can produce one JSON text. - *

- * A JSONWriter instance provides a value method for appending - * values to the - * text, and a key - * method for adding keys before values in objects. There are array - * and endArray methods that make and bound array values, and - * object and endObject methods which make and bound - * object values. All of these methods return the JSONWriter instance, - * permitting a cascade style. For example,

- * new JSONWriter(myWriter)
- *     .object()
- *         .key("JSON")
- *         .value("Hello, World!")
- *     .endObject();
which writes
- * {"JSON":"Hello, World!"}
- *

- * The first method called must be array or object. - * There are no methods for adding commas or colons. JSONWriter adds them for - * you. Objects and arrays can be nested up to 20 levels deep. - *

- * This can sometimes be easier than using a JSONObject to build a string. - * @author JSON.org - * @version 2011-11-24 - */ -public class JSONWriter { - private static final int maxdepth = 200; - - /** - * The comma flag determines if a comma should be output before the next - * value. - */ - private boolean comma; - - /** - * The current mode. Values: - * 'a' (array), - * 'd' (done), - * 'i' (initial), - * 'k' (key), - * 'o' (object). - */ - protected char mode; - - /** - * The object/array stack. - */ - private final JSONObject stack[]; - - /** - * The stack top index. A value of 0 indicates that the stack is empty. - */ - private int top; - - /** - * The writer that will receive the output. - */ - protected Writer writer; - - /** - * Make a fresh JSONWriter. It can be used to build one JSON text. - */ - public JSONWriter(Writer w) { - this.comma = false; - this.mode = 'i'; - this.stack = new JSONObject[maxdepth]; - this.top = 0; - this.writer = w; - } - - /** - * Append a value. - * @param string A string value. - * @return this - * @throws JSONException If the value is out of sequence. - */ - private JSONWriter append(String string) throws JSONException { - if (string == null) { - throw new JSONException("Null pointer"); - } - if (this.mode == 'o' || this.mode == 'a') { - try { - if (this.comma && this.mode == 'a') { - this.writer.write(','); - } - this.writer.write(string); - } catch (IOException e) { - throw new JSONException(e); - } - if (this.mode == 'o') { - this.mode = 'k'; - } - this.comma = true; - return this; - } - throw new JSONException("Value out of sequence."); - } - - /** - * Begin appending a new array. All values until the balancing - * endArray will be appended to this array. The - * endArray method must be called to mark the array's end. - * @return this - * @throws JSONException If the nesting is too deep, or if the object is - * started in the wrong place (for example as a key or after the end of the - * outermost array or object). - */ - public JSONWriter array() throws JSONException { - if (this.mode == 'i' || this.mode == 'o' || this.mode == 'a') { - this.push(null); - this.append("["); - this.comma = false; - return this; - } - throw new JSONException("Misplaced array."); - } - - /** - * End something. - * @param mode Mode - * @param c Closing character - * @return this - * @throws JSONException If unbalanced. - */ - private JSONWriter end(char mode, char c) throws JSONException { - if (this.mode != mode) { - throw new JSONException(mode == 'a' - ? "Misplaced endArray." - : "Misplaced endObject."); - } - this.pop(mode); - try { - this.writer.write(c); - } catch (IOException e) { - throw new JSONException(e); - } - this.comma = true; - return this; - } - - /** - * End an array. This method most be called to balance calls to - * array. - * @return this - * @throws JSONException If incorrectly nested. - */ - public JSONWriter endArray() throws JSONException { - return this.end('a', ']'); - } - - /** - * End an object. This method most be called to balance calls to - * object. - * @return this - * @throws JSONException If incorrectly nested. - */ - public JSONWriter endObject() throws JSONException { - return this.end('k', '}'); - } - - /** - * Append a key. The key will be associated with the next value. In an - * object, every value must be preceded by a key. - * @param string A key string. - * @return this - * @throws JSONException If the key is out of place. For example, keys - * do not belong in arrays or if the key is null. - */ - public JSONWriter key(String string) throws JSONException { - if (string == null) { - throw new JSONException("Null key."); - } - if (this.mode == 'k') { - try { - this.stack[this.top - 1].putOnce(string, Boolean.TRUE); - if (this.comma) { - this.writer.write(','); - } - this.writer.write(JSONObject.quote(string)); - this.writer.write(':'); - this.comma = false; - this.mode = 'o'; - return this; - } catch (IOException e) { - throw new JSONException(e); - } - } - throw new JSONException("Misplaced key."); - } - - - /** - * Begin appending a new object. All keys and values until the balancing - * endObject will be appended to this object. The - * endObject method must be called to mark the object's end. - * @return this - * @throws JSONException If the nesting is too deep, or if the object is - * started in the wrong place (for example as a key or after the end of the - * outermost array or object). - */ - public JSONWriter object() throws JSONException { - if (this.mode == 'i') { - this.mode = 'o'; - } - if (this.mode == 'o' || this.mode == 'a') { - this.append("{"); - this.push(new JSONObject()); - this.comma = false; - return this; - } - throw new JSONException("Misplaced object."); - - } - - - /** - * Pop an array or object scope. - * @param c The scope to close. - * @throws JSONException If nesting is wrong. - */ - private void pop(char c) throws JSONException { - if (this.top <= 0) { - throw new JSONException("Nesting error."); - } - char m = this.stack[this.top - 1] == null ? 'a' : 'k'; - if (m != c) { - throw new JSONException("Nesting error."); - } - this.top -= 1; - this.mode = this.top == 0 - ? 'd' - : this.stack[this.top - 1] == null - ? 'a' - : 'k'; - } - - /** - * Push an array or object scope. - * @param c The scope to open. - * @throws JSONException If nesting is too deep. - */ - private void push(JSONObject jo) throws JSONException { - if (this.top >= maxdepth) { - throw new JSONException("Nesting too deep."); - } - this.stack[this.top] = jo; - this.mode = jo == null ? 'a' : 'k'; - this.top += 1; - } - - - /** - * Append either the value true or the value - * false. - * @param b A boolean. - * @return this - * @throws JSONException - */ - public JSONWriter value(boolean b) throws JSONException { - return this.append(b ? "true" : "false"); - } - - /** - * Append a double value. - * @param d A double. - * @return this - * @throws JSONException If the number is not finite. - */ - public JSONWriter value(double d) throws JSONException { - return this.value(new Double(d)); - } - - /** - * Append a long value. - * @param l A long. - * @return this - * @throws JSONException - */ - public JSONWriter value(long l) throws JSONException { - return this.append(Long.toString(l)); - } - - - /** - * Append an object value. - * @param object The object to append. It can be null, or a Boolean, Number, - * String, JSONObject, or JSONArray, or an object that implements JSONString. - * @return this - * @throws JSONException If the value is out of sequence. - */ - public JSONWriter value(Object object) throws JSONException { - return this.append(JSONObject.valueToString(object)); - } -} +package org.json; + +import java.io.IOException; +import java.io.Writer; + +/* +Copyright (c) 2006 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. +*/ + +/** + * JSONWriter provides a quick and convenient way of producing JSON text. + * The texts produced strictly conform to JSON syntax rules. No whitespace is + * added, so the results are ready for transmission or storage. Each instance of + * JSONWriter can produce one JSON text. + *

+ * A JSONWriter instance provides a value method for appending + * values to the + * text, and a key + * method for adding keys before values in objects. There are array + * and endArray methods that make and bound array values, and + * object and endObject methods which make and bound + * object values. All of these methods return the JSONWriter instance, + * permitting a cascade style. For example,

+ * new JSONWriter(myWriter)
+ *     .object()
+ *         .key("JSON")
+ *         .value("Hello, World!")
+ *     .endObject();
which writes
+ * {"JSON":"Hello, World!"}
+ *

+ * The first method called must be array or object. + * There are no methods for adding commas or colons. JSONWriter adds them for + * you. Objects and arrays can be nested up to 20 levels deep. + *

+ * This can sometimes be easier than using a JSONObject to build a string. + * @author JSON.org + * @version 2011-11-24 + */ +public class JSONWriter { + private static final int maxdepth = 200; + + /** + * The comma flag determines if a comma should be output before the next + * value. + */ + private boolean comma; + + /** + * The current mode. Values: + * 'a' (array), + * 'd' (done), + * 'i' (initial), + * 'k' (key), + * 'o' (object). + */ + protected char mode; + + /** + * The object/array stack. + */ + private final JSONObject stack[]; + + /** + * The stack top index. A value of 0 indicates that the stack is empty. + */ + private int top; + + /** + * The writer that will receive the output. + */ + protected Writer writer; + + /** + * Make a fresh JSONWriter. It can be used to build one JSON text. + */ + public JSONWriter(Writer w) { + this.comma = false; + this.mode = 'i'; + this.stack = new JSONObject[maxdepth]; + this.top = 0; + this.writer = w; + } + + /** + * Append a value. + * @param string A string value. + * @return this + * @throws JSONException If the value is out of sequence. + */ + private JSONWriter append(String string) throws JSONException { + if (string == null) { + throw new JSONException("Null pointer"); + } + if (this.mode == 'o' || this.mode == 'a') { + try { + if (this.comma && this.mode == 'a') { + this.writer.write(','); + this.writer.write('\n'); + } + this.writer.write(string); + } catch (IOException e) { + throw new JSONException(e); + } + if (this.mode == 'o') { + this.mode = 'k'; + } + this.comma = true; + return this; + } + throw new JSONException("Value out of sequence."); + } + + /** + * Begin appending a new array. All values until the balancing + * endArray will be appended to this array. The + * endArray method must be called to mark the array's end. + * @return this + * @throws JSONException If the nesting is too deep, or if the object is + * started in the wrong place (for example as a key or after the end of the + * outermost array or object). + */ + public JSONWriter array() throws JSONException { + if (this.mode == 'i' || this.mode == 'o' || this.mode == 'a') { + this.push(null); + this.append("["); + this.comma = false; + return this; + } + throw new JSONException("Misplaced array."); + } + + /** + * End something. + * @param mode Mode + * @param c Closing character + * @return this + * @throws JSONException If unbalanced. + */ + private JSONWriter end(char mode, char c) throws JSONException { + if (this.mode != mode) { + throw new JSONException(mode == 'a' + ? "Misplaced endArray." + : "Misplaced endObject."); + } + this.pop(mode); + try { + if(c == '}') + this.writer.write('\n'); + this.writer.write(c); + this.writer.write('\n'); + } catch (IOException e) { + throw new JSONException(e); + } + this.comma = true; + return this; + } + + /** + * End an array. This method most be called to balance calls to + * array. + * @return this + * @throws JSONException If incorrectly nested. + */ + public JSONWriter endArray() throws JSONException { + return this.end('a', ']'); + } + + /** + * End an object. This method most be called to balance calls to + * object. + * @return this + * @throws JSONException If incorrectly nested. + */ + public JSONWriter endObject() throws JSONException { + return this.end('k', '}'); + } + + /** + * Append a key. The key will be associated with the next value. In an + * object, every value must be preceded by a key. + * @param string A key string. + * @return this + * @throws JSONException If the key is out of place. For example, keys + * do not belong in arrays or if the key is null. + */ + public JSONWriter key(String string) throws JSONException { + if (string == null) { + throw new JSONException("Null key."); + } + if (this.mode == 'k') { + try { + this.stack[this.top - 1].putOnce(string, Boolean.TRUE); + if (this.comma) { + this.writer.write(','); + this.writer.write('\n'); + } + this.writer.write(JSONObject.quote(string)); + this.writer.write(':'); + this.comma = false; + this.mode = 'o'; + return this; + } catch (IOException e) { + throw new JSONException(e); + } + } + throw new JSONException("Misplaced key."); + } + + + /** + * Begin appending a new object. All keys and values until the balancing + * endObject will be appended to this object. The + * endObject method must be called to mark the object's end. + * @return this + * @throws JSONException If the nesting is too deep, or if the object is + * started in the wrong place (for example as a key or after the end of the + * outermost array or object). + */ + public JSONWriter object() throws JSONException { + if (this.mode == 'i') { + this.mode = 'o'; + } + if (this.mode == 'o' || this.mode == 'a') { + this.append("{\n"); + this.push(new JSONObject()); + this.comma = false; + return this; + } + throw new JSONException("Misplaced object."); + + } + + + /** + * Pop an array or object scope. + * @param c The scope to close. + * @throws JSONException If nesting is wrong. + */ + private void pop(char c) throws JSONException { + if (this.top <= 0) { + throw new JSONException("Nesting error."); + } + char m = this.stack[this.top - 1] == null ? 'a' : 'k'; + if (m != c) { + throw new JSONException("Nesting error."); + } + this.top -= 1; + this.mode = this.top == 0 + ? 'd' + : this.stack[this.top - 1] == null + ? 'a' + : 'k'; + } + + /** + * Push an array or object scope. + * @param c The scope to open. + * @throws JSONException If nesting is too deep. + */ + private void push(JSONObject jo) throws JSONException { + if (this.top >= maxdepth) { + throw new JSONException("Nesting too deep."); + } + this.stack[this.top] = jo; + this.mode = jo == null ? 'a' : 'k'; + this.top += 1; + } + + + /** + * Append either the value true or the value + * false. + * @param b A boolean. + * @return this + * @throws JSONException + */ + public JSONWriter value(boolean b) throws JSONException { + return this.append(b ? "true" : "false"); + } + + /** + * Append a double value. + * @param d A double. + * @return this + * @throws JSONException If the number is not finite. + */ + public JSONWriter value(double d) throws JSONException { + return this.value(new Double(d)); + } + + /** + * Append a long value. + * @param l A long. + * @return this + * @throws JSONException + */ + public JSONWriter value(long l) throws JSONException { + return this.append(Long.toString(l)); + } + + + /** + * Append an object value. + * @param object The object to append. It can be null, or a Boolean, Number, + * String, JSONObject, or JSONArray, or an object that implements JSONString. + * @return this + * @throws JSONException If the value is out of sequence. + */ + public JSONWriter value(Object object) throws JSONException { + return this.append(JSONObject.valueToString(object)); + } +} diff --git a/javajson.jar b/javajson.jar new file mode 100644 index 0000000000000000000000000000000000000000..92326d9dc3a8cd14868fd6b5cb6bdc116286d920 GIT binary patch literal 47930 zcmb5V1CVFWvM$=))1J0%+qP}n__gisY1_8#p0;hX#iis+#(8-E@ zjROHa$WBhkNYm2I!AjFoO;67JR$^FW-aXns0s&HxhJbAF1G&cjD+=@Pqwv2JgjCY} zn*!*+qjbjBhE7iQhRzl~vC=>L84!YIpua*BI<$Gu@>NBsD9ZAdDhEx<=UOQ}!akq7 z6+yeEV0IdqCBMBF=b);ULzI?7&?4i4;v*uGs_zwlPrP-B@gin$t2_2|WUOxxdT5J6 zh%%W@L!)i=her7&_RmJLGy|b%CBqrg^IG6ZT-NLuHjJ_jywc!DnXeIj9iwJ3@|>)%%x>+csPhR%lcW{!5Y&X%T*^bG&g=l~{0$q7?d$buNdJ8rHE zQ;i*lg{mLFNc23RMUDCb@gWqcJfk>I1rfs$Y_KUwC&7h?1Ms8ClLK~TKOhDZ(Yqq9 z_-BQ^ZubQhe^$FYc$+nBky+BgVKO~*_n04No9`%^AN3nD9UvSJKTI8zroV-RdhokA zvNd+_lz=rZi+~Z4CjUW@N>Q0~uN3qGk(ut*GO^t(S3?6ZHyuv}Yx%@bXw6G8$<2=R z^XGa~1yXA+V;ZCv#u!dT2aX7k>P@KMC^bqnqnzFuBLz~R%UHS>OzOg};|pB>mX~0( zwV|_&sa%um%6&ZJR$4~l?I%4p8#$H*;z-yhWdD&064XF;zTdyK;&fJ-IA&@Iea2X5 zxz$`!5vlU$T5ntaNMl8--a&3g-EIkc>6HT7ueSv=riUi~Zb(GR6|9v+@J~>Dm&xoU;fN11`u&FoujGhJy(FY8LgFa#2Lc?;w_e*ou zm$?0t&Y8=mAX3Zk!e*lMYo|({Ur<&#|Hr+4do_N%ggrWfYh8tW;_nCV|28da|^rQ>Y$sR^I_QU zZHzocS91WdDE9)h!W3NVrFj<+DIXR@`Qd1AU~v!8mS4X)mukHfXzZ_PeDJ-~O80SI zEL*m>k7;&P=B~gVRaNTESl|Je zw1CreuGcgrR8tM9u0LUf_8zY&Lr>j=ynw~2zndA2k|P(g$(f3Jk4D|W-@Em0b^(H{2tc?kEpqB}GXuv`Bpfla{O~zdyN`XI8n_GV6=vXF70d*Vq*;TA znpTdfaBt?~Gv?F84{+CUvW^%fac28 zs4xKsSHJn$rzR67%KIij4MFe;xHdVWOWCOiI#hY_!ZEY-M5eiT?|tv)Y@rdgXB%NY zx$$rwlw+dKYRx{D&O|Up`KpD+qHPNGO8F|K*byw@-l~|s_?8wMl9r`=(D!Bp^a$ZEO)J#?o$YMy)8v~wjqPaDhKe_G3$vIQ zRn~f?c}7#!mDX)E8xc=wg$SsyVa@UuMvKJjx-Jt^{Dl+CzY9H{#!R}W>&#E6l;-EZUje}v^d<@jh zu7soHTjY$}{6CEI75Lx_10Y5v)~Hr99%a-LllQ0B8(m6eXcjsmqh|s`OA(8<)Kp1O zwOoXi8HS^ox&yT`!1!b|M`w*16u(4fVD$AOlyc-6VxRfRkJP9i0WwzeZ^Cn9 z35m}0LXtLV)+!Ah`)5;H%P(2BJ+fvU;(E=@px}`jb%J3wIKoV@KYnOR;<~Zqgpd0w zG-hx5M!KxTV~vSCQXeRt@_SL}(BS(YRVhI1AcCSz5T`K*f8)V%jdf&Bsv0a%zIaL} zAuHqxje$ym_(M(37)r)w(Ps)+IQs5^b~A9&=L#Ghc6x%aI)0HvqwXo`rQR_Lkg8Pe z_vr;kDnv`$GoC93MrY}o0i-N=cC9&JlO)nR9G9TH&#Gv1DLbx$2!0l&flHq$9Aeq>uR1sGuFdAeR%1yV| x~zXj9e_?v^^`F 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 N?g{vbw&C~D{{!konFRm< literal 0 HcmV?d00001 From ab2527235bdf533a75d8c41db4be05fbd5ae5a32 Mon Sep 17 00:00:00 2001 From: Joakim Uddholm Date: Sat, 23 Mar 2013 11:20:32 +0100 Subject: [PATCH 2/3] Accessor fix. --- JSONMappedObject.java | 3 ++- javajson.jar | Bin 47930 -> 47960 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/JSONMappedObject.java b/JSONMappedObject.java index b599baf1a..f8d13a73e 100644 --- a/JSONMappedObject.java +++ b/JSONMappedObject.java @@ -74,7 +74,8 @@ protected void parseJson(JSONObject obj) throws JSONException, IllegalArgumentEx if(debug) System.out.println("parseJson called on " + this.getClass().getName()); Field[] fields = this.getClass().getDeclaredFields(); - for(Field field : fields) { + for(Field field : fields) { + field.setAccessible(true); if(debug) System.out.println("Checking " + field.getName()); if(!field.isAnnotationPresent(JSONObj.class)) continue; diff --git a/javajson.jar b/javajson.jar index 92326d9dc3a8cd14868fd6b5cb6bdc116286d920..b7ce212ff84a47393b2d1b22286feeb683744c4a 100644 GIT binary patch delta 2601 zcmV+^3fA?y_5#@U0t`?~0|XQR2nYxOR9dkNQj`KsT9aUuHGfn`6~})!`?#CUO$$ku zut3TZUP(wu<<+_Y3Isw!^MGy|OlYY$n@h4`vm1Bs27<3@v0AlSt5rc!v1%$+Nr6fDdN1&m-K7BVMt1nyEWFE5RmF$JZ8&`?A-6EQ~C zUl7@i4S$<&FSu^hVwsAiOy~>~8kS=PK?%jT#^Yix=Cdsp9aT_On8^D6Qq-YAMSUJx zfr+?jjA~egMuHSgkTQ>@8;UmXj)fv-z>FFCXp0N06=;@Ez5~%jWYCSfu|~yP6jT;b z(8&2Z1?rgS3Nsv@T%RZtiVU^X_o~=H{k#xbbAO0s->c!R@GH23scR)#W-JjjqcH_* z>-H5cu%j^lIZ9l>M$VMe;|tPH)8INbV~dLW6x7UWLBm#TJ$*nbaV&#OTa(2foq4I#K2M;nl(v}J?sN;5^ z=_s;Gi=PJFx2kskr$sl`oGqkJ;u#H}#HYxATx`6$B8u%rZ1svjd|K?;&)hn886<26jfwm{mXa3d zO|fh-M`L;{ZtRMSvvhu4aaMSKe19P?n3mOTiBNdZh`I13Zk3D~ANNw&81%8_#tD2` z!*k+@a&DCOC^u~Qs)nzL>Lu<(GU_70&ujQPPI1$+vr8WpyRWV&A1Ck)4d29RniRE1 zl%}TJVk_mYG;v15SuvZ-jHXL}EzWEBHeO`)q6^!NU|5eCgKZ%rJje>NsDG}0Uy*Gu zhiUNwzN6w|QQ)MAhL>=O+lmZWm#>g4F!s9s`d$|0c!P}n%f-bSb8yY@`&%05BzlgrSO60TJJ;Sl+AyKYd#8qE0 zGPgAA2v1)+Y4;!L>sbB>?-+q-A{I2-LL$AMnJ46Gp<`b{Pi*`Xg@4lGZwR&=a6#oS zIpEiFzQsR>?L6FP*(ia=r&D&9^GEamc5zVC&>XhsP<<{c;XyULSjYt~mQp@puw)K( zReoQsP*x?e52xGVl;|#@P48#*yg5!Koa;KldQj)nGm#BFe^?x#?V<;0LqTY~<{#6Vk zBtw1`BRI%l?qIOPY}qK2Zk@`sE>ps4t>BEKh|t$@dKIN*J3VN?I}l^0AICDpVKOBN z+MXvb(ga!Tyi>B%D!~M%((G)XjUC4fb{rNvO^r#sOTgo|PvRMi zp2aih5i*YvA0ZO8_z8%A4PU&ej7hAnsn+wdA%aUE?EtRvF$R0gc63|Le6ERIP4rfBsz^RY99 zlbzq`*0oIQdZx94Fbl*S^rB57=AbX@h}c1b^)#9!VrmXzQyIjTNW>fxF(ZYTGtEf5 z%GIVQ^MAme*Nv+3X>Jf<7yU9lcX66#La2p#E70eDMNKHYD+tBqo!1A&GA>ZPxd>&c;5!^U4O+6lV4$QLwM+YGMIN zN(+n97QRahz%G`e2Ur+7NlzE4 z>4uKo%={i^D8LN%U;+>EoZ5@iECw&4pImh^lMhR-?w2+FMuw{!k|Blm&f|A@o#Ebu zXMgc~{DBFGlU%_X%K|M4{#>-VOwv>;Dbc8Djg50mu<;<&+G$j!3d?$x_$i8b5{>$t zUKJNo{bm0V9ZWs-Ru|DL;T+FpK(O7h6fs~axhk76@VO`^Q>5^DMyFW}Et z&k|`n1vNpWd{?I4b5n0`>b)@auBJInqC@ZCb3c1^_75;@LG~Fkd_HT+O!%r(;VY-) z-|z;VJS@+cl4+VMvDP9Ue;5Dz_ol3n|NI|NO9u%4UC5`V2><|W6qB(xDYH<|Wlij&q0Y{TOx<&$CqLW;r9Fw5BDgl|3%eqDZS(6gG LA_hsc00000#y$O^ delta 2567 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 dMgc&Rp}I!_dz0z9MgcpMFuNiKE3^Or008-` Date: Thu, 18 Apr 2013 14:24:49 +0200 Subject: [PATCH 3/3] Moved namepsace from org.json to com.tethik.json --- CDL.java | 2 +- Cookie.java | 338 +++++++++++++++++++++--------------------- CookieList.java | 180 +++++++++++----------- HTTP.java | 326 ++++++++++++++++++++-------------------- HTTPTokener.java | 2 +- JSONArray.java | 2 +- JSONException.java | 2 +- JSONML.java | 2 +- JSONMappedObject.java | 2 +- JSONObj.java | 2 +- JSONObject.java | 2 +- JSONString.java | 2 +- JSONStringer.java | 156 +++++++++---------- JSONTokener.java | 2 +- JSONWriter.java | 2 +- None.java | 2 +- XML.java | 2 +- XMLTokener.java | 2 +- javajson.jar | Bin 47960 -> 48657 bytes 19 files changed, 514 insertions(+), 514 deletions(-) diff --git a/CDL.java b/CDL.java index 0fc3cf828..1cd0d8fbe 100755 --- a/CDL.java +++ b/CDL.java @@ -1,4 +1,4 @@ -package org.json; +package com.tethik.json; /* Copyright (c) 2002 JSON.org diff --git a/Cookie.java b/Cookie.java index 9cf5ce2c5..3ac3826b7 100755 --- a/Cookie.java +++ b/Cookie.java @@ -1,169 +1,169 @@ -package org.json; - -/* -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. -*/ - -/** - * Convert a web browser cookie specification to a JSONObject and back. - * JSON and Cookies are both notations for name/value pairs. - * @author JSON.org - * @version 2010-12-24 - */ -public class Cookie { - - /** - * Produce a copy of a string in which the characters '+', '%', '=', ';' - * and control characters are replaced with "%hh". This is a gentle form - * of URL encoding, attempting to cause as little distortion to the - * string as possible. The characters '=' and ';' are meta characters in - * cookies. By convention, they are escaped using the URL-encoding. This is - * only a convention, not a standard. Often, cookies are expected to have - * encoded values. We encode '=' and ';' because we must. We encode '%' and - * '+' because they are meta characters in URL encoding. - * @param string The source string. - * @return The escaped result. - */ - public static String escape(String string) { - char c; - String s = string.trim(); - StringBuffer sb = new StringBuffer(); - int length = s.length(); - for (int i = 0; i < length; i += 1) { - c = s.charAt(i); - if (c < ' ' || c == '+' || c == '%' || c == '=' || c == ';') { - sb.append('%'); - sb.append(Character.forDigit((char)((c >>> 4) & 0x0f), 16)); - sb.append(Character.forDigit((char)(c & 0x0f), 16)); - } else { - sb.append(c); - } - } - return sb.toString(); - } - - - /** - * Convert a cookie specification string into a JSONObject. The string - * will contain a name value pair separated by '='. The name and the value - * will be unescaped, possibly converting '+' and '%' sequences. The - * cookie properties may follow, separated by ';', also represented as - * name=value (except the secure property, which does not have a value). - * The name will be stored under the key "name", and the value will be - * stored under the key "value". This method does not do checking or - * validation of the parameters. It only converts the cookie string into - * a JSONObject. - * @param string The cookie specification string. - * @return A JSONObject containing "name", "value", and possibly other - * members. - * @throws JSONException - */ - public static JSONObject toJSONObject(String string) throws JSONException { - String name; - JSONObject jo = new JSONObject(); - Object value; - JSONTokener x = new JSONTokener(string); - jo.put("name", x.nextTo('=')); - x.next('='); - jo.put("value", x.nextTo(';')); - x.next(); - while (x.more()) { - name = unescape(x.nextTo("=;")); - if (x.next() != '=') { - if (name.equals("secure")) { - value = Boolean.TRUE; - } else { - throw x.syntaxError("Missing '=' in cookie parameter."); - } - } else { - value = unescape(x.nextTo(';')); - x.next(); - } - jo.put(name, value); - } - return jo; - } - - - /** - * Convert a JSONObject into a cookie specification string. The JSONObject - * must contain "name" and "value" members. - * If the JSONObject contains "expires", "domain", "path", or "secure" - * members, they will be appended to the cookie specification string. - * All other members are ignored. - * @param jo A JSONObject - * @return A cookie specification string - * @throws JSONException - */ - public static String toString(JSONObject jo) throws JSONException { - StringBuffer sb = new StringBuffer(); - - sb.append(escape(jo.getString("name"))); - sb.append("="); - sb.append(escape(jo.getString("value"))); - if (jo.has("expires")) { - sb.append(";expires="); - sb.append(jo.getString("expires")); - } - if (jo.has("domain")) { - sb.append(";domain="); - sb.append(escape(jo.getString("domain"))); - } - if (jo.has("path")) { - sb.append(";path="); - sb.append(escape(jo.getString("path"))); - } - if (jo.optBoolean("secure")) { - sb.append(";secure"); - } - return sb.toString(); - } - - /** - * Convert %hh sequences to single characters, and - * convert plus to space. - * @param string A string that may contain - * + (plus) and - * %hh sequences. - * @return The unescaped string. - */ - public static String unescape(String string) { - int length = string.length(); - StringBuffer sb = new StringBuffer(); - for (int i = 0; i < length; ++i) { - char c = string.charAt(i); - if (c == '+') { - c = ' '; - } else if (c == '%' && i + 2 < length) { - int d = JSONTokener.dehexchar(string.charAt(i + 1)); - int e = JSONTokener.dehexchar(string.charAt(i + 2)); - if (d >= 0 && e >= 0) { - c = (char)(d * 16 + e); - i += 2; - } - } - sb.append(c); - } - return sb.toString(); - } -} +package com.tethik.json; + +/* +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. +*/ + +/** + * Convert a web browser cookie specification to a JSONObject and back. + * JSON and Cookies are both notations for name/value pairs. + * @author JSON.org + * @version 2010-12-24 + */ +public class Cookie { + + /** + * Produce a copy of a string in which the characters '+', '%', '=', ';' + * and control characters are replaced with "%hh". This is a gentle form + * of URL encoding, attempting to cause as little distortion to the + * string as possible. The characters '=' and ';' are meta characters in + * cookies. By convention, they are escaped using the URL-encoding. This is + * only a convention, not a standard. Often, cookies are expected to have + * encoded values. We encode '=' and ';' because we must. We encode '%' and + * '+' because they are meta characters in URL encoding. + * @param string The source string. + * @return The escaped result. + */ + public static String escape(String string) { + char c; + String s = string.trim(); + StringBuffer sb = new StringBuffer(); + int length = s.length(); + for (int i = 0; i < length; i += 1) { + c = s.charAt(i); + if (c < ' ' || c == '+' || c == '%' || c == '=' || c == ';') { + sb.append('%'); + sb.append(Character.forDigit((char)((c >>> 4) & 0x0f), 16)); + sb.append(Character.forDigit((char)(c & 0x0f), 16)); + } else { + sb.append(c); + } + } + return sb.toString(); + } + + + /** + * Convert a cookie specification string into a JSONObject. The string + * will contain a name value pair separated by '='. The name and the value + * will be unescaped, possibly converting '+' and '%' sequences. The + * cookie properties may follow, separated by ';', also represented as + * name=value (except the secure property, which does not have a value). + * The name will be stored under the key "name", and the value will be + * stored under the key "value". This method does not do checking or + * validation of the parameters. It only converts the cookie string into + * a JSONObject. + * @param string The cookie specification string. + * @return A JSONObject containing "name", "value", and possibly other + * members. + * @throws JSONException + */ + public static JSONObject toJSONObject(String string) throws JSONException { + String name; + JSONObject jo = new JSONObject(); + Object value; + JSONTokener x = new JSONTokener(string); + jo.put("name", x.nextTo('=')); + x.next('='); + jo.put("value", x.nextTo(';')); + x.next(); + while (x.more()) { + name = unescape(x.nextTo("=;")); + if (x.next() != '=') { + if (name.equals("secure")) { + value = Boolean.TRUE; + } else { + throw x.syntaxError("Missing '=' in cookie parameter."); + } + } else { + value = unescape(x.nextTo(';')); + x.next(); + } + jo.put(name, value); + } + return jo; + } + + + /** + * Convert a JSONObject into a cookie specification string. The JSONObject + * must contain "name" and "value" members. + * If the JSONObject contains "expires", "domain", "path", or "secure" + * members, they will be appended to the cookie specification string. + * All other members are ignored. + * @param jo A JSONObject + * @return A cookie specification string + * @throws JSONException + */ + public static String toString(JSONObject jo) throws JSONException { + StringBuffer sb = new StringBuffer(); + + sb.append(escape(jo.getString("name"))); + sb.append("="); + sb.append(escape(jo.getString("value"))); + if (jo.has("expires")) { + sb.append(";expires="); + sb.append(jo.getString("expires")); + } + if (jo.has("domain")) { + sb.append(";domain="); + sb.append(escape(jo.getString("domain"))); + } + if (jo.has("path")) { + sb.append(";path="); + sb.append(escape(jo.getString("path"))); + } + if (jo.optBoolean("secure")) { + sb.append(";secure"); + } + return sb.toString(); + } + + /** + * Convert %hh sequences to single characters, and + * convert plus to space. + * @param string A string that may contain + * + (plus) and + * %hh sequences. + * @return The unescaped string. + */ + public static String unescape(String string) { + int length = string.length(); + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < length; ++i) { + char c = string.charAt(i); + if (c == '+') { + c = ' '; + } else if (c == '%' && i + 2 < length) { + int d = JSONTokener.dehexchar(string.charAt(i + 1)); + int e = JSONTokener.dehexchar(string.charAt(i + 2)); + if (d >= 0 && e >= 0) { + c = (char)(d * 16 + e); + i += 2; + } + } + sb.append(c); + } + return sb.toString(); + } +} diff --git a/CookieList.java b/CookieList.java index 7f4fe0751..aeef4db7f 100755 --- a/CookieList.java +++ b/CookieList.java @@ -1,90 +1,90 @@ -package org.json; - -/* -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. -*/ - -import java.util.Iterator; - -/** - * Convert a web browser cookie list string to a JSONObject and back. - * @author JSON.org - * @version 2010-12-24 - */ -public class CookieList { - - /** - * Convert a cookie list into a JSONObject. A cookie list is a sequence - * of name/value pairs. The names are separated from the values by '='. - * The pairs are separated by ';'. The names and the values - * will be unescaped, possibly converting '+' and '%' sequences. - * - * To add a cookie to a cooklist, - * cookielistJSONObject.put(cookieJSONObject.getString("name"), - * cookieJSONObject.getString("value")); - * @param string A cookie list string - * @return A JSONObject - * @throws JSONException - */ - public static JSONObject toJSONObject(String string) throws JSONException { - JSONObject jo = new JSONObject(); - JSONTokener x = new JSONTokener(string); - while (x.more()) { - String name = Cookie.unescape(x.nextTo('=')); - x.next('='); - jo.put(name, Cookie.unescape(x.nextTo(';'))); - x.next(); - } - return jo; - } - - - /** - * Convert a JSONObject into a cookie list. A cookie list is a sequence - * of name/value pairs. The names are separated from the values by '='. - * The pairs are separated by ';'. The characters '%', '+', '=', and ';' - * in the names and values are replaced by "%hh". - * @param jo A JSONObject - * @return A cookie list string - * @throws JSONException - */ - public static String toString(JSONObject jo) throws JSONException { - boolean b = false; - Iterator keys = jo.keys(); - String string; - StringBuffer sb = new StringBuffer(); - while (keys.hasNext()) { - string = keys.next().toString(); - if (!jo.isNull(string)) { - if (b) { - sb.append(';'); - } - sb.append(Cookie.escape(string)); - sb.append("="); - sb.append(Cookie.escape(jo.getString(string))); - b = true; - } - } - return sb.toString(); - } -} +package com.tethik.json; + +/* +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. +*/ + +import java.util.Iterator; + +/** + * Convert a web browser cookie list string to a JSONObject and back. + * @author JSON.org + * @version 2010-12-24 + */ +public class CookieList { + + /** + * Convert a cookie list into a JSONObject. A cookie list is a sequence + * of name/value pairs. The names are separated from the values by '='. + * The pairs are separated by ';'. The names and the values + * will be unescaped, possibly converting '+' and '%' sequences. + * + * To add a cookie to a cooklist, + * cookielistJSONObject.put(cookieJSONObject.getString("name"), + * cookieJSONObject.getString("value")); + * @param string A cookie list string + * @return A JSONObject + * @throws JSONException + */ + public static JSONObject toJSONObject(String string) throws JSONException { + JSONObject jo = new JSONObject(); + JSONTokener x = new JSONTokener(string); + while (x.more()) { + String name = Cookie.unescape(x.nextTo('=')); + x.next('='); + jo.put(name, Cookie.unescape(x.nextTo(';'))); + x.next(); + } + return jo; + } + + + /** + * Convert a JSONObject into a cookie list. A cookie list is a sequence + * of name/value pairs. The names are separated from the values by '='. + * The pairs are separated by ';'. The characters '%', '+', '=', and ';' + * in the names and values are replaced by "%hh". + * @param jo A JSONObject + * @return A cookie list string + * @throws JSONException + */ + public static String toString(JSONObject jo) throws JSONException { + boolean b = false; + Iterator keys = jo.keys(); + String string; + StringBuffer sb = new StringBuffer(); + while (keys.hasNext()) { + string = keys.next().toString(); + if (!jo.isNull(string)) { + if (b) { + sb.append(';'); + } + sb.append(Cookie.escape(string)); + sb.append("="); + sb.append(Cookie.escape(jo.getString(string))); + b = true; + } + } + return sb.toString(); + } +} diff --git a/HTTP.java b/HTTP.java index 43d04a804..56042eddb 100755 --- a/HTTP.java +++ b/HTTP.java @@ -1,163 +1,163 @@ -package org.json; - -/* -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. -*/ - -import java.util.Iterator; - -/** - * Convert an HTTP header to a JSONObject and back. - * @author JSON.org - * @version 2010-12-24 - */ -public class HTTP { - - /** Carriage return/line feed. */ - public static final String CRLF = "\r\n"; - - /** - * Convert an HTTP header string into a JSONObject. It can be a request - * header or a response header. A request header will contain - *

{
-     *    Method: "POST" (for example),
-     *    "Request-URI": "/" (for example),
-     *    "HTTP-Version": "HTTP/1.1" (for example)
-     * }
- * A response header will contain - *
{
-     *    "HTTP-Version": "HTTP/1.1" (for example),
-     *    "Status-Code": "200" (for example),
-     *    "Reason-Phrase": "OK" (for example)
-     * }
- * In addition, the other parameters in the header will be captured, using - * the HTTP field names as JSON names, so that
-     *    Date: Sun, 26 May 2002 18:06:04 GMT
-     *    Cookie: Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s
-     *    Cache-Control: no-cache
- * become - *
{...
-     *    Date: "Sun, 26 May 2002 18:06:04 GMT",
-     *    Cookie: "Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s",
-     *    "Cache-Control": "no-cache",
-     * ...}
- * It does no further checking or conversion. It does not parse dates. - * It does not do '%' transforms on URLs. - * @param string An HTTP header string. - * @return A JSONObject containing the elements and attributes - * of the XML string. - * @throws JSONException - */ - public static JSONObject toJSONObject(String string) throws JSONException { - JSONObject jo = new JSONObject(); - HTTPTokener x = new HTTPTokener(string); - String token; - - token = x.nextToken(); - if (token.toUpperCase().startsWith("HTTP")) { - -// Response - - jo.put("HTTP-Version", token); - jo.put("Status-Code", x.nextToken()); - jo.put("Reason-Phrase", x.nextTo('\0')); - x.next(); - - } else { - -// Request - - jo.put("Method", token); - jo.put("Request-URI", x.nextToken()); - jo.put("HTTP-Version", x.nextToken()); - } - -// Fields - - while (x.more()) { - String name = x.nextTo(':'); - x.next(':'); - jo.put(name, x.nextTo('\0')); - x.next(); - } - return jo; - } - - - /** - * Convert a JSONObject into an HTTP header. A request header must contain - *
{
-     *    Method: "POST" (for example),
-     *    "Request-URI": "/" (for example),
-     *    "HTTP-Version": "HTTP/1.1" (for example)
-     * }
- * A response header must contain - *
{
-     *    "HTTP-Version": "HTTP/1.1" (for example),
-     *    "Status-Code": "200" (for example),
-     *    "Reason-Phrase": "OK" (for example)
-     * }
- * Any other members of the JSONObject will be output as HTTP fields. - * The result will end with two CRLF pairs. - * @param jo A JSONObject - * @return An HTTP header string. - * @throws JSONException if the object does not contain enough - * information. - */ - public static String toString(JSONObject jo) throws JSONException { - Iterator keys = jo.keys(); - String string; - StringBuffer sb = new StringBuffer(); - if (jo.has("Status-Code") && jo.has("Reason-Phrase")) { - sb.append(jo.getString("HTTP-Version")); - sb.append(' '); - sb.append(jo.getString("Status-Code")); - sb.append(' '); - sb.append(jo.getString("Reason-Phrase")); - } else if (jo.has("Method") && jo.has("Request-URI")) { - sb.append(jo.getString("Method")); - sb.append(' '); - sb.append('"'); - sb.append(jo.getString("Request-URI")); - sb.append('"'); - sb.append(' '); - sb.append(jo.getString("HTTP-Version")); - } else { - throw new JSONException("Not enough material for an HTTP header."); - } - sb.append(CRLF); - while (keys.hasNext()) { - string = keys.next().toString(); - if (!"HTTP-Version".equals(string) && !"Status-Code".equals(string) && - !"Reason-Phrase".equals(string) && !"Method".equals(string) && - !"Request-URI".equals(string) && !jo.isNull(string)) { - sb.append(string); - sb.append(": "); - sb.append(jo.getString(string)); - sb.append(CRLF); - } - } - sb.append(CRLF); - return sb.toString(); - } -} +package com.tethik.json; + +/* +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. +*/ + +import java.util.Iterator; + +/** + * Convert an HTTP header to a JSONObject and back. + * @author JSON.org + * @version 2010-12-24 + */ +public class HTTP { + + /** Carriage return/line feed. */ + public static final String CRLF = "\r\n"; + + /** + * Convert an HTTP header string into a JSONObject. It can be a request + * header or a response header. A request header will contain + *
{
+     *    Method: "POST" (for example),
+     *    "Request-URI": "/" (for example),
+     *    "HTTP-Version": "HTTP/1.1" (for example)
+     * }
+ * A response header will contain + *
{
+     *    "HTTP-Version": "HTTP/1.1" (for example),
+     *    "Status-Code": "200" (for example),
+     *    "Reason-Phrase": "OK" (for example)
+     * }
+ * In addition, the other parameters in the header will be captured, using + * the HTTP field names as JSON names, so that
+     *    Date: Sun, 26 May 2002 18:06:04 GMT
+     *    Cookie: Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s
+     *    Cache-Control: no-cache
+ * become + *
{...
+     *    Date: "Sun, 26 May 2002 18:06:04 GMT",
+     *    Cookie: "Q=q2=PPEAsg--; B=677gi6ouf29bn&b=2&f=s",
+     *    "Cache-Control": "no-cache",
+     * ...}
+ * It does no further checking or conversion. It does not parse dates. + * It does not do '%' transforms on URLs. + * @param string An HTTP header string. + * @return A JSONObject containing the elements and attributes + * of the XML string. + * @throws JSONException + */ + public static JSONObject toJSONObject(String string) throws JSONException { + JSONObject jo = new JSONObject(); + HTTPTokener x = new HTTPTokener(string); + String token; + + token = x.nextToken(); + if (token.toUpperCase().startsWith("HTTP")) { + +// Response + + jo.put("HTTP-Version", token); + jo.put("Status-Code", x.nextToken()); + jo.put("Reason-Phrase", x.nextTo('\0')); + x.next(); + + } else { + +// Request + + jo.put("Method", token); + jo.put("Request-URI", x.nextToken()); + jo.put("HTTP-Version", x.nextToken()); + } + +// Fields + + while (x.more()) { + String name = x.nextTo(':'); + x.next(':'); + jo.put(name, x.nextTo('\0')); + x.next(); + } + return jo; + } + + + /** + * Convert a JSONObject into an HTTP header. A request header must contain + *
{
+     *    Method: "POST" (for example),
+     *    "Request-URI": "/" (for example),
+     *    "HTTP-Version": "HTTP/1.1" (for example)
+     * }
+ * A response header must contain + *
{
+     *    "HTTP-Version": "HTTP/1.1" (for example),
+     *    "Status-Code": "200" (for example),
+     *    "Reason-Phrase": "OK" (for example)
+     * }
+ * Any other members of the JSONObject will be output as HTTP fields. + * The result will end with two CRLF pairs. + * @param jo A JSONObject + * @return An HTTP header string. + * @throws JSONException if the object does not contain enough + * information. + */ + public static String toString(JSONObject jo) throws JSONException { + Iterator keys = jo.keys(); + String string; + StringBuffer sb = new StringBuffer(); + if (jo.has("Status-Code") && jo.has("Reason-Phrase")) { + sb.append(jo.getString("HTTP-Version")); + sb.append(' '); + sb.append(jo.getString("Status-Code")); + sb.append(' '); + sb.append(jo.getString("Reason-Phrase")); + } else if (jo.has("Method") && jo.has("Request-URI")) { + sb.append(jo.getString("Method")); + sb.append(' '); + sb.append('"'); + sb.append(jo.getString("Request-URI")); + sb.append('"'); + sb.append(' '); + sb.append(jo.getString("HTTP-Version")); + } else { + throw new JSONException("Not enough material for an HTTP header."); + } + sb.append(CRLF); + while (keys.hasNext()) { + string = keys.next().toString(); + if (!"HTTP-Version".equals(string) && !"Status-Code".equals(string) && + !"Reason-Phrase".equals(string) && !"Method".equals(string) && + !"Request-URI".equals(string) && !jo.isNull(string)) { + sb.append(string); + sb.append(": "); + sb.append(jo.getString(string)); + sb.append(CRLF); + } + } + sb.append(CRLF); + return sb.toString(); + } +} diff --git a/HTTPTokener.java b/HTTPTokener.java index ed41744a0..a23f1b5f3 100755 --- a/HTTPTokener.java +++ b/HTTPTokener.java @@ -1,4 +1,4 @@ -package org.json; +package com.tethik.json; /* Copyright (c) 2002 JSON.org diff --git a/JSONArray.java b/JSONArray.java index 7c71d8db4..1e957faf0 100644 --- a/JSONArray.java +++ b/JSONArray.java @@ -1,4 +1,4 @@ -package org.json; +package com.tethik.json; /* Copyright (c) 2002 JSON.org diff --git a/JSONException.java b/JSONException.java index 971547e63..46f8bb00b 100755 --- a/JSONException.java +++ b/JSONException.java @@ -1,4 +1,4 @@ -package org.json; +package com.tethik.json; /** * The JSONException is thrown by the JSON.org classes when things are amiss. diff --git a/JSONML.java b/JSONML.java index 4be686351..57a122703 100755 --- a/JSONML.java +++ b/JSONML.java @@ -1,4 +1,4 @@ -package org.json; +package com.tethik.json; /* Copyright (c) 2008 JSON.org diff --git a/JSONMappedObject.java b/JSONMappedObject.java index f8d13a73e..4dfaf34b3 100644 --- a/JSONMappedObject.java +++ b/JSONMappedObject.java @@ -1,4 +1,4 @@ -package org.json; +package com.tethik.json; import java.lang.reflect.Array; import java.lang.reflect.Constructor; diff --git a/JSONObj.java b/JSONObj.java index 20f0046e7..2c7df996b 100644 --- a/JSONObj.java +++ b/JSONObj.java @@ -1,4 +1,4 @@ -package org.json; +package com.tethik.json; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/JSONObject.java b/JSONObject.java index 399f093c1..7c008ee99 100755 --- a/JSONObject.java +++ b/JSONObject.java @@ -1,4 +1,4 @@ -package org.json; +package com.tethik.json; /* Copyright (c) 2002 JSON.org diff --git a/JSONString.java b/JSONString.java index 1f2d77dd1..669b166d1 100755 --- a/JSONString.java +++ b/JSONString.java @@ -1,4 +1,4 @@ -package org.json; +package com.tethik.json; /** * The JSONString interface allows a toJSONString() * method so that a class can change the behavior of diff --git a/JSONStringer.java b/JSONStringer.java index 25c2e5d78..a155bacf7 100755 --- a/JSONStringer.java +++ b/JSONStringer.java @@ -1,78 +1,78 @@ -package org.json; - -/* -Copyright (c) 2006 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. -*/ - -import java.io.StringWriter; - -/** - * JSONStringer provides a quick and convenient way of producing JSON text. - * The texts produced strictly conform to JSON syntax rules. No whitespace is - * added, so the results are ready for transmission or storage. Each instance of - * JSONStringer can produce one JSON text. - *

- * A JSONStringer instance provides a value method for appending - * values to the - * text, and a key - * method for adding keys before values in objects. There are array - * and endArray methods that make and bound array values, and - * object and endObject methods which make and bound - * object values. All of these methods return the JSONWriter instance, - * permitting cascade style. For example,

- * myString = new JSONStringer()
- *     .object()
- *         .key("JSON")
- *         .value("Hello, World!")
- *     .endObject()
- *     .toString();
which produces the string
- * {"JSON":"Hello, World!"}
- *

- * The first method called must be array or object. - * There are no methods for adding commas or colons. JSONStringer adds them for - * you. Objects and arrays can be nested up to 20 levels deep. - *

- * This can sometimes be easier than using a JSONObject to build a string. - * @author JSON.org - * @version 2008-09-18 - */ -public class JSONStringer extends JSONWriter { - /** - * Make a fresh JSONStringer. It can be used to build one JSON text. - */ - public JSONStringer() { - super(new StringWriter()); - } - - /** - * Return the JSON text. This method is used to obtain the product of the - * JSONStringer instance. It will return null if there was a - * problem in the construction of the JSON text (such as the calls to - * array were not properly balanced with calls to - * endArray). - * @return The JSON text. - */ - public String toString() { - return this.mode == 'd' ? this.writer.toString() : null; - } -} +package com.tethik.json; + +/* +Copyright (c) 2006 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. +*/ + +import java.io.StringWriter; + +/** + * JSONStringer provides a quick and convenient way of producing JSON text. + * The texts produced strictly conform to JSON syntax rules. No whitespace is + * added, so the results are ready for transmission or storage. Each instance of + * JSONStringer can produce one JSON text. + *

+ * A JSONStringer instance provides a value method for appending + * values to the + * text, and a key + * method for adding keys before values in objects. There are array + * and endArray methods that make and bound array values, and + * object and endObject methods which make and bound + * object values. All of these methods return the JSONWriter instance, + * permitting cascade style. For example,

+ * myString = new JSONStringer()
+ *     .object()
+ *         .key("JSON")
+ *         .value("Hello, World!")
+ *     .endObject()
+ *     .toString();
which produces the string
+ * {"JSON":"Hello, World!"}
+ *

+ * The first method called must be array or object. + * There are no methods for adding commas or colons. JSONStringer adds them for + * you. Objects and arrays can be nested up to 20 levels deep. + *

+ * This can sometimes be easier than using a JSONObject to build a string. + * @author JSON.org + * @version 2008-09-18 + */ +public class JSONStringer extends JSONWriter { + /** + * Make a fresh JSONStringer. It can be used to build one JSON text. + */ + public JSONStringer() { + super(new StringWriter()); + } + + /** + * Return the JSON text. This method is used to obtain the product of the + * JSONStringer instance. It will return null if there was a + * problem in the construction of the JSON text (such as the calls to + * array were not properly balanced with calls to + * endArray). + * @return The JSON text. + */ + public String toString() { + return this.mode == 'd' ? this.writer.toString() : null; + } +} diff --git a/JSONTokener.java b/JSONTokener.java index 13c84f1f5..6a55ee61c 100644 --- a/JSONTokener.java +++ b/JSONTokener.java @@ -1,4 +1,4 @@ -package org.json; +package com.tethik.json; import java.io.BufferedReader; import java.io.IOException; diff --git a/JSONWriter.java b/JSONWriter.java index e29d980d4..ba6811aaa 100755 --- a/JSONWriter.java +++ b/JSONWriter.java @@ -1,4 +1,4 @@ -package org.json; +package com.tethik.json; import java.io.IOException; import java.io.Writer; diff --git a/None.java b/None.java index 1dda8bc69..be9bb748a 100644 --- a/None.java +++ b/None.java @@ -1,4 +1,4 @@ -package org.json; +package com.tethik.json; public interface None { /** diff --git a/XML.java b/XML.java index d49784d6d..e583387ab 100755 --- a/XML.java +++ b/XML.java @@ -1,4 +1,4 @@ -package org.json; +package com.tethik.json; /* Copyright (c) 2002 JSON.org diff --git a/XMLTokener.java b/XMLTokener.java index be15ebeba..08a8a89ab 100755 --- a/XMLTokener.java +++ b/XMLTokener.java @@ -1,4 +1,4 @@ -package org.json; +package com.tethik.json; /* Copyright (c) 2002 JSON.org diff --git a/javajson.jar b/javajson.jar index b7ce212ff84a47393b2d1b22286feeb683744c4a..9add9dc493166525c3305a15885f0dc152da779b 100644 GIT binary patch delta 44784 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