You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ad...@apache.org on 2017/04/15 14:44:46 UTC
[1/2] wicket git commit: Porting of
https://github.com/openjson/openjson/issues/7
Repository: wicket
Updated Branches:
refs/heads/wicket-7.x b915427b8 -> 59b853d0c
Porting of https://github.com/openjson/openjson/issues/7
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/cb7fc6e7
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/cb7fc6e7
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/cb7fc6e7
Branch: refs/heads/wicket-7.x
Commit: cb7fc6e7ac60decad639519547c7dcade1b7ecfe
Parents: b915427
Author: Andrea Del Bene <an...@innoteam.it>
Authored: Fri Apr 7 12:49:33 2017 +0200
Committer: Andrea Del Bene <ad...@apache.org>
Committed: Sat Apr 15 16:44:53 2017 +0200
----------------------------------------------------------------------
.../org/apache/wicket/ajax/json/JSONArray.java | 28 ++--
.../org/apache/wicket/ajax/json/JSONObject.java | 160 ++++++++-----------
.../apache/wicket/ajax/json/JSONStringer.java | 49 ++++--
.../apache/wicket/ajax/json/JSONTokener.java | 8 +-
.../org/apache/wicket/ajax/json/XMLTokener.java | 2 +-
5 files changed, 120 insertions(+), 127 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/cb7fc6e7/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONArray.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONArray.java b/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONArray.java
index 081686d..7b07765 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONArray.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONArray.java
@@ -21,7 +21,6 @@ import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-import java.util.Map;
import org.apache.wicket.WicketRuntimeException;
@@ -96,6 +95,7 @@ public class JSONArray {
if (object instanceof JSONArray) {
values = ((JSONArray) object).values;
} else {
+ //noinspection ConstantConditions
throw JSON.typeMismatch(object, "JSONArray");
}
}
@@ -714,9 +714,7 @@ public class JSONArray {
@Override
public String toString() {
try {
- JSONStringer stringer = new JSONStringer();
- writeTo(stringer);
- return stringer.toString();
+ return toString(new JSONStringer());
} catch (JSONException e) {
return null;
}
@@ -737,17 +735,23 @@ public class JSONArray {
* @throws JSONException Only if there is a coding error.
*/
public String toString(int indentSpaces) throws JSONException {
- JSONStringer stringer = new JSONStringer(indentSpaces);
- writeTo(stringer);
- return stringer.toString();
+ return toString(new JSONStringer(indentSpaces));
}
- void writeTo(JSONStringer stringer) throws JSONException {
+ /**
+ * Encodes this array using {@link JSONStringer} provided
+ *
+ * @param stringer - {@link JSONStringer} to be used for serialization
+ * @return The string representation of this.
+ * @throws JSONException On internal errors. Shouldn't happen.
+ */
+ public String toString(JSONStringer stringer) throws JSONException {
stringer.array();
for (Object value : values) {
stringer.value(value);
}
stringer.endArray();
+ return stringer.toString();
}
@Override
@@ -766,12 +770,4 @@ public class JSONArray {
public Writer write(Writer writer){
throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
}
-
- public JSONArray put(Map map){
- throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
- }
-
- public JSONArray put(int integer, Map map){
- throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
- }
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/cb7fc6e7/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONObject.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONObject.java b/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONObject.java
index 6058311..9834410 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONObject.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONObject.java
@@ -19,20 +19,15 @@ package org.apache.wicket.ajax.json;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
-import java.io.Writer;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
-import java.util.Locale;
import java.util.Map;
-import java.util.Objects;
import java.util.Set;
import java.util.TreeMap;
-import org.apache.wicket.WicketRuntimeException;
-
// Note: this class was written without inspecting the non-free org.json sourcecode.
/**
@@ -116,7 +111,7 @@ public class JSONObject {
// at least make the broken equals(null) consistent with Objects.hashCode(null).
@Override
public int hashCode() {
- return Objects.hashCode(null);
+ return 0;
}
@Override
@@ -145,17 +140,19 @@ public class JSONObject {
/* (accept a raw type for API compatibility) */
public JSONObject(Map copyFrom) {
this();
- Map<?, ?> contentsTyped = (Map<?, ?>) copyFrom;
- for (Map.Entry<?, ?> entry : contentsTyped.entrySet()) {
+ if (copyFrom != null) {
+ Map<?, ?> contentsTyped = copyFrom;
+ for (Map.Entry<?, ?> entry : contentsTyped.entrySet()) {
/*
* Deviate from the original by checking that keys are non-null and
* of the proper type. (We still defer validating the values).
*/
- String key = (String) entry.getKey();
- if (key == null) {
- throw new NullPointerException("key == null");
+ String key = (String) entry.getKey();
+ if (key == null) {
+ throw new NullPointerException("key == null");
+ }
+ nameValuePairs.put(key, wrap(entry.getValue()));
}
- nameValuePairs.put(key, wrap(entry.getValue()));
}
}
@@ -218,25 +215,38 @@ public class JSONObject {
* @throws JSONException If there is an exception while reading the bean
*/
public JSONObject(Object bean) throws JSONException {
- this(propertiesAsMap(bean));
+ this(bean instanceof JSONObject ? ((JSONObject)bean).nameValuePairs : propertiesAsMap(bean));
}
- private static Map<String, Object> propertiesAsMap(Object bean)
- throws JSONException {
- Map<String, Object> props = new TreeMap<String, Object>();
- try{
- PropertyDescriptor[] properties = Introspector.getBeanInfo(bean.getClass(), Object.class)
- .getPropertyDescriptors();
- for (int i = 0; i < properties.length; i++) {
- PropertyDescriptor propertyDescriptor = properties[i];
- props.put(propertyDescriptor.getDisplayName(), propertyDescriptor.getReadMethod().invoke(bean));
- }
- }catch(IntrospectionException | InvocationTargetException | IllegalAccessException e){
- throw new JSONException(e);
- }
+ private static Map<String, Object> propertiesAsMap(Object bean) throws JSONException {
+ Map<String, Object> props = new TreeMap<String, Object>();
+ try {
+ PropertyDescriptor[] properties = Introspector.getBeanInfo(bean.getClass(), Object.class)
+ .getPropertyDescriptors();
+ for (PropertyDescriptor prop : properties) {
+ Object v = prop.getReadMethod().invoke(bean);
+ props.put(prop.getDisplayName(), wrap(v));
+ }
+ } catch (IllegalAccessException e) {
+ throw new JSONException(e);
+ } catch (IntrospectionException e) {
+ throw new JSONException(e);
+ } catch (InvocationTargetException e) {
+ throw new JSONException(e);
+ }
return props;
}
+ public static String[] getNames(JSONObject x) {
+ Set<String> names = x.keySet();
+ String[] r = new String[names.size()];
+ int i = 0;
+ for (String name : names) {
+ r[i++] = name;
+ }
+ return r;
+ }
+
/**
* Returns the number of name/value mappings in this object.
*
@@ -313,6 +323,10 @@ public class JSONObject {
* Integer, Long, Double, {@link #NULL}, or {@code null}. May not be
* {@link Double#isNaN() NaNs} or {@link Double#isInfinite()
* infinities}.
+ * If value is Map or Collection the value is wrapped using
+ * corresponding JSONObject(map) or JSONArray(collection) object.
+ * This behavior is considered unsafe and is added for compatibility
+ * with original 'org.json' package only.
* @return this object.
* @throws JSONException if the value is an invalid double (infinite or NaN).
*/
@@ -321,11 +335,16 @@ public class JSONObject {
nameValuePairs.remove(name);
return this;
}
+ Object valueToPut = value;
if (value instanceof Number) {
// deviate from the original by checking all Numbers, not just floats & doubles
JSON.checkDouble(((Number) value).doubleValue());
+ } else if (value instanceof Collection) {
+ valueToPut = new JSONArray((Collection) value);
+ } else if (value instanceof Map) {
+ valueToPut = new JSONObject((Map)value);
}
- nameValuePairs.put(checkName(name), value);
+ nameValuePairs.put(checkName(name), valueToPut);
return this;
}
@@ -836,9 +855,7 @@ public class JSONObject {
@Override
public String toString() {
try {
- JSONStringer stringer = new JSONStringer();
- writeTo(stringer);
- return stringer.toString();
+ return toString(new JSONStringer());
} catch (JSONException e) {
return null;
}
@@ -862,17 +879,23 @@ public class JSONObject {
* @throws JSONException On internal errors. Shouldn't happen.
*/
public String toString(int indentSpaces) throws JSONException {
- JSONStringer stringer = new JSONStringer(indentSpaces);
- writeTo(stringer);
- return stringer.toString();
+ return toString(new JSONStringer(indentSpaces));
}
- void writeTo(JSONStringer stringer) throws JSONException {
+ /**
+ * Encodes this object using {@link JSONStringer} provided
+ *
+ * @param stringer - {@link JSONStringer} to be used for serialization
+ * @return The string representation of this.
+ * @throws JSONException On internal errors. Shouldn't happen.
+ */
+ public String toString(JSONStringer stringer) throws JSONException {
stringer.object();
for (Map.Entry<String, Object> entry : nameValuePairs.entrySet()) {
- stringer.key(entry.getKey()).value(entry.getValue());
+ stringer.entry(entry);
}
stringer.endObject();
+ return stringer.toString();
}
/**
@@ -897,7 +920,7 @@ public class JSONObject {
}
long longValue = number.longValue();
- if (doubleValue == (double) longValue) {
+ if (doubleValue == longValue) {
return Long.toString(longValue);
}
@@ -936,7 +959,8 @@ public class JSONObject {
* If the object is an array or {@code Collection}, returns an equivalent {@code JSONArray}.
* If the object is a {@code Map}, returns an equivalent {@code JSONObject}.
* If the object is a primitive wrapper type or {@code String}, returns the object.
- * Otherwise if the object is from a {@code java} package, returns the result of {@code toString}.
+ * If the object is from a {@code java} package, returns the result of {@code toString}.
+ * If the object is some other kind of object then it is assumed to be a bean and is converted to a JSONObject.
* If wrapping fails, returns null.
*
* @param o The object to wrap.
@@ -972,69 +996,13 @@ public class JSONObject {
o instanceof String) {
return o;
}
- if (o.getClass().getPackage().getName().startsWith("java.")) {
+ if (o.getClass().getPackage().getName().startsWith("java.") || o instanceof Enum<?>) {
return o.toString();
+ } else {
+ return new JSONObject(o);
}
} catch (Exception ignored) {
}
return null;
}
-
- // Methods removed due to switch to open-json
-
- public Writer write(Writer writer){
- throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
- }
-
- public String valueToString(Object object){
- throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
- }
-
- public void testValidity(Object object){
- throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
- }
-
- public Object stringToValue(String string){
- throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
- }
-
- public Writer quote(String string, Writer writer){
- throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
- }
-
- public JSONObject putOnce(String string, Object object){
- throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
- }
-
- public JSONObject put(String string, Map map){
- throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
- }
-
- public JSONObject put(String string, Collection collection){
- throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
- }
-
- public JSONObject increment(String string){
- throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
- }
-
- public String[] getNames(Object object){
- throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
- }
-
- public String[] getNames(JSONObject jsonObject){
- throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
- }
-
- public String doubleToString(double dou){
- throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
- }
-
- public JSONObject(String string, Locale locale){
- throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
- }
-
- public JSONObject(Object object, String[] stringarr){
- throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
- }
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/cb7fc6e7/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONStringer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONStringer.java b/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONStringer.java
index 5085995..78aa79f 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONStringer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONStringer.java
@@ -19,6 +19,7 @@ package org.apache.wicket.ajax.json;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
// Note: this class was written without inspecting the non-free org.json sourcecode.
@@ -58,12 +59,12 @@ import java.util.List;
* Item 17, "Design and Document or inheritance or else prohibit it" for further
* information.
*/
-public class JSONStringer extends JSONWriter{
+public class JSONStringer {
/**
* The output data, containing at most one top-level array or object.
*/
- final StringBuilder out = new StringBuilder();
+ final protected StringBuilder out = new StringBuilder();
/**
* Lexical scoping elements within this stringer, necessary to insert the
@@ -237,19 +238,24 @@ public class JSONStringer extends JSONWriter{
}
if (value instanceof JSONArray) {
- ((JSONArray) value).writeTo(this);
+ ((JSONArray) value).toString(this);
return this;
} else if (value instanceof JSONObject) {
- ((JSONObject) value).writeTo(this);
+ ((JSONObject) value).toString(this);
return this;
}
beforeValue();
+ if (value instanceof JSONString) {
+ out.append(((JSONString) value).toJSONString());
+ return this;
+ }
+
if (value == null
- || value instanceof Boolean
- || value == JSONObject.NULL) {
+ || value instanceof Boolean
+ || value == JSONObject.NULL) {
out.append(value);
} else if (value instanceof Number) {
@@ -258,7 +264,7 @@ public class JSONStringer extends JSONWriter{
} else {
// Hack to make it possible that the value is not surrounded by quotes. (Used for JavaScript function calls)
// Example: { "name": "testkey", "value": window.myfunction() }
- if (value.getClass().getSimpleName().contains("JsonFunction")) {
+ if (value.getClass().getSimpleName().contains("JSONFunction")) {
// note that no escaping of quotes (or anything else) is done in this case.
// that is fine because the only way to get to this point is to
// explicitly put a special kind of object into the JSON data structure.
@@ -320,6 +326,20 @@ public class JSONStringer extends JSONWriter{
return this;
}
+ /**
+ * Encodes {@code key}/{@code value} pair to this stringer.
+ *
+ * @param entry The entry to encode.
+ * @return this stringer.
+ * @throws JSONException If we have an internal error. Shouldn't happen.
+ */
+ public JSONStringer entry(Map.Entry<String, Object> entry) {
+ if (!JSONObject.NULL.equals(entry.getValue())) {
+ this.key(entry.getKey()).value(entry.getValue());
+ }
+ return this;
+ }
+
private void string(String value) {
out.append("\"");
char currentChar = 0;
@@ -393,6 +413,18 @@ public class JSONStringer extends JSONWriter{
}
/**
+ * Creates String representation of the key (property name) to this stringer
+ * Override this method to provide your own representation of the name.
+ *
+ * @param name the name of the forthcoming value.
+ * @return this stringer.
+ */
+ protected JSONStringer createKey(String name) {
+ string(name);
+ return this;
+ }
+
+ /**
* Encodes the key (property name) to this stringer.
*
* @param name the name of the forthcoming value. May not be null.
@@ -404,8 +436,7 @@ public class JSONStringer extends JSONWriter{
throw new JSONException("Names must be non-null");
}
beforeKey();
- string(name);
- return this;
+ return createKey(name);
}
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/cb7fc6e7/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONTokener.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONTokener.java b/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONTokener.java
index bc3e68a..ce884df 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONTokener.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONTokener.java
@@ -438,13 +438,13 @@ public class JSONTokener {
throw syntaxError("Unterminated array");
case ']':
if (hasTrailingSeparator) {
- result.put((Collection<?>)null);
+ result.put(null);
}
return result;
case ',':
case ';':
/* A separator without a value first means "null". */
- result.put((Collection<?>)null);
+ result.put(null);
hasTrailingSeparator = true;
continue;
default:
@@ -606,12 +606,10 @@ public class JSONTokener {
* input is exhausted.
*
* @param thru The string to skip over.
- * @return boolean
*/
- public boolean skipPast(String thru) {
+ public void skipPast(String thru) {
int thruStart = in.indexOf(thru, pos);
pos = thruStart == -1 ? in.length() : (thruStart + thru.length());
- return true;
}
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/cb7fc6e7/wicket-core/src/main/java/org/apache/wicket/ajax/json/XMLTokener.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/json/XMLTokener.java b/wicket-core/src/main/java/org/apache/wicket/ajax/json/XMLTokener.java
index a1d8ed7..141777e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/json/XMLTokener.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/json/XMLTokener.java
@@ -49,7 +49,7 @@ public class XMLTokener extends JSONTokener
throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
}
- public boolean skipPast(String to) throws JSONException
+ public void skipPast(String to) throws JSONException
{
throw new WicketRuntimeException(JsonConstants.OPEN_JSON_EXCEPTION);
}
[2/2] wicket git commit: Unexpected errors are logged
Posted by ad...@apache.org.
Unexpected errors are logged
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/59b853d0
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/59b853d0
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/59b853d0
Branch: refs/heads/wicket-7.x
Commit: 59b853d0c47143c52f1ecbcab0f40881e9079ac7
Parents: cb7fc6e
Author: Andrea Del Bene <an...@innoteam.it>
Authored: Mon Apr 10 11:18:26 2017 +0200
Committer: Andrea Del Bene <ad...@apache.org>
Committed: Sat Apr 15 16:45:13 2017 +0200
----------------------------------------------------------------------
.../main/java/org/apache/wicket/ajax/json/JSONArray.java | 9 ++++++---
.../main/java/org/apache/wicket/ajax/json/JSONObject.java | 7 ++++++-
2 files changed, 12 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/59b853d0/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONArray.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONArray.java b/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONArray.java
index 7b07765..7886968 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONArray.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONArray.java
@@ -23,6 +23,8 @@ import java.util.Collection;
import java.util.List;
import org.apache.wicket.WicketRuntimeException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
// Note: this class was written without inspecting the non-free org.json sourcecode.
@@ -49,7 +51,8 @@ import org.apache.wicket.WicketRuntimeException;
* prohibit it" for further information.
*/
public class JSONArray {
-
+ private final static Logger log = LoggerFactory.getLogger(JSONArray.class);
+
private final List<Object> values;
/**
@@ -95,7 +98,6 @@ public class JSONArray {
if (object instanceof JSONArray) {
values = ((JSONArray) object).values;
} else {
- //noinspection ConstantConditions
throw JSON.typeMismatch(object, "JSONArray");
}
}
@@ -716,7 +718,8 @@ public class JSONArray {
try {
return toString(new JSONStringer());
} catch (JSONException e) {
- return null;
+ log.error("Unexpected exception", e);
+ return null;
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/59b853d0/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONObject.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONObject.java b/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONObject.java
index 9834410..6a12d1b 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONObject.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/json/JSONObject.java
@@ -28,6 +28,9 @@ import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
// Note: this class was written without inspecting the non-free org.json sourcecode.
/**
@@ -83,7 +86,8 @@ import java.util.TreeMap;
* prohibit it" for further information.
*/
public class JSONObject {
-
+ private final static Logger log = LoggerFactory.getLogger(JSONObject.class);
+
private static final Double NEGATIVE_ZERO = -0d;
/**
@@ -857,6 +861,7 @@ public class JSONObject {
try {
return toString(new JSONStringer());
} catch (JSONException e) {
+ log.error("Unexpected exception", e);
return null;
}
}