http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/jso/package.html ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/jso/package.html b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/jso/package.html deleted file mode 100755 index ac9a67e..0000000 --- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/jso/package.html +++ /dev/null @@ -1,34 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Licensed Materials - Property of IBM - (c) Copyright IBM Corporation 2014. All Rights Reserved. - - Note to U.S. Government Users Restricted Rights: - Use, duplication or disclosure restricted by GSA ADP Schedule - Contract with IBM Corp. - --> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <style type="text/css"> - /* For viewing in Page Designer */ - @IMPORT url("../../../../../../javadoc.css"); - - /* For viewing in REST interface */ - @IMPORT url("../htdocs/javadoc.css"); - body { - margin: 20px; - } - </style> - <script> - /* Replace all @code and @link tags. */ - window.onload = function() { - document.body.innerHTML = document.body.innerHTML.replace(/\{\@code ([^\}]+)\}/g, '<code>$1</code>'); - document.body.innerHTML = document.body.innerHTML.replace(/\{\@link (([^\}]+)\.)?([^\.\}]+)\}/g, '<code>$3</code>'); - } - </script> -</head> -<body> -<p>Java-serialized-object support</p> -</body> -</html> \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonClassMeta.class ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonClassMeta.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonClassMeta.class deleted file mode 100755 index 035d4fa..0000000 Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonClassMeta.class and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonClassMeta.java ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonClassMeta.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonClassMeta.java deleted file mode 100755 index 7beba59..0000000 --- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonClassMeta.java +++ /dev/null @@ -1,55 +0,0 @@ -/******************************************************************************* - * Licensed Materials - Property of IBM - * (c) Copyright IBM Corporation 2015. All Rights Reserved. - * - * The source code for this program is not published or otherwise - * divested of its trade secrets, irrespective of what has been - * deposited with the U.S. Copyright Office. - *******************************************************************************/ -package com.ibm.juno.core.json; - -import com.ibm.juno.core.json.annotation.*; -import com.ibm.juno.core.utils.*; - -/** - * Metadata on classes specific to the JSON serializers and parsers pulled from the {@link Json @Json} annotation on the class. - * - * @author James Bognar ([email protected]) - */ -public class JsonClassMeta { - - private final Json json; - private final String wrapperAttr; - - /** - * Constructor. - * - * @param c The class that this annotation is defined on. - */ - public JsonClassMeta(Class<?> c) { - this.json = ReflectionUtils.getAnnotation(Json.class, c); - if (json != null) { - wrapperAttr = StringUtils.nullIfEmpty(json.wrapperAttr()); - } else { - wrapperAttr = null; - } - } - - /** - * Returns the {@link Json} annotation defined on the class. - * - * @return The value of the {@link Json} annotation, or <jk>null</jk> if not specified. - */ - protected Json getAnnotation() { - return json; - } - - /** - * Returns the {@link Json#wrapperAttr()} annotation defined on the class. - * - * @return The value of the {@link Json#wrapperAttr()} annotation, or <jk>null</jk> if not specified. - */ - protected String getWrapperAttr() { - return wrapperAttr; - } -} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParser.class ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParser.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParser.class deleted file mode 100755 index fe41f60..0000000 Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParser.class and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParser.java ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParser.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParser.java deleted file mode 100755 index 42cd8b9..0000000 --- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParser.java +++ /dev/null @@ -1,852 +0,0 @@ -/******************************************************************************* - * Licensed Materials - Property of IBM - * (c) Copyright IBM Corporation 2011, 2015. All Rights Reserved. - * - * The source code for this program is not published or otherwise - * divested of its trade secrets, irrespective of what has been - * deposited with the U.S. Copyright Office. - *******************************************************************************/ -package com.ibm.juno.core.json; - -import static com.ibm.juno.core.json.JsonParserProperties.*; - -import java.io.*; -import java.lang.reflect.*; -import java.util.*; - -import com.ibm.juno.core.*; -import com.ibm.juno.core.annotation.*; -import com.ibm.juno.core.filter.*; -import com.ibm.juno.core.parser.*; -import com.ibm.juno.core.utils.*; - -/** - * Parses any valid JSON text into a POJO model. - * - * - * <h6 class='topic'>Media types</h6> - * <p> - * Handles <code>Content-Type</code> types: <code>application/json, text/json</code> - * - * - * <h6 class='topic'>Description</h6> - * <p> - * This parser uses a state machine, which makes it very fast and efficient. It parses JSON in about 70% of the - * time that it takes the built-in Java DOM parsers to parse equivalent XML. - * <p> - * This parser handles all valid JSON syntax. - * In addition, when strict mode is disable, the parser also handles the following: - * <ul> - * <li> Javascript comments (both {@code /*} and {@code //}) are ignored. - * <li> Both single and double quoted strings. - * <li> Automatically joins concatenated strings (e.g. <code><js>"aaa"</js> + <js>'bbb'</js></code>). - * <li> Unquoted attributes. - * </ul> - * Also handles negative, decimal, hexadecimal, octal, and double numbers, including exponential notation. - * <p> - * This parser handles the following input, and automatically returns the corresponding Java class. - * <ul> - * <li> JSON objects (<js>"{...}"</js>) are converted to {@link ObjectMap ObjectMaps}. <br> - * Note: If a <code><xa>_class</xa>=<xs>'xxx'</xs></code> attribute is specified on the object, then an attempt is made to convert the object - * to an instance of the specified Java bean class. See the classProperty setting on the {@link BeanContextFactory} for more information - * about parsing beans from JSON. - * <li> JSON arrays (<js>"[...]"</js>) are converted to {@link ObjectList ObjectLists}. - * <li> JSON string literals (<js>"'xyz'"</js>) are converted to {@link String Strings}. - * <li> JSON numbers (<js>"123"</js>, including octal/hexadecimal/exponential notation) are converted to {@link Integer Integers}, - * {@link Long Longs}, {@link Float Floats}, or {@link Double Doubles} depending on whether the number is decimal, and the size of the number. - * <li> JSON booleans (<js>"false"</js>) are converted to {@link Boolean Booleans}. - * <li> JSON nulls (<js>"null"</js>) are converted to <jk>null</jk>. - * <li> Input consisting of only whitespace or JSON comments are converted to <jk>null</jk>. - * </ul> - * <p> - * Input can be any of the following:<br> - * <ul> - * <li> <js>"{...}"</js> - Converted to a {@link ObjectMap} or an instance of a Java bean if a <xa>_class</xa> attribute is present. - * <li> <js>"[...]"</js> - Converted to a {@link ObjectList}. - * <li> <js>"123..."</js> - Converted to a {@link Number} (either {@link Integer}, {@link Long}, {@link Float}, or {@link Double}). - * <li> <js>"true"</js>/<js>"false"</js> - Converted to a {@link Boolean}. - * <li> <js>"null"</js> - Returns <jk>null</jk>. - * <li> <js>"'xxx'"</js> - Converted to a {@link String}. - * <li> <js>"\"xxx\""</js> - Converted to a {@link String}. - * <li> <js>"'xxx' + \"yyy\""</js> - Converted to a concatenated {@link String}. - * </ul> - * <p> - * TIP: If you know you're parsing a JSON object or array, it can be easier to parse it using the {@link ObjectMap#ObjectMap(CharSequence) ObjectMap(CharSequence)} - * or {@link ObjectList#ObjectList(CharSequence) ObjectList(CharSequence)} constructors instead of using this class. The end result should be the same. - * - * - * <h6 class='topic'>Configurable properties</h6> - * <p> - * This class has the following properties associated with it: - * <ul> - * <li>{@link ParserProperties} - * <li>{@link BeanContextProperties} - * </ul> - * - * - * @author James Bognar ([email protected]) - */ -@SuppressWarnings({ "rawtypes", "unchecked" }) -@Consumes({"application/json","text/json"}) -public final class JsonParser extends ReaderParser { - - /** Default parser, all default settings.*/ - public static final JsonParser DEFAULT = new JsonParser().lock(); - - /** Default parser, all default settings.*/ - public static final JsonParser DEFAULT_STRICT = new JsonParser().setProperty(JSON_strictMode, true).lock(); - - /** JSON specific properties currently defined on this class */ - protected transient JsonParserProperties jpp = new JsonParserProperties(); - - private <T> T parseAnything(JsonParserContext ctx, ClassMeta<T> nt, ParserReader r, BeanPropertyMeta p, Object outer, Object name) throws ParseException { - - BeanContext bc = ctx.getBeanContext(); - if (nt == null) - nt = (ClassMeta<T>)object(); - PojoFilter<T,Object> filter = (PojoFilter<T,Object>)nt.getPojoFilter(); - ClassMeta<?> ft = nt.getFilteredClassMeta(); - String wrapperAttr = ft.getJsonMeta().getWrapperAttr(); - - int line = r.getLine(); - int column = r.getColumn(); - Object o = null; - try { - skipCommentsAndSpace(ctx, r); - if (wrapperAttr != null) - skipWrapperAttrStart(ctx, r, wrapperAttr); - int c = r.peek(); - if (c == -1) { - // Let o be null. - } else if ((c == ',' || c == '}' || c == ']')) { - if (ctx.isStrictMode()) - throw new ParseException(line, column, "Missing value detected."); - // Handle bug in Cognos 10.2.1 that can product non-existent values. - // Let o be null; - } else if (c == 'n') { - parseKeyword("null", r); - } else if (ft.isObject()) { - if (c == '{') { - ObjectMap m2 = new ObjectMap(bc); - parseIntoMap2(ctx, r, m2, string(), object()); - o = m2.cast(); - } else if (c == '[') - o = parseIntoCollection2(ctx, r, new ObjectList(bc), object()); - else if (c == '\'' || c == '"') { - o = parseString(ctx, r); - if (ft.isChar()) - o = o.toString().charAt(0); - } - else if (c >= '0' && c <= '9' || c == '-') - o = parseNumber(ctx, r, null); - else if (c == 't') { - parseKeyword("true", r); - o = Boolean.TRUE; - } else { - parseKeyword("false", r); - o = Boolean.FALSE; - } - } else if (ft.isBoolean()) { - o = parseBoolean(ctx, r); - } else if (ft.isCharSequence()) { - o = parseString(ctx, r); - } else if (ft.isChar()) { - o = parseString(ctx, r).charAt(0); - } else if (ft.isNumber()) { - o = parseNumber(ctx, r, (Class<? extends Number>)ft.getInnerClass()); - } else if (ft.isMap()) { - Map m = (ft.canCreateNewInstance(outer) ? (Map)ft.newInstance(outer) : new ObjectMap(bc)); - o = parseIntoMap2(ctx, r, m, ft.getKeyType(), ft.getValueType()); - } else if (ft.isCollection()) { - if (c == '{') { - ObjectMap m = new ObjectMap(bc); - parseIntoMap2(ctx, r, m, string(), object()); - o = m.cast(); - } else { - Collection l = (ft.canCreateNewInstance(outer) ? (Collection)ft.newInstance() : new ObjectList(bc)); - o = parseIntoCollection2(ctx, r, l, ft.getElementType()); - } - } else if (ft.canCreateNewInstanceFromObjectMap(outer)) { - ObjectMap m = new ObjectMap(bc); - parseIntoMap2(ctx, r, m, string(), object()); - o = ft.newInstanceFromObjectMap(outer, m); - } else if (ft.canCreateNewBean(outer)) { - BeanMap m = bc.newBeanMap(outer, ft.getInnerClass()); - o = parseIntoBeanMap2(ctx, r, m).getBean(); - } else if (ft.canCreateNewInstanceFromString(outer) && (c == '\'' || c == '"')) { - o = ft.newInstanceFromString(outer, parseString(ctx, r)); - } else if (ft.isArray()) { - if (c == '{') { - ObjectMap m = new ObjectMap(bc); - parseIntoMap2(ctx, r, m, string(), object()); - o = m.cast(); - } else { - ArrayList l = (ArrayList)parseIntoCollection2(ctx, r, new ArrayList(), ft.getElementType()); - o = bc.toArray(ft, l); - } - } else if (c == '{' ){ - Map m = new ObjectMap(bc); - parseIntoMap2(ctx, r, m, ft.getKeyType(), ft.getValueType()); - if (m.containsKey("_class")) - o = ((ObjectMap)m).cast(); - else - throw new ParseException(line, column, "Class ''{0}'' could not be instantiated. Reason: ''{1}''", ft.getInnerClass().getName(), ft.getNotABeanReason()); - } else if (ft.canCreateNewInstanceFromString(outer) && ! ctx.isStrictMode()) { - o = ft.newInstanceFromString(outer, parseString(ctx, r)); - } else { - throw new ParseException(line, column, "Unrecognized syntax for class type ''{0}'', starting character ''{1}''", ft, (char)c); - } - - if (wrapperAttr != null) - skipWrapperAttrEnd(ctx, r); - - if (filter != null && o != null) - o = filter.unfilter(o, nt); - - if (outer != null) - setParent(nt, o, outer); - - if (name != null) - setName(nt, o, name); - - return (T)o; - - } catch (RuntimeException e) { - throw e; - } catch (Exception e) { - if (p == null) - throw new ParseException("Error occurred trying to parse into class ''{0}''", ft).initCause(e); - throw new ParseException("Error occurred trying to parse value for bean property ''{0}'' on class ''{1}''", - p.getName(), p.getBeanMeta().getClassMeta() - ).initCause(e); - } - } - - private Number parseNumber(JsonParserContext ctx, ParserReader r, Class<? extends Number> type) throws IOException, ParseException { - int c = r.peek(); - if (c == '\'' || c == '"') - return parseNumber(ctx, parseString(ctx, r), type); - return parseNumber(ctx, StringUtils.parseNumberString(r), type); - } - - private Number parseNumber(JsonParserContext ctx, String s, Class<? extends Number> type) throws ParseException { - if (ctx.isStrictMode()) { - // Need to weed out octal and hexadecimal formats: 0123,-0123,0x123,-0x123. - // Don't weed out 0 or -0. - // All other number formats are supported in JSON. - boolean isNegative = false; - char c = (s.length() == 0 ? 'x' : s.charAt(0)); - if (c == '-') { - isNegative = true; - c = (s.length() == 1 ? 'x' : s.charAt(1)); - } - if (c == 'x' || (c == '0' && s.length() > (isNegative ? 2 : 1))) - throw new NumberFormatException("Invalid JSON number '"+s+"'"); - } - return StringUtils.parseNumber(s, type); - } - - private Boolean parseBoolean(JsonParserContext ctx, ParserReader r) throws IOException, ParseException { - int c = r.peek(); - if (c == '\'' || c == '"') - return Boolean.valueOf(parseString(ctx, r)); - if (c == 't') { - parseKeyword("true", r); - return Boolean.TRUE; - } - parseKeyword("false", r); - return Boolean.FALSE; - } - - - private <K,V> Map<K,V> parseIntoMap2(JsonParserContext ctx, ParserReader r, Map<K,V> m, ClassMeta<K> keyType, ClassMeta<V> valueType) throws ParseException, IOException { - int line = r.getLine(); - int column = r.getColumn(); - - if (keyType == null) - keyType = (ClassMeta<K>)string(); - - int S0=0; // Looking for outer { - int S1=1; // Looking for attrName start. - int S3=3; // Found attrName end, looking for :. - int S4=4; // Found :, looking for valStart: { [ " ' LITERAL. - int S5=5; // Looking for , or } - - int state = S0; - String currAttr = null; - int c = 0; - while (c != -1) { - c = r.read(); - if (state == S0) { - if (c == '{') - state = S1; - } else if (state == S1) { - if (c == '}') { - return m; - } else if (c == '/') { - skipCommentsAndSpace(ctx, r.unread()); - } else if (! Character.isWhitespace(c)) { - currAttr = parseFieldName(ctx, r.unread()); - state = S3; - } - } else if (state == S3) { - if (c == ':') - state = S4; - } else if (state == S4) { - if (c == '/') { - skipCommentsAndSpace(ctx, r.unread()); - } else if (! Character.isWhitespace(c)) { - K key = convertAttrToType(m, currAttr, keyType); - V value = parseAnything(ctx, valueType, r.unread(), null, m, key); - m.put(key, value); - state = S5; - } - } else if (state == S5) { - if (c == ',') - state = S1; - else if (c == '/') - skipCommentsAndSpace(ctx, r.unread()); - else if (c == '}') { - return m; - } - } - } - if (state == S0) - throw new ParseException(line, column, "Expected '{' at beginning of JSON object."); - if (state == S1) - throw new ParseException(line, column, "Could not find attribute name on JSON object."); - if (state == S3) - throw new ParseException(line, column, "Could not find ':' following attribute name on JSON object."); - if (state == S4) - throw new ParseException(line, column, "Expected one of the following characters: {,[,',\",LITERAL."); - if (state == S5) - throw new ParseException(line, column, "Could not find '}' marking end of JSON object."); - - return null; // Unreachable. - } - - /* - * Parse a JSON attribute from the character array at the specified position, then - * set the position marker to the last character in the field name. - */ - private String parseFieldName(JsonParserContext ctx, ParserReader r) throws ParseException, IOException { - int line = r.getLine(); - int column = r.getColumn(); - int c = r.peek(); - if (c == '\'' || c == '"') - return parseString(ctx, r); - if (ctx.isStrictMode()) - throw new ParseException(line, column, "Unquoted attribute detected."); - r.mark(); - // Look for whitespace. - while (c != -1) { - c = r.read(); - if (c == ':' || Character.isWhitespace(c) || c == '/') { - r.unread(); - String s = r.getMarked().intern(); - return s.equals("null") ? null : s; - } - } - throw new ParseException(line, column, "Could not find the end of the field name."); - } - - private <E> Collection<E> parseIntoCollection2(JsonParserContext ctx, ParserReader r, Collection<E> l, ClassMeta<E> elementType) throws ParseException, IOException { - int line = r.getLine(); - int column = r.getColumn(); - - int S0=0; // Looking for outermost [ - int S1=1; // Looking for starting [ or { or " or ' or LITERAL - int S2=2; // Looking for , or ] - - int state = S0; - int c = 0; - while (c != -1) { - c = r.read(); - if (state == S0) { - if (c == '[') - state = S1; - } else if (state == S1) { - if (c == ']') { - return l; - } else if (c == '/') { - skipCommentsAndSpace(ctx, r.unread()); - } else if (! Character.isWhitespace(c)) { - l.add(parseAnything(ctx, elementType, r.unread(), null, l, null)); - state = S2; - } - } else if (state == S2) { - if (c == ',') { - state = S1; - } else if (c == '/') { - skipCommentsAndSpace(ctx, r.unread()); - } else if (c == ']') { - return l; - } - } - } - if (state == S0) - throw new ParseException(line, column, "Expected '[' at beginning of JSON array."); - if (state == S1) - throw new ParseException(line, column, "Expected one of the following characters: {,[,',\",LITERAL."); - if (state == S2) - throw new ParseException(line, column, "Expected ',' or ']'."); - - return null; // Unreachable. - } - - private Object[] parseArgs(JsonParserContext ctx, ParserReader r, ClassMeta<?>[] argTypes) throws ParseException, IOException { - int line = r.getLine(); - int column = r.getColumn(); - - int S0=0; // Looking for outermost [ - int S1=1; // Looking for starting [ or { or " or ' or LITERAL - int S2=2; // Looking for , or ] - - Object[] o = new Object[argTypes.length]; - int i = 0; - - int state = S0; - int c = 0; - while (c != -1) { - c = r.read(); - if (state == S0) { - if (c == '[') - state = S1; - } else if (state == S1) { - if (c == ']') { - return o; - } else if (c == '/') { - skipCommentsAndSpace(ctx, r.unread()); - } else if (! Character.isWhitespace(c)) { - o[i] = parseAnything(ctx, argTypes[i], r.unread(), null, ctx.getOuter(), null); - i++; - state = S2; - } - } else if (state == S2) { - if (c == ',') { - state = S1; - } else if (c == '/') { - skipCommentsAndSpace(ctx, r.unread()); - } else if (c == ']') { - return o; - } - } - } - if (state == S0) - throw new ParseException(line, column, "Expected '[' at beginning of JSON array."); - if (state == S1) - throw new ParseException(line, column, "Expected one of the following characters: {,[,',\",LITERAL."); - if (state == S2) - throw new ParseException(line, column, "Expected ',' or ']'."); - - return null; // Unreachable. - } - - private <T> BeanMap<T> parseIntoBeanMap2(JsonParserContext ctx, ParserReader r, BeanMap<T> m) throws ParseException, IOException { - int line = r.getLine(); - int column = r.getColumn(); - - int S0=0; // Looking for outer { - int S1=1; // Looking for attrName start. - int S3=3; // Found attrName end, looking for :. - int S4=4; // Found :, looking for valStart: { [ " ' LITERAL. - int S5=5; // Looking for , or } - - int state = S0; - String currAttr = ""; - int c = 0; - int currAttrLine = -1, currAttrCol = -1; - while (c != -1) { - c = r.read(); - if (state == S0) { - if (c == '{') - state = S1; - } else if (state == S1) { - if (c == '}') { - return m; - } else if (c == '/') { - skipCommentsAndSpace(ctx, r.unread()); - } else if (! Character.isWhitespace(c)) { - r.unread(); - currAttrLine= r.getLine(); - currAttrCol = r.getColumn(); - currAttr = parseFieldName(ctx, r); - state = S3; - } - } else if (state == S3) { - if (c == ':') - state = S4; - } else if (state == S4) { - if (c == '/') { - skipCommentsAndSpace(ctx, r.unread()); - } else if (! Character.isWhitespace(c)) { - if (! currAttr.equals("_class")) { - BeanPropertyMeta pMeta = m.getPropertyMeta(currAttr); - if (pMeta == null) { - if (m.getMeta().isSubTyped()) { - m.put(currAttr, parseAnything(ctx, object(), r.unread(), null, m.getBean(false), currAttr)); - } else { - onUnknownProperty(ctx, currAttr, m, currAttrLine, currAttrCol); - parseAnything(ctx, object(), r.unread(), null, m.getBean(false), null); // Read content anyway to ignore it - } - } else { - Object value = parseAnything(ctx, pMeta.getClassMeta(), r.unread(), pMeta, m.getBean(false), currAttr); - pMeta.set(m, value); - } - } - state = S5; - } - } else if (state == S5) { - if (c == ',') - state = S1; - else if (c == '/') - skipCommentsAndSpace(ctx, r.unread()); - else if (c == '}') { - return m; - } - } - } - if (state == S0) - throw new ParseException(line, column, "Expected '{' at beginning of JSON object."); - if (state == S1) - throw new ParseException(line, column, "Could not find attribute name on JSON object."); - if (state == S3) - throw new ParseException(line, column, "Could not find ':' following attribute name on JSON object."); - if (state == S4) - throw new ParseException(line, column, "Expected one of the following characters: {,[,',\",LITERAL."); - if (state == S5) - throw new ParseException(line, column, "Could not find '}' marking end of JSON object."); - - return null; // Unreachable. - } - - /* - * Starting from the specified position in the character array, returns the - * position of the character " or '. - * If the string consists of a concatenation of strings (e.g. 'AAA' + "BBB"), this method - * will automatically concatenate the strings and return the result. - */ - private String parseString(JsonParserContext ctx, ParserReader r) throws ParseException, IOException { - int line = r.getLine(); - int column = r.getColumn(); - r.mark(); - int qc = r.read(); // The quote character being used (" or ') - if (qc != '"' && ctx.isStrictMode()) { - String msg = (qc == '\'' ? "Invalid quote character \"{0}\" being used." : "Did not find quote character marking beginning of string. Character=\"{0}\""); - throw new ParseException(line, column, msg, (char)qc); - } - final boolean isQuoted = (qc == '\'' || qc == '"'); - String s = null; - boolean isInEscape = false; - int c = 0; - while (c != -1) { - c = r.read(); - if (isInEscape) { - switch (c) { - case 'n': r.replace('\n'); break; - case 'r': r.replace('\r'); break; - case 't': r.replace('\t'); break; - case 'f': r.replace('\f'); break; - case 'b': r.replace('\b'); break; - case '\\': r.replace('\\'); break; - case '/': r.replace('/'); break; - case '\'': r.replace('\''); break; - case '"': r.replace('"'); break; - case 'u': { - String n = r.read(4); - r.replace(Integer.parseInt(n, 16), 6); - break; - } - default: - throw new ParseException(line, column, "Invalid escape sequence in string."); - } - isInEscape = false; - } else { - if (c == '\\') { - isInEscape = true; - r.delete(); - } else if (isQuoted) { - if (c == qc) { - s = r.getMarked(1, -1); - break; - } - } else { - if (c == ',' || c == '}' || Character.isWhitespace(c)) { - s = r.getMarked(0, -1); - r.unread(); - break; - } else if (c == -1) { - s = r.getMarked(0, 0); - break; - } - } - } - } - if (s == null) - throw new ParseException(line, column, "Could not find expected end character ''{0}''.", (char)qc); - - // Look for concatenated string (i.e. whitespace followed by +). - skipCommentsAndSpace(ctx, r); - if (r.peek() == '+') { - if (ctx.isStrictMode()) - throw new ParseException(r.getLine(), r.getColumn(), "String concatenation detected."); - r.read(); // Skip past '+' - skipCommentsAndSpace(ctx, r); - s += parseString(ctx, r); - } - return s; // End of input reached. - } - - /* - * Looks for the keywords true, false, or null. - * Throws an exception if any of these keywords are not found at the specified position. - */ - private void parseKeyword(String keyword, ParserReader r) throws ParseException, IOException { - int line = r.getLine(); - int column = r.getColumn(); - try { - String s = r.read(keyword.length()); - if (s.equals(keyword)) - return; - throw new ParseException(line, column, "Unrecognized syntax."); - } catch (IndexOutOfBoundsException e) { - throw new ParseException(line, column, "Unrecognized syntax."); - } - } - - /* - * Doesn't actually parse anything, but moves the position beyond any whitespace or comments. - * If positionOnNext is 'true', then the cursor will be set to the point immediately after - * the comments and whitespace. Otherwise, the cursor will be set to the last position of - * the comments and whitespace. - */ - private void skipCommentsAndSpace(JsonParserContext ctx, ParserReader r) throws ParseException, IOException { - int c = 0; - while ((c = r.read()) != -1) { - if (! Character.isWhitespace(c)) { - if (c == '/') { - if (ctx.isStrictMode()) - throw new ParseException(r.getLine(), r.getColumn(), "Javascript comment detected."); - skipComments(r); - } else { - r.unread(); - return; - } - } - } - } - - /* - * Doesn't actually parse anything, but moves the position beyond the construct "{wrapperAttr:" when - * the @Json.wrapperAttr() annotation is used on a class. - */ - private void skipWrapperAttrStart(JsonParserContext ctx, ParserReader r, String wrapperAttr) throws ParseException, IOException { - int line = r.getLine(); - int column = r.getColumn(); - - int S0=0; // Looking for outer { - int S1=1; // Looking for attrName start. - int S3=3; // Found attrName end, looking for :. - int S4=4; // Found :, looking for valStart: { [ " ' LITERAL. - - int state = S0; - String currAttr = null; - int c = 0; - while (c != -1) { - c = r.read(); - if (state == S0) { - if (c == '{') - state = S1; - } else if (state == S1) { - if (c == '/') { - skipCommentsAndSpace(ctx, r.unread()); - } else if (! Character.isWhitespace(c)) { - currAttr = parseFieldName(ctx, r.unread()); - if (! currAttr.equals(wrapperAttr)) - throw new ParseException(line, column, "Expected to find wrapper attribute ''{0}'' but found attribute ''{1}''", wrapperAttr, currAttr); - state = S3; - } - } else if (state == S3) { - if (c == ':') - state = S4; - } else if (state == S4) { - if (c == '/') { - skipCommentsAndSpace(ctx, r.unread()); - } else if (! Character.isWhitespace(c)) { - r.unread(); - return; - } - } - } - if (state == S0) - throw new ParseException(line, column, "Expected '{' at beginning of JSON object."); - if (state == S1) - throw new ParseException(line, column, "Could not find attribute name on JSON object."); - if (state == S3) - throw new ParseException(line, column, "Could not find ':' following attribute name on JSON object."); - if (state == S4) - throw new ParseException(line, column, "Expected one of the following characters: {,[,',\",LITERAL."); - } - - /* - * Doesn't actually parse anything, but moves the position beyond the construct "}" when - * the @Json.wrapperAttr() annotation is used on a class. - */ - private void skipWrapperAttrEnd(JsonParserContext ctx, ParserReader r) throws ParseException, IOException { - int c = 0; - int line = r.getLine(); - int column = r.getColumn(); - while ((c = r.read()) != -1) { - if (! Character.isWhitespace(c)) { - if (c == '/') { - if (ctx.isStrictMode()) - throw new ParseException(line, column, "Javascript comment detected."); - skipComments(r); - } else if (c == '}') { - return; - } else { - throw new ParseException(line, column, "Could not find '}' at the end of JSON wrapper object."); - } - } - } - } - - /* - * Doesn't actually parse anything, but when positioned at the beginning of comment, - * it will move the pointer to the last character in the comment. - */ - private void skipComments(ParserReader r) throws ParseException, IOException { - int line = r.getLine(); - int column = r.getColumn(); - int c = r.read(); - // "/* */" style comments - if (c == '*') { - while (c != -1) - if ((c = r.read()) == '*') - if ((c = r.read()) == '/') - return; - // "//" style comments - } else if (c == '/') { - while (c != -1) { - c = r.read(); - if (c == -1 || c == '\n') - return; - } - } - throw new ParseException(line, column, "Open ended comment."); - } - - /* - * Call this method after you've finished a parsing a string to make sure that if there's any - * remainder in the input, that it consists only of whitespace and comments. - */ - private void validateEnd(JsonParserContext ctx, ParserReader r) throws ParseException, IOException { - skipCommentsAndSpace(ctx, r); - int line = r.getLine(); - int column = r.getColumn(); - int c = r.read(); - if (c != -1 && c != ';') // var x = {...}; expressions can end with a semicolon. - throw new ParseException(line, column, "Remainder after parse: ''{0}''.", (char)c); - } - - - //-------------------------------------------------------------------------------- - // Overridden methods - //-------------------------------------------------------------------------------- - - @Override /* Parser */ - public JsonParserContext createContext(ObjectMap op, Method javaMethod, Object outer) { - return new JsonParserContext(getBeanContext(), jpp, pp, op, javaMethod, outer); - } - - @Override /* Parser */ - protected <T> T doParse(Reader in, int estimatedSize, ClassMeta<T> type, ParserContext ctx) throws ParseException, IOException { - JsonParserContext jctx = (JsonParserContext)ctx; - type = ctx.getBeanContext().normalizeClassMeta(type); - ParserReader r = jctx.getReader(in, estimatedSize); - T o = parseAnything(jctx, type, r, null, ctx.getOuter(), null); - validateEnd(jctx, r); - return o; - } - - @Override /* ReaderParser */ - protected <K,V> Map<K,V> doParseIntoMap(Reader in, int estimatedSize, Map<K,V> m, Type keyType, Type valueType, ParserContext ctx) throws ParseException, IOException { - JsonParserContext jctx = (JsonParserContext)ctx; - ParserReader r = jctx.getReader(in, estimatedSize); - m = parseIntoMap2(jctx, r, m, ctx.getBeanContext().getClassMeta(keyType), ctx.getBeanContext().getClassMeta(valueType)); - validateEnd(jctx, r); - return m; - } - - @Override /* ReaderParser */ - protected <E> Collection<E> doParseIntoCollection(Reader in, int estimatedSize, Collection<E> c, Type elementType, ParserContext ctx) throws ParseException, IOException { - JsonParserContext jctx = (JsonParserContext)ctx; - ParserReader r = jctx.getReader(in, estimatedSize); - c = parseIntoCollection2(jctx, r, c, ctx.getBeanContext().getClassMeta(elementType)); - validateEnd(jctx, r); - return c; - } - - @Override /* ReaderParser */ - protected Object[] doParseArgs(Reader in, int estimatedSize, ClassMeta<?>[] argTypes, ParserContext ctx) throws ParseException, IOException { - JsonParserContext jctx = (JsonParserContext)ctx; - ParserReader r = jctx.getReader(in, estimatedSize); - Object[] a = parseArgs(jctx, r, argTypes); - validateEnd(jctx, r); - return a; - } - - @Override /* Parser */ - public JsonParser setProperty(String property, Object value) throws LockedException { - checkLock(); - if (! jpp.setProperty(property, value)) - super.setProperty(property, value); - return this; - } - - @Override /* CoreApi */ - public JsonParser setProperties(ObjectMap properties) throws LockedException { - for (Map.Entry<String,Object> e : properties.entrySet()) - setProperty(e.getKey(), e.getValue()); - return this; - } - - @Override /* CoreApi */ - public JsonParser addNotBeanClasses(Class<?>...classes) throws LockedException { - super.addNotBeanClasses(classes); - return this; - } - - @Override /* CoreApi */ - public JsonParser addFilters(Class<?>...classes) throws LockedException { - super.addFilters(classes); - return this; - } - - @Override /* CoreApi */ - public <T> JsonParser addImplClass(Class<T> interfaceClass, Class<? extends T> implClass) throws LockedException { - super.addImplClass(interfaceClass, implClass); - return this; - } - - @Override /* CoreApi */ - public JsonParser setClassLoader(ClassLoader classLoader) throws LockedException { - super.setClassLoader(classLoader); - return this; - } - - @Override /* Lockable */ - public JsonParser lock() { - super.lock(); - return this; - } - - @Override /* Lockable */ - public JsonParser clone() { - try { - return (JsonParser)super.clone(); - } catch (CloneNotSupportedException e) { - throw new RuntimeException(e); // Shouldn't happen - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParserContext.class ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParserContext.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParserContext.class deleted file mode 100755 index b0e2e01..0000000 Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParserContext.class and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParserContext.java ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParserContext.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParserContext.java deleted file mode 100755 index 325169d..0000000 --- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParserContext.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Licensed Materials - Property of IBM - * (c) Copyright IBM Corporation 2014, 2015. All Rights Reserved. - * - * The source code for this program is not published or otherwise - * divested of its trade secrets, irrespective of what has been - * deposited with the U.S. Copyright Office. - *******************************************************************************/ -package com.ibm.juno.core.json; - -import static com.ibm.juno.core.json.JsonParserProperties.*; - -import java.io.*; -import java.lang.reflect.*; - -import com.ibm.juno.core.*; -import com.ibm.juno.core.parser.*; - -/** - * Context object that lives for the duration of a single parsing of {@link JsonParser}. - * <p> - * - * @author James Bognar ([email protected]) - */ -public final class JsonParserContext extends ParserContext { - - private final boolean strictMode; - - /** - * Create a new parser context with the specified options. - * - * @param beanContext The bean context being used. - * @param jpp The JSON parser properties. - * @param pp The default parser properties. - * @param op The override properties. - * @param javaMethod The java method that called this parser, usually the method in a REST servlet. - * @param outer The outer object for instantiating top-level non-static inner classes. - */ - public JsonParserContext(BeanContext beanContext, JsonParserProperties jpp, ParserProperties pp, ObjectMap op, Method javaMethod, Object outer) { - super(beanContext, pp, op, javaMethod, outer); - if (op == null || op.isEmpty()) { - strictMode = jpp.isStrictMode(); - } else { - strictMode = op.getBoolean(JSON_strictMode, jpp.isStrictMode()); - } - } - - /** - * Returns the {@link JsonParserProperties#JSON_strictMode} setting in this context. - * - * @return The {@link JsonParserProperties#JSON_strictMode} setting in this context. - */ - public boolean isStrictMode() { - return strictMode; - } - - /** - * Returns the reader associated with this context wrapped in a {@link ParserReader}. - * - * @param in The reader being wrapped. - * @param estimatedSize The estimated size of the input. - * @return The reader wrapped in a specialized parser reader. - */ - public ParserReader getReader(Reader in, int estimatedSize) { - if (in instanceof ParserReader) - return (ParserReader)in; - return new ParserReader(in, Math.min(8096, estimatedSize)); - } -} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParserProperties.class ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParserProperties.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParserProperties.class deleted file mode 100755 index 869515e..0000000 Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParserProperties.class and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParserProperties.java ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParserProperties.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParserProperties.java deleted file mode 100755 index ac1f632..0000000 --- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonParserProperties.java +++ /dev/null @@ -1,85 +0,0 @@ -/******************************************************************************* - * Licensed Materials - Property of IBM - * (c) Copyright IBM Corporation 2014, 2015. All Rights Reserved. - * - * The source code for this program is not published or otherwise - * divested of its trade secrets, irrespective of what has been - * deposited with the U.S. Copyright Office. - *******************************************************************************/ -package com.ibm.juno.core.json; - -import com.ibm.juno.core.*; -import com.ibm.juno.core.parser.*; - -/** - * Configurable properties on the {@link JsonParser} class. - * <p> - * Use the {@link JsonParser#setProperty(String, Object)} method to set property values. - * <p> - * In addition to these properties, the following properties are also applicable for {@link JsonParser}. - * <ul> - * <li>{@link ParserProperties} - * <li>{@link BeanContextProperties} - * </ul> - * - * @author James Bognar ([email protected]) - */ -public final class JsonParserProperties implements Cloneable { - - /** - * Set strict mode ({@link Boolean}, default=<jk>false</jk>). - * <p> - * When in strict mode, parser throws exceptions on the following invalid JSON syntax: - * <ul> - * <li>Unquoted attributes. - * <li>Missing attribute values. - * <li>Concatenated strings. - * <li>Javascript comments. - * <li>Numbers and booleans when Strings are expected. - * </ul> - */ - public static final String JSON_strictMode = "JsonParser.strictMode"; - - private boolean - strictMode = false; - - /** - * Sets the specified property value. - * - * @param property The property name. - * @param value The property value. - * @return <jk>true</jk> if property name was valid and property was set. - * @throws LockedException If the bean context has been locked. - */ - protected boolean setProperty(String property, Object value) throws LockedException { - BeanContext bc = BeanContext.DEFAULT; - if (property.equals(JSON_strictMode)) - strictMode = bc.convertToType(value, Boolean.class); - else - return false; - return true; - } - - /** - * Returns the current {@link #JSON_strictMode} value. - * - * @return The current {@link #JSON_strictMode} value. - */ - public boolean isStrictMode() { - return strictMode; - } - - - //-------------------------------------------------------------------------------- - // Overridden methods - //-------------------------------------------------------------------------------- - - @Override /* Object */ - public JsonParserProperties clone() { - try { - return (JsonParserProperties)super.clone(); - } catch (CloneNotSupportedException e) { - throw new RuntimeException(e); // Shouldn't happen. - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSchemaSerializer.class ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSchemaSerializer.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSchemaSerializer.class deleted file mode 100755 index 229102b..0000000 Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSchemaSerializer.class and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSchemaSerializer.java ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSchemaSerializer.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSchemaSerializer.java deleted file mode 100755 index fa0dae5..0000000 --- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSchemaSerializer.java +++ /dev/null @@ -1,154 +0,0 @@ -/******************************************************************************* - * Licensed Materials - Property of IBM - * (c) Copyright IBM Corporation 2011, 2015. All Rights Reserved. - * - * The source code for this program is not published or otherwise - * divested of its trade secrets, irrespective of what has been - * deposited with the U.S. Copyright Office. - *******************************************************************************/ -package com.ibm.juno.core.json; - -import static com.ibm.juno.core.serializer.SerializerProperties.*; -import static com.ibm.juno.core.utils.ClassUtils.*; - -import java.io.*; -import java.util.*; - -import com.ibm.juno.core.*; -import com.ibm.juno.core.annotation.*; -import com.ibm.juno.core.filter.*; -import com.ibm.juno.core.serializer.*; - -/** - * Serializes POJO metadata to HTTP responses as JSON. - * - * - * <h6 class='topic'>Media types</h6> - * <p> - * Handles <code>Accept</code> types: <code>application/json+schema, text/json+schema</code> - * <p> - * Produces <code>Content-Type</code> types: <code>application/json</code> - * - * - * <h6 class='topic'>Description</h6> - * <p> - * Produces the JSON-schema for the JSON produced by the {@link JsonSerializer} class with the same properties. - * - * - * @author James Bognar ([email protected]) - */ -@Produces(value={"application/json+schema","text/json+schema"},contentType="application/json") -public final class JsonSchemaSerializer extends JsonSerializer { - - /** - * Constructor. - */ - public JsonSchemaSerializer() { - setProperty(SERIALIZER_detectRecursions, true); - setProperty(SERIALIZER_ignoreRecursions, true); - } - - //-------------------------------------------------------------------------------- - // Overridden methods - //-------------------------------------------------------------------------------- - - @Override /* JsonSerializer */ - protected void doSerialize(Object o, Writer out, SerializerContext ctx) throws IOException, SerializeException { - JsonSerializerContext jctx = (JsonSerializerContext)ctx; - ObjectMap schema = getSchema(ctx.getBeanContext().getClassMetaForObject(o), jctx, "root", null); - serializeAnything(jctx.getWriter(out), schema, null, jctx, "root", null); - } - - /* - * Creates a schema representation of the specified class type. - * - * @param eType The class type to get the schema of. - * @param ctx Serialize context used to prevent infinite loops. - * @param attrName The name of the current attribute. - * @return A schema representation of the specified class. - * @throws SerializeException If a problem occurred trying to convert the output. - */ - @SuppressWarnings({ "unchecked", "rawtypes" }) - private ObjectMap getSchema(ClassMeta<?> eType, JsonSerializerContext ctx, String attrName, String[] pNames) throws SerializeException { - try { - - ObjectMap out = new ObjectMap(); - - if (eType == null) - eType = object(); - - ClassMeta<?> aType; // The actual type (will be null if recursion occurs) - ClassMeta<?> gType; // The generic type - - aType = ctx.push(attrName, eType, null); - - gType = eType.getFilteredClassMeta(); - String type = null; - - if (gType.isEnum() || gType.isCharSequence() || gType.isChar()) - type = "string"; - else if (gType.isNumber()) - type = "number"; - else if (gType.isBoolean()) - type = "boolean"; - else if (gType.isBean() || gType.isMap()) - type = "object"; - else if (gType.isCollection() || gType.isArray()) - type = "array"; - else - type = "any"; - - out.put("type", type); - out.put("description", eType.toString()); - PojoFilter f = eType.getPojoFilter(); - if (f != null) - out.put("filter", f); - - if (aType != null) { - if (gType.isEnum()) - out.put("enum", getEnumStrings((Class<Enum<?>>)gType.getInnerClass())); - else if (gType.isCollection() || gType.isArray()) { - ClassMeta componentType = gType.getElementType(); - if (gType.isCollection() && isParentClass(Set.class, gType.getInnerClass())) - out.put("uniqueItems", true); - out.put("items", getSchema(componentType, ctx, "items", pNames)); - } else if (gType.isBean()) { - ObjectMap properties = new ObjectMap(); - BeanMeta bm = ctx.getBeanContext().getBeanMeta(gType.getInnerClass()); - if (pNames != null) - bm = new BeanMetaFiltered(bm, pNames); - for (Iterator<BeanPropertyMeta<?>> i = bm.getPropertyMetas().iterator(); i.hasNext();) { - BeanPropertyMeta p = i.next(); - properties.put(p.getName(), getSchema(p.getClassMeta(), ctx, p.getName(), p.getProperties())); - } - out.put("properties", properties); - } - } - ctx.pop(); - return out; - } catch (StackOverflowError e) { - throw e; - } catch (Throwable e) { - throw new SerializeException("Exception occured trying to process object of type ''{0}''", eType).initCause(e); - } - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - private List<String> getEnumStrings(Class<? extends Enum> c) { - List<String> l = new LinkedList<String>(); - try { - for (Object e : EnumSet.allOf(c)) - l.add(e.toString()); - } catch (Exception e) { - e.printStackTrace(); - } - return l; - } - - - @Override /* Lockable */ - public JsonSchemaSerializer lock() { - super.lock(); - return this; - } -} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer$Readable.class ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer$Readable.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer$Readable.class deleted file mode 100755 index 5f79aa1..0000000 Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer$Readable.class and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer$Simple.class ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer$Simple.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer$Simple.class deleted file mode 100755 index 6ac8d7f..0000000 Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer$Simple.class and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer$SimpleReadable.class ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer$SimpleReadable.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer$SimpleReadable.class deleted file mode 100755 index 32b616d..0000000 Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer$SimpleReadable.class and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer$SimpleReadableSafe.class ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer$SimpleReadableSafe.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer$SimpleReadableSafe.class deleted file mode 100755 index 10df6c7..0000000 Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer$SimpleReadableSafe.class and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer.class ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer.class deleted file mode 100755 index c912a70..0000000 Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer.class and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer.java ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer.java deleted file mode 100755 index 275ea72..0000000 --- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializer.java +++ /dev/null @@ -1,457 +0,0 @@ -/******************************************************************************* - * Licensed Materials - Property of IBM - * (c) Copyright IBM Corporation 2011, 2015. All Rights Reserved. - * - * The source code for this program is not published or otherwise - * divested of its trade secrets, irrespective of what has been - * deposited with the U.S. Copyright Office. - *******************************************************************************/ -package com.ibm.juno.core.json; - -import static com.ibm.juno.core.json.JsonSerializerProperties.*; -import static com.ibm.juno.core.serializer.SerializerProperties.*; - -import java.io.*; -import java.lang.reflect.*; -import java.util.*; - -import com.ibm.juno.core.*; -import com.ibm.juno.core.annotation.*; -import com.ibm.juno.core.filter.*; -import com.ibm.juno.core.serializer.*; - -/** - * Serializes POJO models to JSON. - * - * - * <h6 class='topic'>Media types</h6> - * <p> - * Handles <code>Accept</code> types: <code>application/json, text/json</code> - * <p> - * Produces <code>Content-Type</code> types: <code>application/json</code> - * - * - * <h6 class='topic'>Description</h6> - * <p> - * The conversion is as follows... - * <ul> - * <li>Maps (e.g. {@link HashMap HashMaps}, {@link TreeMap TreeMaps}) are converted to JSON objects. - * <li>Collections (e.g. {@link HashSet HashSets}, {@link LinkedList LinkedLists}) and Java arrays are converted to JSON arrays. - * <li>{@link String Strings} are converted to JSON strings. - * <li>{@link Number Numbers} (e.g. {@link Integer}, {@link Long}, {@link Double}) are converted to JSON numbers. - * <li>{@link Boolean Booleans} are converted to JSON booleans. - * <li>{@code nulls} are converted to JSON nulls. - * <li>{@code arrays} are converted to JSON arrays. - * <li>{@code beans} are converted to JSON objects. - * </ul> - * <p> - * The types above are considered "JSON-primitive" object types. Any non-JSON-primitive object types are transformed - * into JSON-primitive object types through {@link com.ibm.juno.core.filter.Filter Filters} associated through the {@link BeanContextFactory#addFilters(Class...)} - * method. Several default filters are provided for transforming Dates, Enums, Iterators, etc... - * <p> - * This serializer provides several serialization options. Typically, one of the predefined DEFAULT serializers will be sufficient. - * However, custom serializers can be constructed to fine-tune behavior. - * - * - * <h6 class='topic'>Configurable properties</h6> - * <p> - * This class has the following properties associated with it: - * <ul> - * <li>{@link JsonSerializerProperties} - * <li>{@link SerializerProperties} - * <li>{@link BeanContextProperties} - * </ul> - * - * - * <h6 class='topic'>Behavior-specific subclasses</h6> - * <p> - * The following direct subclasses are provided for convenience: - * <ul> - * <li>{@link Simple} - Default serializer, single quotes, simple mode. - * <li>{@link SimpleReadable} - Default serializer, single quotes, simple mode, with whitespace. - * </ul> - * - * - * <h6 class='topic'>Examples</h6> - * <p class='bcode'> - * <jc>// Use one of the default serializers to serialize a POJO</jc> - * String json = JsonSerializer.<jsf>DEFAULT</jsf>.serialize(someObject); - * - * <jc>// Create a custom serializer for lax syntax using single quote characters</jc> - * JsonSerializer serializer = <jk>new</jk> JsonSerializer() - * .setProperty(JsonSerializerProperties.<jsf>JSON_simpleMode</jsf>, <jk>true</jk>) - * .setProperty(SerializerProperties.<jsf>SERIALIZER_quoteChar</jsf>, <js>'\''</js>); - * - * <jc>// Clone an existing serializer and modify it to use single-quotes</jc> - * JsonSerializer serializer = JsonSerializer.<jsf>DEFAULT</jsf>.clone() - * .setProperty(SerializerProperties.<jsf>SERIALIZER_quoteChar</jsf>, <js>'\''</js>); - * - * <jc>// Serialize a POJO to JSON</jc> - * String json = serializer.serialize(someObject); - * </p> - * - * - * @author James Bognar ([email protected]) - */ -@Produces({"application/json","text/json"}) -public class JsonSerializer extends WriterSerializer { - - /** Default serializer, all default settings.*/ - public static final JsonSerializer DEFAULT = new JsonSerializer().lock(); - - /** Default serializer, all default settings.*/ - public static final JsonSerializer DEFAULT_READABLE = new Readable().lock(); - - /** Default serializer, single quotes, simple mode. */ - public static final JsonSerializer DEFAULT_LAX = new Simple().lock(); - - /** Default serializer, single quotes, simple mode, with whitespace. */ - public static final JsonSerializer DEFAULT_LAX_READABLE = new SimpleReadable().lock(); - - /** - * Default serializer, single quotes, simple mode, with whitespace and recursion detection. - * Note that recursion detection introduces a small performance penalty. - */ - public static final JsonSerializer DEFAULT_LAX_READABLE_SAFE = new SimpleReadableSafe().lock(); - - /** Default serializer, with whitespace. */ - public static class Readable extends JsonSerializer { - /** Constructor */ - public Readable() { - setProperty(JSON_useWhitespace, true); - setProperty(SERIALIZER_useIndentation, true); - } - } - - /** Default serializer, single quotes, simple mode. */ - @Produces(value={"application/json+simple","text/json+simple"},contentType="application/json") - public static class Simple extends JsonSerializer { - /** Constructor */ - public Simple() { - setProperty(JSON_simpleMode, true); - setProperty(SERIALIZER_quoteChar, '\''); - } - } - - /** Default serializer, single quotes, simple mode, with whitespace. */ - public static class SimpleReadable extends Simple { - /** Constructor */ - public SimpleReadable() { - setProperty(JSON_useWhitespace, true); - setProperty(SERIALIZER_useIndentation, true); - } - } - - /** - * Default serializer, single quotes, simple mode, with whitespace and recursion detection. - * Note that recursion detection introduces a small performance penalty. - */ - public static class SimpleReadableSafe extends SimpleReadable { - /** Constructor */ - public SimpleReadableSafe() { - setProperty(SERIALIZER_detectRecursions, true); - } - } - - /** JSON serializer properties currently set on this serializer. */ - protected transient JsonSerializerProperties jsp = new JsonSerializerProperties(); - - - /** - * Workhorse method. Determines the type of object, and then calls the - * appropriate type-specific serialization method. - */ - @SuppressWarnings({ "rawtypes", "unchecked" }) - SerializerWriter serializeAnything(JsonSerializerWriter out, Object o, ClassMeta<?> eType, JsonSerializerContext ctx, String attrName, BeanPropertyMeta pMeta) throws SerializeException { - try { - BeanContext bc = ctx.getBeanContext(); - - if (o == null) { - out.append("null"); - return out; - } - - if (eType == null) - eType = object(); - - boolean addClassAttr; // Add "_class" attribute to element? - ClassMeta<?> aType; // The actual type - ClassMeta<?> gType; // The generic type - - aType = ctx.push(attrName, o, eType); - boolean isRecursion = aType == null; - - // Handle recursion - if (aType == null) { - o = null; - aType = object(); - } - - gType = aType.getFilteredClassMeta(); - addClassAttr = (ctx.isAddClassAttrs() && ! eType.equals(aType)); - - // Filter if necessary - PojoFilter filter = aType.getPojoFilter(); // The filter - if (filter != null) { - o = filter.filter(o); - - // If the filter's getFilteredClass() method returns Object, we need to figure out - // the actual type now. - if (gType.isObject()) - gType = bc.getClassMetaForObject(o); - } - - String wrapperAttr = gType.getJsonMeta().getWrapperAttr(); - if (wrapperAttr != null) { - out.append('{').cr(ctx.indent).attr(wrapperAttr).append(':').s(); - ctx.indent++; - } - - // '\0' characters are considered null. - if (o == null || (gType.isChar() && ((Character)o).charValue() == 0)) - out.append("null"); - else if (gType.isNumber() || gType.isBoolean()) - out.append(o); - else if (gType.hasToObjectMapMethod()) - serializeMap(out, gType.toObjectMap(o), gType, ctx); - else if (gType.isBean()) - serializeBeanMap(out, bc.forBean(o), addClassAttr, ctx); - else if (gType.isUri() || (pMeta != null && (pMeta.isUri() || pMeta.isBeanUri()))) - out.q().appendUri(o).q(); - else if (gType.isMap()) { - if (o instanceof BeanMap) - serializeBeanMap(out, (BeanMap)o, addClassAttr, ctx); - else - serializeMap(out, (Map)o, eType, ctx); - } - else if (gType.isCollection()) { - if (addClassAttr) - serializeCollectionMap(out, (Collection)o, gType, ctx); - else - serializeCollection(out, (Collection) o, eType, ctx); - } - else if (gType.isArray()) { - if (addClassAttr) - serializeCollectionMap(out, toList(gType.getInnerClass(), o), gType, ctx); - else - serializeCollection(out, toList(gType.getInnerClass(), o), eType, ctx); - } - else - out.stringValue(o); - - if (wrapperAttr != null) { - ctx.indent--; - out.cr(ctx.indent-1).append('}'); - } - - if (! isRecursion) - ctx.pop(); - return out; - } catch (SerializeException e) { - throw e; - } catch (StackOverflowError e) { - throw e; - } catch (Throwable e) { - throw new SerializeException("Exception occured trying to process object of type ''{0}''", (o == null ? null : o.getClass().getName())).initCause(e); - } - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - private SerializerWriter serializeMap(JsonSerializerWriter out, Map m, ClassMeta<?> type, JsonSerializerContext ctx) throws IOException, SerializeException { - - ClassMeta<?> keyType = type.getKeyType(), valueType = type.getValueType(); - - m = sort(ctx, m); - - int depth = ctx.getIndent(); - out.append('{'); - - Iterator mapEntries = m.entrySet().iterator(); - - while (mapEntries.hasNext()) { - Map.Entry e = (Map.Entry) mapEntries.next(); - Object value = e.getValue(); - - Object key = generalize(ctx, e.getKey(), keyType); - - out.cr(depth).attr(key).append(':').s(); - - serializeAnything(out, value, valueType, ctx, (key == null ? null : key.toString()), null); - - if (mapEntries.hasNext()) - out.append(',').s(); - } - - out.cr(depth-1).append('}'); - - return out; - } - - @SuppressWarnings({ "rawtypes" }) - private SerializerWriter serializeCollectionMap(JsonSerializerWriter out, Collection o, ClassMeta<?> type, JsonSerializerContext ctx) throws IOException, SerializeException { - int i = ctx.getIndent(); - out.append('{'); - out.cr(i).attr("_class").append(':').s().q().append(type.getInnerClass().getName()).q().append(',').s(); - out.cr(i).attr("items").append(':').s(); - ctx.indent++; - serializeCollection(out, o, type, ctx); - ctx.indent--; - out.cr(i-1).append('}'); - return out; - } - - @SuppressWarnings({ "rawtypes" }) - private SerializerWriter serializeBeanMap(JsonSerializerWriter out, BeanMap m, boolean addClassAttr, JsonSerializerContext ctx) throws IOException, SerializeException { - int depth = ctx.getIndent(); - out.append('{'); - - Iterator mapEntries = m.entrySet().iterator(); - - // Print out "_class" attribute on this bean if required. - if (addClassAttr) { - String attr = "_class"; - out.cr(depth).attr(attr).append(':').s().q().append(m.getClassMeta().getInnerClass().getName()).q(); - if (mapEntries.hasNext()) - out.append(',').s(); - } - - boolean addComma = false; - - while (mapEntries.hasNext()) { - BeanMapEntry p = (BeanMapEntry)mapEntries.next(); - BeanPropertyMeta pMeta = p.getMeta(); - - String key = p.getKey(); - Object value = null; - try { - value = p.getValue(); - } catch (StackOverflowError e) { - throw e; - } catch (Throwable t) { - ctx.addBeanGetterWarning(pMeta, t); - } - - if (canIgnoreValue(ctx, pMeta.getClassMeta(), key, value)) - continue; - - if (addComma) - out.append(',').s(); - - out.cr(depth).attr(key).append(':').s(); - - serializeAnything(out, value, pMeta.getClassMeta(), ctx, key, pMeta); - - addComma = true; - } - out.cr(depth-1).append('}'); - return out; - } - - @SuppressWarnings({"rawtypes", "unchecked"}) - private SerializerWriter serializeCollection(JsonSerializerWriter out, Collection c, ClassMeta<?> type, JsonSerializerContext ctx) throws IOException, SerializeException { - - ClassMeta<?> elementType = type.getElementType(); - - c = sort(ctx, c); - - out.append('['); - int depth = ctx.getIndent(); - - for (Iterator i = c.iterator(); i.hasNext();) { - - Object value = i.next(); - - out.cr(depth); - - serializeAnything(out, value, elementType, ctx, "<iterator>", null); - - if (i.hasNext()) - out.append(',').s(); - } - out.cr(depth-1).append(']'); - return out; - } - - /** - * Returns the schema serializer based on the settings of this serializer. - * @return The schema serializer. - */ - public JsonSchemaSerializer getSchemaSerializer() { - JsonSchemaSerializer s = new JsonSchemaSerializer(); - s.beanContextFactory = this.beanContextFactory; - s.sp = this.sp; - s.jsp = this.jsp; - return s; - } - - //-------------------------------------------------------------------------------- - // Overridden methods - //-------------------------------------------------------------------------------- - - @Override /* Serializer */ - public JsonSerializerContext createContext(ObjectMap properties, Method javaMethod) { - return new JsonSerializerContext(getBeanContext(), sp, jsp, properties, javaMethod); - } - - @Override /* Serializer */ - protected void doSerialize(Object o, Writer out, SerializerContext ctx) throws IOException, SerializeException { - JsonSerializerContext jctx = (JsonSerializerContext)ctx; - serializeAnything(jctx.getWriter(out), o, null, jctx, "root", null); - } - - @Override /* CoreApi */ - public JsonSerializer setProperty(String property, Object value) throws LockedException { - checkLock(); - if (! jsp.setProperty(property, value)) - super.setProperty(property, value); - return this; - } - - @Override /* CoreApi */ - public JsonSerializer setProperties(ObjectMap properties) throws LockedException { - for (Map.Entry<String,Object> e : properties.entrySet()) - setProperty(e.getKey(), e.getValue()); - return this; - } - - @Override /* CoreApi */ - public JsonSerializer addNotBeanClasses(Class<?>...classes) throws LockedException { - super.addNotBeanClasses(classes); - return this; - } - - @Override /* CoreApi */ - public JsonSerializer addFilters(Class<?>...classes) throws LockedException { - super.addFilters(classes); - return this; - } - - @Override /* CoreApi */ - public <T> JsonSerializer addImplClass(Class<T> interfaceClass, Class<? extends T> implClass) throws LockedException { - super.addImplClass(interfaceClass, implClass); - return this; - } - - @Override /* CoreApi */ - public JsonSerializer setClassLoader(ClassLoader classLoader) throws LockedException { - super.setClassLoader(classLoader); - return this; - } - - @Override /* Lockable */ - public JsonSerializer lock() { - super.lock(); - return this; - } - - @Override /* Lockable */ - public JsonSerializer clone() { - try { - JsonSerializer c = (JsonSerializer)super.clone(); - c.jsp = jsp.clone(); - return c; - } catch (CloneNotSupportedException e) { - throw new RuntimeException(e); // Shouldn't happen - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerContext.class ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerContext.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerContext.class deleted file mode 100755 index 27e8527..0000000 Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerContext.class and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerContext.java ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerContext.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerContext.java deleted file mode 100755 index 0677055..0000000 --- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerContext.java +++ /dev/null @@ -1,89 +0,0 @@ -/******************************************************************************* - * Licensed Materials - Property of IBM - * (c) Copyright IBM Corporation 2014, 2015. All Rights Reserved. - * - * The source code for this program is not published or otherwise - * divested of its trade secrets, irrespective of what has been - * deposited with the U.S. Copyright Office. - *******************************************************************************/ -package com.ibm.juno.core.json; - -import static com.ibm.juno.core.json.JsonSerializerProperties.*; - -import java.io.*; -import java.lang.reflect.*; - -import com.ibm.juno.core.*; -import com.ibm.juno.core.serializer.*; - -/** - * Context object that lives for the duration of a single serialization of {@link JsonSerializer} and its subclasses. - * <p> - * See {@link SerializerContext} for details. - * - * @author James Bognar ([email protected]) - */ -public final class JsonSerializerContext extends SerializerContext { - - private final boolean simpleMode, useWhitespace, escapeSolidus; - - /** - * Constructor. - * @param beanContext The bean context being used by the serializer. - * @param sp Default general serializer properties. - * @param jsp Default JSON serializer properties. - * @param op Override properties. - * @param javaMethod Java method that invoked this serializer. - * When using the REST API, this is the Java method invoked by the REST call. - * Can be used to access annotations defined on the method or class. - */ - protected JsonSerializerContext(BeanContext beanContext, SerializerProperties sp, JsonSerializerProperties jsp, ObjectMap op, Method javaMethod) { - super(beanContext, sp, op, javaMethod); - if (op == null || op.isEmpty()) { - simpleMode = jsp.simpleMode; - useWhitespace = jsp.useWhitespace; - escapeSolidus = jsp.escapeSolidus; - } else { - simpleMode = op.getBoolean(JSON_simpleMode, jsp.simpleMode); - useWhitespace = op.getBoolean(JSON_useWhitespace, jsp.useWhitespace); - escapeSolidus = op.getBoolean(JSON_escapeSolidus, jsp.escapeSolidus); - } - } - - /** - * Returns the {@link JsonSerializerProperties#JSON_simpleMode} setting value in this context. - * @return The {@link JsonSerializerProperties#JSON_simpleMode} setting value in this context. - */ - public final boolean isSimpleMode() { - return simpleMode; - } - - /** - * Returns the {@link JsonSerializerProperties#JSON_useWhitespace} setting value in this context. - * @return The {@link JsonSerializerProperties#JSON_useWhitespace} setting value in this context. - */ - public final boolean isUseWhitespace() { - return useWhitespace; - } - - /** - * Returns the {@link JsonSerializerProperties#JSON_escapeSolidus} setting value in this context. - * @return The {@link JsonSerializerProperties#JSON_escapeSolidus} setting value in this context. - */ - public final boolean isEscapeSolidus() { - return escapeSolidus; - } - - /** - * Wraps the specified writer inside a {@link JsonSerializerWriter}. - * - * @param out The writer being wrapped. - * @return The wrapped writer. - */ - public JsonSerializerWriter getWriter(Writer out) { - if (out instanceof JsonSerializerWriter) - return (JsonSerializerWriter)out; - return new JsonSerializerWriter(out, isUseIndentation(), isUseWhitespace(), isEscapeSolidus(), getQuoteChar(), isSimpleMode(), getRelativeUriBase(), getAbsolutePathUriBase()); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerProperties.class ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerProperties.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerProperties.class deleted file mode 100755 index bdc0ee0..0000000 Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerProperties.class and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerProperties.java ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerProperties.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerProperties.java deleted file mode 100755 index 8c4e8bf..0000000 --- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerProperties.java +++ /dev/null @@ -1,91 +0,0 @@ -/******************************************************************************* - * Licensed Materials - Property of IBM - * (c) Copyright IBM Corporation 2014, 2015. All Rights Reserved. - * - * The source code for this program is not published or otherwise - * divested of its trade secrets, irrespective of what has been - * deposited with the U.S. Copyright Office. - *******************************************************************************/ -package com.ibm.juno.core.json; - -import com.ibm.juno.core.*; -import com.ibm.juno.core.serializer.*; - -/** - * Configurable properties on the {@link JsonSerializer} class. - * <p> - * Use the {@link JsonSerializer#setProperty(String, Object)} method to set property values. - * <p> - * In addition to these properties, the following properties are also applicable for {@link JsonSerializer}. - * <ul> - * <li>{@link SerializerProperties} - * <li>{@link BeanContextProperties} - * </ul> - * - * @author James Bognar ([email protected]) - */ -public final class JsonSerializerProperties implements Cloneable { - - /** - * Simple JSON mode ({@link Boolean}, default=<jk>false</jk>). - * <p> - * If <jk>true</jk>, JSON attribute names will only be quoted when necessary. - * Otherwise, they are always quoted. - */ - public static final String JSON_simpleMode = "JsonSerializer.simpleMode"; - - /** - * Use whitespace in output ({@link Boolean}, default=<jk>false</jk>). - * <p> - * If <jk>true</jk>, whitespace is added to the output to improve readability. - */ - public static final String JSON_useWhitespace = "JsonSerializer.useWhitespace"; - - /** - * Prefix solidus <js>'/'</js> characters with escapes ({@link Boolean}, default=<jk>false</jk>). - * <p> - * If <jk>true</jk>, solidus (e.g. slash) characters should be escaped. - * The JSON specification allows for either format. - * However, if you're embedding JSON in an HTML script tag, this setting prevents - * confusion when trying to serialize <xt><\/script></xt>. - */ - public static final String JSON_escapeSolidus = "JsonSerializer.escapeSolidus"; - - boolean - simpleMode = false, - useWhitespace = false, - escapeSolidus = false; - - /** - * Sets the specified property value. - * @param property The property name. - * @param value The property value. - * @return <jk>true</jk> if property name was valid and property was set. - */ - public boolean setProperty(String property, Object value) { - BeanContext bc = BeanContext.DEFAULT; - if (property.equals(JSON_simpleMode)) - simpleMode = bc.convertToType(value, Boolean.class); - else if (property.equals(JSON_useWhitespace)) - useWhitespace = bc.convertToType(value, Boolean.class); - else if (property.equals(JSON_escapeSolidus)) - escapeSolidus = bc.convertToType(value, Boolean.class); - else - return false; - return true; - } - - - //-------------------------------------------------------------------------------- - // Overridden methods - //-------------------------------------------------------------------------------- - - @Override /* Cloneable */ - public JsonSerializerProperties clone() { - try { - return (JsonSerializerProperties)super.clone(); - } catch (CloneNotSupportedException e) { - throw new RuntimeException(e); // Shouldn't happen - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerWriter.class ---------------------------------------------------------------------- diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerWriter.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerWriter.class deleted file mode 100755 index 828cea2..0000000 Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/json/JsonSerializerWriter.class and /dev/null differ
