Index: trunk/src/javax/json/EmptyArray.java
===================================================================
--- trunk/src/javax/json/EmptyArray.java	(revision 16017)
+++ 	(revision )
@@ -1,136 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-package javax.json;
-
-import java.io.Serializable;
-import java.util.AbstractList;
-import java.util.Collections;
-import java.util.List;
-import java.util.RandomAccess;
-
-/**
- * Private implementation of immutable {@link JsonArray}.
- *
- * @author Lukas Jungmann
- */
-final class EmptyArray extends AbstractList<JsonValue> implements JsonArray, Serializable, RandomAccess {
-
-    private static final long serialVersionUID = 7295439472061642859L;
-
-    @Override
-    public JsonValue get(int index) {
-        throw new IndexOutOfBoundsException("Index: " + index);
-    }
-
-    @Override
-    public int size() {
-        return 0;
-    }
-
-    @Override
-    public JsonObject getJsonObject(int index) {
-        return (JsonObject) get(index);
-    }
-
-    @Override
-    public JsonArray getJsonArray(int index) {
-        return (JsonArray) get(index);
-    }
-
-    @Override
-    public JsonNumber getJsonNumber(int index) {
-        return (JsonNumber) get(index);
-    }
-
-    @Override
-    public JsonString getJsonString(int index) {
-        return (JsonString) get(index);
-    }
-
-    @Override
-    public <T extends JsonValue> List<T> getValuesAs(Class<T> clazz) {
-        return Collections.emptyList();
-    }
-
-    @Override
-    public String getString(int index) {
-        return getJsonString(index).getString();
-    }
-
-    @Override
-    public String getString(int index, String defaultValue) {
-        return defaultValue;
-    }
-
-    @Override
-    public int getInt(int index) {
-        return getJsonNumber(index).intValue();
-    }
-
-    @Override
-    public int getInt(int index, int defaultValue) {
-        return defaultValue;
-    }
-
-    @Override
-    public boolean getBoolean(int index) {
-        return get(index) == JsonValue.TRUE;
-    }
-
-    @Override
-    public boolean getBoolean(int index, boolean defaultValue) {
-        return defaultValue;
-    }
-
-    @Override
-    public boolean isNull(int index) {
-        return get(index) == JsonValue.NULL;
-    }
-
-    @Override
-    public ValueType getValueType() {
-        return ValueType.ARRAY;
-    }
-
-    // Preserves singleton property
-    private Object readResolve() {
-        return JsonValue.EMPTY_JSON_ARRAY;
-    }
-}
Index: trunk/src/javax/json/EmptyObject.java
===================================================================
--- trunk/src/javax/json/EmptyObject.java	(revision 16017)
+++ 	(revision )
@@ -1,126 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.io.Serializable;
-import java.util.AbstractMap;
-import java.util.Collections;
-import java.util.Set;
-
-/**
- * Private implementation of immutable {@link JsonObject}.
- *
- * @author Lukas Jungmann
- */
-final class EmptyObject extends AbstractMap<String, JsonValue> implements JsonObject, Serializable {
-
-    private static final long serialVersionUID = -1461653546889072583L;
-
-    @Override
-    public Set<Entry<String, JsonValue>> entrySet() {
-        return Collections.<Entry<String, JsonValue>>emptySet();
-    }
-
-    @Override
-    public JsonArray getJsonArray(String name) {
-        return (JsonArray) get(name);
-    }
-
-    @Override
-    public JsonObject getJsonObject(String name) {
-        return (JsonObject) get(name);
-    }
-
-    @Override
-    public JsonNumber getJsonNumber(String name) {
-        return (JsonNumber) get(name);
-    }
-
-    @Override
-    public JsonString getJsonString(String name) {
-        return (JsonString) get(name);
-    }
-
-    @Override
-    public String getString(String name) {
-        return getJsonString(name).getString();
-    }
-
-    @Override
-    public String getString(String name, String defaultValue) {
-        return defaultValue;
-    }
-
-    @Override
-    public int getInt(String name) {
-        return getJsonNumber(name).intValue();
-    }
-
-    @Override
-    public int getInt(String name, int defaultValue) {
-        return defaultValue;
-    }
-
-    @Override
-    public boolean getBoolean(String name) {
-        throw new NullPointerException();
-    }
-
-    @Override
-    public boolean getBoolean(String name, boolean defaultValue) {
-        return defaultValue;
-    }
-
-    @Override
-    public boolean isNull(String name) {
-        throw new NullPointerException();
-    }
-
-    @Override
-    public ValueType getValueType() {
-        return ValueType.OBJECT;
-    }
-
-    // Preserves singleton property
-    private Object readResolve() {
-        return JsonValue.EMPTY_JSON_OBJECT;
-    }
-}
Index: trunk/src/javax/json/Json.java
===================================================================
--- trunk/src/javax/json/Json.java	(revision 16017)
+++ 	(revision )
@@ -1,544 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.io.Writer;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Optional;
-import javax.json.spi.JsonProvider;
-import javax.json.stream.JsonGenerator;
-import javax.json.stream.JsonGeneratorFactory;
-import javax.json.stream.JsonParser;
-import javax.json.stream.JsonParserFactory;
-
-/**
- * Factory class for creating JSON processing objects.
- * This class provides the most commonly used methods for creating these
- * objects and their corresponding factories. The factory classes provide
- * all the various ways to create these objects.
- *
- * <p>
- * The methods in this class locate a provider instance using the method
- * {@link JsonProvider#provider()}. This class uses the provider instance
- * to create JSON processing objects.
- *
- * <p>
- * The following example shows how to create a JSON parser to parse
- * an empty array:
- * <pre>
- * <code>
- * StringReader reader = new StringReader("[]");
- * JsonParser parser = Json.createParser(reader);
- * </code>
- * </pre>
- *
- * <p>
- * All the methods in this class are safe for use by multiple concurrent
- * threads.
- */
-public final class Json {
-
-    private Json() {
-    }
-
-    /**
-     * Creates a JSON parser from a character stream.
-     *
-     * @param reader i/o reader from which JSON is to be read
-     * @return a JSON parser
-     */
-    public static JsonParser createParser(Reader reader) {
-        return JsonProvider.provider().createParser(reader);
-    }
-
-    /**
-     * Creates a JSON parser from a byte stream.
-     * The character encoding of the stream is determined as specified in
-     * <a href="http://tools.ietf.org/rfc/rfc7159.txt">RFC 7159</a>.
-     *
-     * @param in i/o stream from which JSON is to be read
-     * @throws JsonException if encoding cannot be determined
-     *         or i/o error (IOException would be cause of JsonException)
-     * @return a JSON parser
-     */
-    public static JsonParser createParser(InputStream in) {
-        return JsonProvider.provider().createParser(in);
-    }
-
-    /**
-     * Creates a JSON generator for writing JSON to a character stream.
-     *
-     * @param writer a i/o writer to which JSON is written
-     * @return a JSON generator
-     */
-    public static JsonGenerator createGenerator(Writer writer) {
-        return JsonProvider.provider().createGenerator(writer);
-    }
-
-    /**
-     * Creates a JSON generator for writing JSON to a byte stream.
-     *
-     * @param out i/o stream to which JSON is written
-     * @return a JSON generator
-     */
-    public static JsonGenerator createGenerator(OutputStream out) {
-        return JsonProvider.provider().createGenerator(out);
-    }
-
-    /**
-     * Creates a parser factory for creating {@link JsonParser} objects.
-     *
-     * @return JSON parser factory.
-     *
-    public static JsonParserFactory createParserFactory() {
-        return JsonProvider.provider().createParserFactory();
-    }
-     */
-
-    /**
-     * Creates a parser factory for creating {@link JsonParser} objects.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should ignore any
-     * unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON parsers. The map may be empty or null
-     * @return JSON parser factory
-     */
-    public static JsonParserFactory createParserFactory(Map<String, ?> config) {
-        return JsonProvider.provider().createParserFactory(config);
-    }
-
-    /**
-     * Creates a generator factory for creating {@link JsonGenerator} objects.
-     *
-     * @return JSON generator factory
-     *
-    public static JsonGeneratorFactory createGeneratorFactory() {
-        return JsonProvider.provider().createGeneratorFactory();
-    }
-    */
-
-    /**
-     * Creates a generator factory for creating {@link JsonGenerator} objects.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should ignore any
-     * unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON generators. The map may be empty or null
-     * @return JSON generator factory
-     */
-    public static JsonGeneratorFactory createGeneratorFactory(
-            Map<String, ?> config) {
-        return JsonProvider.provider().createGeneratorFactory(config);
-    }
-
-    /**
-     * Creates a JSON writer to write a
-     * JSON {@link JsonObject object} or {@link JsonArray array}
-     * structure to the specified character stream.
-     *
-     * @param writer to which JSON object or array is written
-     * @return a JSON writer
-     */
-    public static JsonWriter createWriter(Writer writer) {
-        return JsonProvider.provider().createWriter(writer);
-    }
-
-    /**
-     * Creates a JSON writer to write a
-     * JSON {@link JsonObject object} or {@link JsonArray array}
-     * structure to the specified byte stream. Characters written to
-     * the stream are encoded into bytes using UTF-8 encoding.
-     *
-     * @param out to which JSON object or array is written
-     * @return a JSON writer
-     */
-    public static JsonWriter createWriter(OutputStream out) {
-        return JsonProvider.provider().createWriter(out);
-    }
-
-    /**
-     * Creates a JSON reader from a character stream.
-     *
-     * @param reader a reader from which JSON is to be read
-     * @return a JSON reader
-     */
-    public static JsonReader createReader(Reader reader) {
-        return JsonProvider.provider().createReader(reader);
-    }
-
-    /**
-     * Creates a JSON reader from a byte stream. The character encoding of
-     * the stream is determined as described in
-     * <a href="http://tools.ietf.org/rfc/rfc7159.txt">RFC 7159</a>.
-     *
-     * @param in a byte stream from which JSON is to be read
-     * @return a JSON reader
-     */
-    public static JsonReader createReader(InputStream in) {
-        return JsonProvider.provider().createReader(in);
-    }
-
-    /**
-     * Creates a reader factory for creating {@link JsonReader} objects.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should ignore any
-     * unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON readers. The map may be empty or null
-     * @return a JSON reader factory
-     */
-    public static JsonReaderFactory createReaderFactory(Map<String, ?> config) {
-        return JsonProvider.provider().createReaderFactory(config);
-    }
-
-    /**
-     * Creates a writer factory for creating {@link JsonWriter} objects.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should ignore any
-     * unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON writers. The map may be empty or null
-     * @return a JSON writer factory
-     */
-    public static JsonWriterFactory createWriterFactory(Map<String, ?> config) {
-        return JsonProvider.provider().createWriterFactory(config);
-    }
-
-    /**
-     * Creates a JSON array builder
-     *
-     * @return a JSON array builder
-     */
-    public static JsonArrayBuilder createArrayBuilder() {
-        return JsonProvider.provider().createArrayBuilder();
-    }
-
-    /**
-     * Creates a JSON array builder, initialized with the specified array
-     *
-     * @param array the initial array in the builder
-     * @return a JSON array builder
-     *
-     * @since 1.1
-     */
-    public static JsonArrayBuilder createArrayBuilder(JsonArray array) {
-        return JsonProvider.provider().createArrayBuilder(array);
-    }
-
-    /**
-     * Creates a JSON array builder, initialized with the content of specified {@code collection}.
-     * If the @{code collection} contains {@link Optional}s then resulting JSON array builder
-     * contains the value from the {@code collection} only if the {@link Optional} is not empty.
-     *
-     * @param collection the initial data for the builder
-     * @return a JSON array builder
-     * @exception IllegalArgumentException if the value from the {@code collection} cannot be converted
-     *            to the corresponding {@link JsonValue}
-     *
-     * @since 1.1
-     */
-    public static JsonArrayBuilder createArrayBuilder(Collection<?> collection) {
-        return JsonProvider.provider().createArrayBuilder(collection);
-    }
-
-    /**
-     * Creates a JSON object builder
-     *
-     * @return a JSON object builder
-     */
-    public static JsonObjectBuilder createObjectBuilder() {
-        return JsonProvider.provider().createObjectBuilder();
-    }
-
-    /**
-     * Creates a JSON object builder, initialized with the specified object.
-     *
-     * @param object the initial object in the builder
-     * @return a JSON object builder
-     *
-     * @since 1.1
-     */
-    public static JsonObjectBuilder createObjectBuilder(JsonObject object) {
-        return JsonProvider.provider().createObjectBuilder(object);
-    }
-
-    /**
-     * Creates a JSON object builder, initialized with the data from specified {@code map}.
-     * If the @{code map} contains {@link Optional}s then resulting JSON object builder
-     * contains the key from the {@code map} only if the {@link Optional} is not empty.
-     *
-     * @param map the initial object in the builder
-     * @return a JSON object builder
-     * @exception IllegalArgumentException if the value from the {@code map} cannot be converted
-     *            to the corresponding {@link JsonValue}
-     *
-     * @since 1.1
-     */
-    public static JsonObjectBuilder createObjectBuilder(Map<String, Object> map) {
-        return JsonProvider.provider().createObjectBuilder(map);
-    }
-
-    /**
-     * Creates JSON Pointer (<a href="http://tools.ietf.org/html/rfc6901">RFC 6901</a>)
-     * from given {@code jsonPointer} string.
-     * <ul>
-     *     <li>An empty {@code jsonPointer} string defines a reference to the target itself.</li>
-     *     <li>If the {@code jsonPointer} string is non-empty, it must be a sequence of '{@code /}' prefixed tokens.</li>
-     * </ul>
-     *
-     * @param jsonPointer the valid escaped JSON Pointer string
-     * @throws NullPointerException if {@code jsonPointer} is {@code null}
-     * @throws JsonException if {@code jsonPointer} is not a valid JSON Pointer
-     * @return a JSON Pointer
-     *
-     * @since 1.1
-     */
-    public static JsonPointer createPointer(String jsonPointer) {
-        return JsonProvider.provider().createPointer(jsonPointer);
-    }
-
-    /**
-     * Creates a JSON Patch builder (<a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>).
-     *
-     * @return a JSON Patch builder
-     *
-     * @since 1.1
-     */
-    public static JsonPatchBuilder createPatchBuilder() {
-        return JsonProvider.provider().createPatchBuilder();
-    }
-
-    /**
-     * Creates a JSON Patch builder
-     * (<a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>),
-     * initialized with the specified operations.
-     *
-     * @param array the initial patch operations
-     * @return a JSON Patch builder
-     *
-     * @since 1.1
-     */
-    public static JsonPatchBuilder createPatchBuilder(JsonArray array) {
-        return JsonProvider.provider().createPatchBuilder(array);
-    }
-
-    /**
-     * Creates a JSON Patch (<a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>)
-     * from the specified operations.
-     *
-     * @param array patch operations
-     * @return a JSON Patch
-     *
-     * @since 1.1
-     */
-    public static JsonPatch createPatch(JsonArray array) {
-        return JsonProvider.provider().createPatch(array);
-    }
-
-    /**
-     * Generates a JSON Patch (<a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>)
-     * from the source and target {@code JsonStructure}.
-     * The generated JSON Patch need not be unique.
-     *
-     * @param source the source
-     * @param target the target, must be the same type as the source
-     * @return a JSON Patch which when applied to the source, yields the target
-     *
-     * @since 1.1
-     */
-    public static JsonPatch createDiff(JsonStructure source, JsonStructure target) {
-        return JsonProvider.provider().createDiff(source, target);
-    }
-
-    /**
-     * Creates JSON Merge Patch (<a href="http://tools.ietf.org/html/rfc7396">RFC 7396</a>)
-     * from specified {@code JsonValue}.
-     *
-     * @param patch the patch
-     * @return a JSON Merge Patch
-     *
-     * @since 1.1
-     */
-    public static JsonMergePatch createMergePatch(JsonValue patch) {
-        return JsonProvider.provider().createMergePatch(patch);
-    }
-
-    /**
-     * Generates a JSON Merge Patch (<a href="http://tools.ietf.org/html/rfc7396">RFC 7396</a>)
-     * from the source and target {@code JsonValue}s
-     * which when applied to the {@code source}, yields the {@code target}.
-     *
-     * @param source the source
-     * @param target the target
-     * @return a JSON Merge Patch
-     *
-     * @since 1.1
-     */
-    public static JsonMergePatch createMergeDiff(JsonValue source, JsonValue target) {
-        return JsonProvider.provider().createMergeDiff(source, target);
-    }
-
-    /**
-     * Creates a builder factory for creating {@link JsonArrayBuilder}
-     * and {@link JsonObjectBuilder} objects.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should ignore any
-     * unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON builders. The map may be empty or null
-     * @return a JSON builder factory
-     */
-    public static JsonBuilderFactory createBuilderFactory(
-            Map<String, ?> config) {
-        return JsonProvider.provider().createBuilderFactory(config);
-    }
-
-    /**
-     * Creates a JsonString.
-     *
-     * @param value a JSON string
-     * @return the JsonString for the string
-     *
-     * @since 1.1
-     */
-    public static JsonString createValue(String value) {
-        return JsonProvider.provider().createValue(value);
-    }
-
-    /**
-     * Creates a JsonNumber.
-     *
-     * @param value a JSON number
-     * @return the JsonNumber for the number
-     *
-     * @since 1.1
-     */
-    public static JsonNumber createValue(int value) {
-        return JsonProvider.provider().createValue(value);
-    }
-
-    /**
-     * Creates a JsonNumber.
-     *
-     * @param value a JSON number
-     * @return the JsonNumber for the number
-     *
-     * @since 1.1
-     */
-    public static JsonNumber createValue(long value) {
-        return JsonProvider.provider().createValue(value);
-    }
-
-    /**
-     * Creates a JsonNumber.
-     *
-     * @param value a JSON number
-     * @return the JsonNumber for the number
-     *
-     * @since 1.1
-     */
-    public static JsonNumber createValue(double value) {
-        return JsonProvider.provider().createValue(value);
-    }
-
-    /**
-     * Creates a JsonNumber.
-     *
-     * @param value a JSON number
-     * @return the JsonNumber for the number
-     *
-     * @since 1.1
-     */
-    public static JsonNumber createValue(BigDecimal value) {
-        return JsonProvider.provider().createValue(value);
-    }
-
-    /**
-     * Creates a JsonNumber.
-     *
-     * @param value a JSON number
-     * @return the JsonNumber for the number
-     *
-     * @since 1.1
-     */
-    public static JsonNumber createValue(BigInteger value) {
-        return JsonProvider.provider().createValue(value);
-    }
-
-    /**
-     * Encodes (escapes) a passed string as defined by <a href="http://tools.ietf.org/html/rfc6901">RFC 6901</a>.
-     * This method doesn't validate the passed JSON-pointer string.
-     *
-     * @param pointer the JSON-pointer string to encode
-     * @return encoded JSON-pointer string
-     * 
-     * @since 1.1
-     */
-    public static String encodePointer(String pointer) {
-        return pointer.replace("~", "~0").replace("/", "~1");
-    }
-
-    /**
-     * Decodes a passed JSON-pointer string as defined by <a href="http://tools.ietf.org/html/rfc6901">RFC 6901</a>.
-     * This method doesn't validate the passed JSON-pointer string.
-     *
-     * @param escaped the JSON-pointer string to decode
-     * @return decoded JSON-pointer string
-     *     
-     * @since 1.1
-     */
-    public static String decodePointer(String escaped) {
-        return escaped.replace("~1", "/").replace("~0", "~");
-    }
-
-}
Index: trunk/src/javax/json/JsonArray.java
===================================================================
--- trunk/src/javax/json/JsonArray.java	(revision 16017)
+++ 	(revision )
@@ -1,298 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.util.List;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-/**
- * {@code JsonArray} represents an immutable JSON array
- * (an ordered sequence of zero or more values).
- * It also provides an unmodifiable list view of the values in the array.
- *
- * <p>A {@code JsonArray} object can be created by reading JSON data from
- * an input source or it can be built from scratch using an array builder
- * object.
- *
- * <p>The following example demonstrates how to create a {@code JsonArray}
- * object from an input source using the method {@link JsonReader#readArray()}:
- * <pre><code>
- * JsonReader jsonReader = Json.createReader(...);
- * JsonArray array = jsonReader.readArray();
- * jsonReader.close();
- * </code></pre>
- *
- * <p>The following example demonstrates how to build an empty JSON array
- * using the class {@link JsonArrayBuilder}:
- * <pre><code>
- * JsonArray array = Json.createArrayBuilder().build();
- * </code></pre>
- *
- * <p>The example code below demonstrates how to create the following JSON array:
- * <pre><code>
- * [
- *     { "type": "home", "number": "212 555-1234" },
- *     { "type": "fax", "number": "646 555-4567" }
- * ]
- * </code></pre>
- * <pre><code>
- * JsonArray value = Json.createArrayBuilder()
- *     .add(Json.createObjectBuilder()
- *         .add("type", "home")
- *         .add("number", "212 555-1234"))
- *     .add(Json.createObjectBuilder()
- *         .add("type", "fax")
- *         .add("number", "646 555-4567"))
- *     .build();
- * </code></pre>
- *
- * <p>The following example demonstrates how to write a {@code JsonArray} object 
- * as JSON data:
- * <pre><code>
- * JsonArray arr = ...;
- * JsonWriter writer = Json.createWriter(...)
- * writer.writeArray(arr);
- * writer.close();
- * </code></pre>
- *
- * <p>The values in a {@code JsonArray} can be of the following types:
- * {@link JsonObject}, {@link JsonArray},
- * {@link JsonString}, {@link JsonNumber}, {@link JsonValue#TRUE},
- * {@link JsonValue#FALSE}, and {@link JsonValue#NULL}. 
- * {@code JsonArray} provides various accessor methods to access the values
- * in an array.
- * 
- * <p>The following example shows how to obtain the home phone number 
- * "212 555-1234" from the array built in the previous example:
- * <pre><code>
- * JsonObject home = array.getJsonObject(0);
- * String number = home.getString("number");
- * </code></pre>
- *
- * <p>{@code JsonArray} instances are list objects that provide read-only 
- * access to the values in the JSON array. Any attempt to modify the list,
- * whether directly or using its collection views, results in an 
- * {@code UnsupportedOperationException}.
- */
-public interface JsonArray extends JsonStructure, List<JsonValue> {
-
-    /**
-     * Returns the object value at the specified position in this array.
-     * This is a convenience method for {@code (JsonObject)get(index)}.
-     *
-     * @param index index of the value to be returned
-     * @return the value at the specified position in this array
-     * @throws IndexOutOfBoundsException if the index is out of range
-     * @throws ClassCastException if the value at the specified position is not
-     * assignable to the JsonObject type
-     */
-    JsonObject getJsonObject(int index);
-
-    /**
-     * Returns the array value at the specified position in this array.
-     * This is a convenience method for {@code (JsonArray)get(index)}.
-     *
-     * @param index index of the value to be returned
-     * @return the value at the specified position in this array
-     * @throws IndexOutOfBoundsException if the index is out of range
-     * @throws ClassCastException if the value at the specified position is not
-     * assignable to the JsonArray type
-     */
-    JsonArray getJsonArray(int index);
-
-    /**
-     * Returns the number value at the specified position in this array.
-     * This is a convenience method for {@code (JsonNumber)get(index)}.
-     *
-     * @param index index of the value to be returned
-     * @return the value at the specified position in this array
-     * @throws IndexOutOfBoundsException if the index is out of range
-     * @throws ClassCastException if the value at the specified position is not
-     * assignable to the JsonNumber type
-     */
-    JsonNumber getJsonNumber(int index);
-
-    /**
-     * Returns the string value at ths specified position in this array.
-     * This is a convenience method for {@code (JsonString)get(index)}.
-     *
-     * @param index index of the value to be returned
-     * @return the value at the specified position in this array
-     * @throws IndexOutOfBoundsException if the index is out of range
-     * @throws ClassCastException if the value at the specified position is not
-     * assignable to the JsonString type
-     */
-    JsonString getJsonString(int index);
-
-    /**
-     * Returns a list view of the specified type for the array. This method
-     * does not verify if there is a value of wrong type in the array. Providing
-     * this typesafe view dynamically may cause a program fail with a
-     * {@code ClassCastException}, if there is a value of wrong type in this
-     * array. Unfortunately, the exception can occur at any time after this
-     * method returns.
-     *
-     * @param <T> The type of the List for the array
-     * @param clazz a JsonValue type
-     * @return a list view of the specified type
-     */
-    <T extends JsonValue> List<T> getValuesAs(Class<T> clazz);
-
-    /**
-     * Returns a list view for the array. The value and the type of the elements
-     * in the list is specified by the {@code func} argument.
-     * <p>This method can be used to obtain a list of the unwrapped types, such as
-     * <pre>{@code
-     *     List<String> strings = ary1.getValuesAs(JsonString::getString);
-     *     List<Integer> ints = ary2.getValuesAs(JsonNumber::intValue);
-     * } </pre>
-     * or a list of simple projections, such as
-     * <pre> {@code
-     *     List<Integer> stringsizes = ary1.getValueAs((JsonString v)->v.getString().length();
-     * } </pre>
-     * @param <K> The element type (must be a subtype of JsonValue) of this JsonArray.
-     * @param <T> The element type of the returned List
-     * @param func The function that maps the elements of this JsonArray to the target elements.
-     * @return A List of the specified values and type.
-     * @throws ClassCastException if the {@code JsonArray} contains a value of wrong type
-     *
-     * @since 1.1
-     */
-    default <T, K extends JsonValue> List<T> getValuesAs(Function<K, T> func) {
-        @SuppressWarnings("unchecked")
-        Stream<K> stream = (Stream<K>) stream();
-        return stream.map(func).collect(Collectors.toList());
-    }
-
-    /**
-     * A convenience method for
-     * {@code getJsonString(index).getString()}.
-     *
-     * @param index index of the {@code JsonString} value
-     * @return the String value at the specified position
-     * @throws IndexOutOfBoundsException if the index is out of range
-     * @throws ClassCastException if the value at the specified position is not
-     * assignable to {@code JsonString}
-     */
-    String getString(int index);
-
-    /**
-     * Returns the {@code String} value of {@code JsonString} at the specified
-     * position in this JSON array values. If {@code JsonString} is found,
-     * its {@link javax.json.JsonString#getString()} is returned. Otherwise,
-     * the specified default value is returned.
-     *
-     * @param index index of the {@code JsonString} value
-     * @param defaultValue the String to return if the {@code JsonValue} at the
-     *    specified position is not a {@code JsonString}
-     * @return the String value at the specified position in this array,
-     * or the specified default value
-     */
-    String getString(int index, String defaultValue);
-
-    /**
-     * A convenience method for
-     * {@code getJsonNumber(index).intValue()}.
-     *
-     * @param index index of the {@code JsonNumber} value
-     * @return the int value at the specified position
-     * @throws IndexOutOfBoundsException if the index is out of range
-     * @throws ClassCastException if the value at the specified position is not
-     * assignable to {@code JsonNumber}
-     */
-    int getInt(int index);
-
-    /**
-     * Returns the int value of the {@code JsonNumber} at the specified position. 
-     * If the value at that position is a {@code JsonNumber},
-     * this method returns {@link javax.json.JsonNumber#intValue()}. Otherwise
-     * this method returns the specified default value.
-     *
-     * @param index index of the {@code JsonNumber} value
-     * @param defaultValue the int value to return if the {@code JsonValue} at
-     *     the specified position is not a {@code JsonNumber}
-     * @return the int value at the specified position in this array,
-     * or the specified default value
-     */
-    int getInt(int index, int defaultValue);
-
-    /**
-     * Returns the boolean value at the specified position.
-     * If the value at the specified position is {@code JsonValue.TRUE} 
-     * this method returns {@code true}. If the value at the specified position 
-     * is {@code JsonValue.FALSE} this method returns {@code false}.
-     *
-     * @param index index of the JSON boolean value
-     * @return the boolean value at the specified position
-     * @throws IndexOutOfBoundsException if the index is out of range
-     * @throws ClassCastException if the value at the specified position is not
-     * assignable to {@code JsonValue.TRUE} or {@code JsonValue.FALSE}
-     */
-    boolean getBoolean(int index);
-
-    /**
-     * Returns the boolean value at the specified position.
-     * If the value at the specified position is {@code JsonValue.TRUE}
-     * this method returns {@code true}. If the value at the specified position 
-     * is {@code JsonValue.FALSE} this method returns {@code false}. 
-     * Otherwise this method returns the specified default value.
-     *
-     * @param index index of the JSON boolean value
-     * @param defaultValue the boolean value to return if the {@code JsonValue}
-     *    at the specified position is neither TRUE nor FALSE
-     * @return the boolean value at the specified position,
-     * or the specified default value
-     */
-    boolean getBoolean(int index, boolean defaultValue);
-
-    /**
-     * Returns {@code true} if the value at the specified location in this
-     * array is {@code JsonValue.NULL}.
-     *
-     * @param index index of the JSON null value
-     * @return return true if the value at the specified location is
-     * {@code JsonValue.NULL}, otherwise false
-     * @throws IndexOutOfBoundsException if the index is out of range
-     */
-    boolean isNull(int index);
-}
Index: trunk/src/javax/json/JsonArrayBuilder.java
===================================================================
--- trunk/src/javax/json/JsonArrayBuilder.java	(revision 16017)
+++ 	(revision )
@@ -1,646 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * A builder for creating {@link JsonArray} models from scratch, and for
- * modifying a existing {@code JsonArray}.
- * <p>A {@code JsonArrayBuilder} can start with an empty or a non-empty
- * JSON array model. This interface provides methods to add, insert, remove
- * and replace values in the JSON array model.</p>
- * <p>Methods in this class can be chained to perform multiple values to
- * the array.</p>
- *
- * <p>The class {@link javax.json.Json} contains methods to create the builder
- * object. The example code below shows how to build an empty {@code JsonArray}
- * instance.
- * <pre>
- * <code>
- * JsonArray array = Json.createArrayBuilder().build();
- * </code>
- * </pre>
- *
- * <p>The class {@link JsonBuilderFactory} also contains methods to create
- * {@code JsonArrayBuilder} instances. A factory instance can be used to create
- * multiple builder instances with the same configuration. This the preferred
- * way to create multiple instances.
- *
- * The example code below shows how to build a {@code JsonArray} object
- * that represents the following JSON array:
- *
- * <pre>
- * <code>
- * [
- *     { "type": "home", "number": "212 555-1234" },
- *     { "type": "fax", "number": "646 555-4567" }
- * ]
- * </code>
- * </pre>
- *
- * <p>The following code creates the JSON array above:
- *
- * <pre>
- * <code>
- * JsonBuilderFactory factory = Json.createBuilderFactory(config);
- * JsonArray value = factory.createArrayBuilder()
- *     .add(factory.createObjectBuilder()
- *         .add("type", "home")
- *         .add("number", "212 555-1234"))
- *     .add(factory.createObjectBuilder()
- *         .add("type", "fax")
- *         .add("number", "646 555-4567"))
- *     .build();
- * </code>
- * </pre>
- *
- * <p>This class does <em>not</em> allow <tt>null</tt> to be used as a
- * value while building the JSON array
- *
- * @see JsonObjectBuilder
- */
-public interface JsonArrayBuilder {
-
-    /**
-     * Adds a value to the array.
-     *
-     * @param value the JSON value
-     * @return this array builder
-     * @throws NullPointerException if the specified value is null
-     */
-    JsonArrayBuilder add(JsonValue value);
-
-    /**
-     * Adds a value to the array as a {@link JsonString}.
-     *
-     * @param value the string value
-     * @return this array builder
-     * @throws NullPointerException if the specified value is null
-     */
-    JsonArrayBuilder add(String value);
-
-    /**
-     * Adds a value to the array as a {@link JsonNumber}.
-     *
-     * @param value the number value
-     * @return this array builder
-     * @throws NullPointerException if the specified value is null
-     *
-     * @see JsonNumber
-     */
-    JsonArrayBuilder add(BigDecimal value);
-
-    /**
-     * Adds a value to the array as a {@link JsonNumber}.
-     *
-     * @param value the number value
-     * @return this array builder
-     * @throws NullPointerException if the specified value is null
-     *
-     * @see JsonNumber
-     */
-    JsonArrayBuilder add(BigInteger value);
-
-    /**
-     * Adds a value to the array as a {@link JsonNumber}.
-     *
-     * @param value the number value
-     * @return this array builder
-     *
-     * @see JsonNumber
-     */
-    JsonArrayBuilder add(int value);
-
-    /**
-     * Adds a value to the array as a {@link JsonNumber}.
-     *
-     * @param value the number value
-     * @return this array builder
-     *
-     * @see JsonNumber
-     */
-    JsonArrayBuilder add(long value);
-
-    /**
-     * Adds a value to the array as a {@link JsonNumber}.
-     *
-     * @param value the number value
-     * @return this array builder
-     * @throws NumberFormatException if the value is Not-a-Number (NaN) or
-     *      infinity
-     *
-     * @see JsonNumber
-     */
-    JsonArrayBuilder add(double value);
-
-    /**
-     * Adds a {@link JsonValue#TRUE}  or {@link JsonValue#FALSE} value to the
-     * array.
-     *
-     * @param value the boolean value
-     * @return this array builder
-     */
-    JsonArrayBuilder add(boolean value);
-
-    /**
-     * Adds a {@link JsonValue#NULL} value to the array.
-     *
-     * @return this array builder
-     */
-    JsonArrayBuilder addNull();
-
-    /**
-     * Adds a {@link JsonObject} from an object builder to the array.
-     *
-     * @param builder the object builder
-     * @return this array builder
-     * @throws NullPointerException if the specified builder is null
-     */
-    JsonArrayBuilder add(JsonObjectBuilder builder);
-
-    /**
-     * Adds a {@link JsonArray} from an array builder to the array.
-     *
-     * @param builder the array builder
-     * @return this array builder
-     * @throws NullPointerException if the specified builder is null
-     */
-    JsonArrayBuilder add(JsonArrayBuilder builder);
-
-    /**
-     * Adds all elements of the array in the specified array builder to the array.
-     *
-     * @param builder the array builder
-     * @return this array builder
-     * @throws NullPointerException if the specified builder is null
-     *
-     @since 1.1
-     */
-    default JsonArrayBuilder addAll(JsonArrayBuilder builder) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Inserts a value to the array at the specified position. Shifts the value
-     * currently at that position (if any) and any subsequent values to the right
-     * (adds one to their indices).  Index starts with 0.
-     *
-     * @param index the position in the array
-     * @param value the JSON value
-     * @return this array builder
-     * @throws NullPointerException if the specified value is null
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index > array size)}
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder add(int index, JsonValue value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Adds a value to the array as a {@link JsonString} at the specified position.
-     * Shifts the value currently at that position (if any) and any subsequent values
-     * to the right (adds one to their indices).  Index starts with 0.
-     *
-     * @param index the position in the array
-     * @param value the string value
-     * @return this array builder
-     * @throws NullPointerException if the specified value is null
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index > array size)}
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder add(int index, String value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Adds a value to the array as a {@link JsonNumber} at the specified position.
-     * Shifts the value currently at that position (if any) and any subsequent values
-     * to the right (adds one to their indices).  Index starts with 0.
-     *
-     * @param index the position in the array
-     * @param value the number value
-     * @return this array builder
-     * @throws NullPointerException if the specified value is null
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index > array size)}
-     *
-     * @see JsonNumber
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder add(int index, BigDecimal value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Adds a value to the array as a {@link JsonNumber} at the specified position.
-     * Shifts the value currently at that position (if any) and any subsequent values
-     * to the right (adds one to their indices).  Index starts with 0.
-     *
-     * @param index the position in the array
-     * @param value the number value
-     * @return this array builder
-     * @throws NullPointerException if the specified value is null
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index > array size)}
-     *
-     * @see JsonNumber
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder add(int index, BigInteger value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Adds a value to the array as a {@link JsonNumber} at the specified position.
-     * Shifts the value currently at that position (if any) and any subsequent values
-     * to the right (adds one to their indices).  Index starts with 0.
-     *
-     * @param index the position in the array
-     * @param value the number value
-     * @return this array builder
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index > array size)}
-     *
-     * @see JsonNumber
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder add(int index, int value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Adds a value to the array as a {@link JsonNumber} at the specified position.
-     * Shifts the value currently at that position (if any) and any subsequent values
-     * to the right (adds one to their indices).  Index starts with 0.
-     *
-     * @param index the position in the array
-     * @param value the number value
-     * @return this array builder
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index > array size)}
-     *
-     * @see JsonNumber
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder add(int index, long value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Adds a value to the array as a {@link JsonNumber} at the specified position.
-     * Shifts the value currently at that position (if any) and any subsequent values
-     * to the right (adds one to their indices).  Index starts with 0.
-     *
-     * @param index the position in the array
-     * @param value the number value
-     * @return this array builder
-     * @throws NumberFormatException if the value is Not-a-Number (NaN) or
-     *      infinity
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index > array size)}
-     *
-     * @see JsonNumber
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder add(int index, double value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Adds a {@link JsonValue#TRUE}  or {@link JsonValue#FALSE} value to the
-     * array at the specified position.
-     * Shifts the value currently at that position (if any) and any subsequent values
-     * to the right (adds one to their indices).  Index starts with 0.
-     *
-     * @param index the position in the array
-     * @param value the boolean value
-     * @return this array builder
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index > array size)}
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder add(int index, boolean value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Adds a {@link JsonValue#NULL} value to the array at the specified position.
-     * Shifts the value currently at that position (if any) and any subsequent values
-     * to the right (adds one to their indices).  Index starts with 0.
-     *
-     * @param index the position in the array
-     * @return this array builder
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index > array size)}
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder addNull(int index) {
-        return add(index, JsonValue.NULL);
-    }
-
-    /**
-     * Adds a {@link JsonObject} from an object builder to the array at the specified position.
-     * Shifts the value currently at that position (if any) and any subsequent values
-     * to the right (adds one to their indices).  Index starts with 0.
-     *
-     * @param index the position in the array
-     * @param builder the object builder
-     * @return this array builder
-     * @throws NullPointerException if the specified builder is null
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index > array size)}
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder add(int index, JsonObjectBuilder builder) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Adds a {@link JsonArray} from an array builder to the array at the specified position.
-     * Shifts the value currently at that position (if any) and any subsequent values
-     * to the right (adds one to their indices).  Index starts with 0.
-     *
-     * @param index the position in the array
-     * @param builder the array builder
-     * @return this array builder
-     * @throws NullPointerException if the specified builder is null
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index > array size)}
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder add(int index, JsonArrayBuilder builder) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Replaces a value in the array with the specified value at the
-     * specified position.
-     *
-     * @param index the position in the array
-     * @param value the JSON value
-     * @return this array builder
-     * @throws NullPointerException if the specified value is null
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index >= array size)}
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder set(int index, JsonValue value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Replaces a value in the array with the specified value as a
-     * {@link JsonString} at the specified position.
-     *
-     * @param index the position in the array
-     * @param value the string value
-     * @return this array builder
-     * @throws NullPointerException if the specified value is null
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index >= array size)}
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder set(int index, String value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Replaces a value in the array with the specified value as a
-     * {@link JsonNumber} at the specified position.
-     *
-     * @param index the position in the array
-     * @param value the number value
-     * @return this array builder
-     * @throws NullPointerException if the specified value is null
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index >= array size)}
-     *
-     * @see JsonNumber
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder set(int index, BigDecimal value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Replaces a value in the array with the specified value as a
-     * {@link JsonNumber} at the specified position.
-     *
-     * @param index the position in the array
-     * @param value the number value
-     * @return this array builder
-     * @throws NullPointerException if the specified value is null
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index >= array size)}
-     *
-     * @see JsonNumber
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder set(int index, BigInteger value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Replaces a value in the array with the specified value as a
-     * {@link JsonNumber} at the specified position.
-     *
-     * @param index the position in the array
-     * @param value the number value
-     * @return this array builder
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index >= array size)}
-     *
-     * @see JsonNumber
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder set(int index, int value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Replaces a value in the array with the specified value as a
-     * {@link JsonNumber} at the specified position.
-     *
-     * @param index the position in the array
-     * @param value the number value
-     * @return this array builder
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index >= array size)}
-     *
-     * @see JsonNumber
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder set(int index, long value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Replaces a value in the array with the specified value as a
-     * {@link JsonNumber} at the specified position.
-     *
-     * @param index the position in the array
-     * @param value the number value
-     * @return this array builder
-     * @throws NumberFormatException if the value is Not-a-Number (NaN) or
-     *      infinity
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index >= array size)}
-     *
-     * @see JsonNumber
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder set(int index, double value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Replaces a value in the array with
-     * a {@link JsonValue#TRUE}  or {@link JsonValue#FALSE} value
-     * at the specified position.
-     *
-     * @param index the position in the array
-     * @param value the boolean value
-     * @return this array builder
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index >= array size)}
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder set(int index, boolean value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Replaces a value in the array with
-     * a {@link JsonValue#NULL} value at the specified position.
-     *
-     * @param index the position in the array
-     * @return this array builder
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index >= array size)}
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder setNull(int index) {
-        return set(index, JsonValue.NULL);
-    }
-
-    /**
-     * Replaces a value in the array with the specified value as a
-     * {@link JsonObject} from an object builder at the specified position.
-     *
-     * @param index the position in the array
-     * @param builder the object builder
-     * @return this array builder
-     * @throws NullPointerException if the specified builder is null
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index >= array size)}
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder set(int index, JsonObjectBuilder builder) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Replaces a value in the array with the specified value as a
-     * {@link JsonArray} from an array builder at the specified position.
-     *
-     * @param index the position in the array
-     * @param builder the array builder
-     * @return this array builder
-     * @throws NullPointerException if the specified builder is null
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index >= array size)}
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder set(int index, JsonArrayBuilder builder) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Remove the value in the array at the specified position.
-     * Shift any subsequent values to the left (subtracts one from their
-     * indices.
-     *
-     * @param index the position in the array
-     * @return this array builder
-     * @throws IndexOutOfBoundsException if the index is out of range
-     *   {@code (index < 0 || index >= array size)}
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder remove(int index) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns the current array.
-     *
-     * @return the current JSON array
-     */
-    JsonArray build();
-
-}
-
Index: trunk/src/javax/json/JsonBuilderFactory.java
===================================================================
--- trunk/src/javax/json/JsonBuilderFactory.java	(revision 16017)
+++ 	(revision )
@@ -1,157 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.util.Collection;
-import java.util.Map;
-
-/**
- * Factory to create {@link JsonObjectBuilder} and {@link JsonArrayBuilder}
- * instances. If a factory instance is configured with some configuration,
- * that would be used to configure the created builder instances.
- *
- * <p>
- * {@code JsonObjectBuilder} and {@code JsonArrayBuilder} can also be created
- * using {@link Json}'s methods. If multiple builder instances are created,
- * then creating them using a builder factory is preferred.
- *
- * <p>
- * <b>For example:</b>
- * <pre>
- * <code>
- * JsonBuilderFactory factory = Json.createBuilderFactory(...);
- * JsonArray value = factory.createArrayBuilder()
- *     .add(factory.createObjectBuilder()
- *         .add("type", "home")
- *         .add("number", "212 555-1234"))
- *     .add(factory.createObjectBuilder()
- *         .add("type", "fax")
- *         .add("number", "646 555-4567"))
- *     .build();
- * </code>
- * </pre>
- *
- * <p> All the methods in this class are safe for use by multiple concurrent
- * threads.
- */
-public interface JsonBuilderFactory {
-
-    /**
-     * Creates a {@code JsonObjectBuilder} instance that is used to build
-     * {@link JsonObject}.
-     *
-     * @return a JSON object builder
-     */
-    JsonObjectBuilder createObjectBuilder();
-
-    /**
-     * Creates a {@code JsonObjectBuilder} instance, initialized with an object.
-     *
-     * @param object the initial object in the builder
-     * @return a JSON object builder
-     * @throws NullPointerException if specified object is {@code null}
-     *
-     * @since 1.1
-     */
-    default JsonObjectBuilder createObjectBuilder(JsonObject object) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a {@code JsonObjectBuilder} instance, initialized with the specified object.
-     *
-     * @param object the initial object in the builder
-     * @return a JSON object builder
-     * @throws NullPointerException if specified object is {@code null}
-     *
-     * @since 1.1
-     */
-    default JsonObjectBuilder createObjectBuilder(Map<String, Object> object) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a {@code JsonArrayBuilder} instance that is used to build
-     * {@link JsonArray}
-     *
-     * @return a JSON array builder
-     */
-    JsonArrayBuilder createArrayBuilder();
-
-    /**
-     * Creates a {@code JsonArrayBuilder} instance, initialized with an array.
-     *
-     * @param array the initial array in the builder
-     * @return a JSON array builder
-     * @throws NullPointerException if specified array is {@code null}
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder createArrayBuilder(JsonArray array) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a {@code JsonArrayBuilder} instance,
-     * initialized with the content of specified collection.
-     *
-     * @param collection the initial data for the builder
-     * @return a JSON array builder
-     * @throws NullPointerException if specified collection is {@code null}
-     *
-     * @since 1.1
-     */
-    default JsonArrayBuilder createArrayBuilder(Collection<?> collection) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns read-only map of supported provider specific configuration
-     * properties that are used to configure the created JSON builders.
-     * If there are any specified configuration properties that are not
-     * supported by the provider, they won't be part of the returned map.
-     *
-     * @return a map of supported provider specific properties that are used
-     * to configure the builders. The map be empty but not null.
-     */
-    Map<String, ?> getConfigInUse();
-
-}
Index: trunk/src/javax/json/JsonException.java
===================================================================
--- trunk/src/javax/json/JsonException.java	(revision 16017)
+++ 	(revision )
@@ -1,79 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-/**
- * <code>JsonException</code> indicates that some exception happened during
- * JSON processing.
- */
-public class JsonException extends RuntimeException {
-
-    /**
-     * Constructs a new runtime exception with the specified detail message.
-     * The cause is not initialized, and may subsequently be initialized by a
-     * call to {@link #initCause}.
-     *
-     * @param message the detail message. The detail message is saved for
-     *          later retrieval by the {@link #getMessage()} method.
-     */
-    public JsonException(String message) {
-        super(message);
-    }
-
-    /**
-     * Constructs a new runtime exception with the specified detail message and
-     * cause.  <p>Note that the detail message associated with
-     * {@code cause} is <i>not</i> automatically incorporated in
-     * this runtime exception's detail message.
-     *
-     * @param message the detail message (which is saved for later retrieval
-     *         by the {@link #getMessage()} method).
-     * @param cause the cause (which is saved for later retrieval by the
-     *         {@link #getCause()} method). (A <tt>null</tt> value is
-     *         permitted, and indicates that the cause is nonexistent or
-     *         unknown.)
-     */
-    public JsonException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-}
-
Index: trunk/src/javax/json/JsonMergePatch.java
===================================================================
--- trunk/src/javax/json/JsonMergePatch.java	(revision 16017)
+++ 	(revision )
@@ -1,87 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-/**
- * <p>This interface represents an implementation of a JSON Merge Patch
- * as defined by <a href="http://tools.ietf.org/html/rfc7396">RFC 7396</a>.
- * </p>
- * <p>A {@code JsonMergePatch} can be instantiated with {@link Json#createMergePatch(JsonValue)}
- * by specifying the patch operations in a JSON Merge Patch or using {@link Json#createMergeDiff(JsonValue, JsonValue)}
- * to create a JSON Merge Patch based on the difference between two {@code JsonValue}s.
- * </p>
- * The following illustrates both approaches.
- * <p>1. Construct a JsonMergePatch with an existing JSON Merge Patch.
- * <pre>{@code
- *   JsonValue contacts = ... ; // The target to be patched
- *   JsonValue patch = ...  ; // JSON Merge Patch
- *   JsonMergePatch mergePatch = Json.createMergePatch(patch);
- *   JsonValue result = mergePatch.apply(contacts);
- * } </pre>
- * 2. Construct a JsonMergePatch from a difference between two {@code JsonValue}s.
- * <pre>{@code
- *   JsonValue source = ... ; // The source object
- *   JsonValue target = ... ; // The modified object
- *   JsonMergePatch mergePatch = Json.createMergeDiff(source, target); // The diff between source and target in a Json Merge Patch format
- * } </pre>
- *
- * @see <a href="http://tools.ietf.org/html/rfc7396">RFC 7396</a>
- *
- * @since 1.1
- */
-public interface JsonMergePatch {
-
-    /**
-     * Applies the JSON Merge Patch to the specified {@code target}.
-     * The target is not modified by the patch.
-     *
-     * @param target the target to apply the merge patch
-     * @return the transformed target after the patch
-     */
-    JsonValue apply(JsonValue target);
-
-    /**
-     * Returns the {@code JsonMergePatch} as {@code JsonValue}.
-     *
-     * @return this {@code JsonMergePatch} as {@code JsonValue}
-     */
-    JsonValue toJsonValue();
-}
Index: trunk/src/javax/json/JsonNumber.java
===================================================================
--- trunk/src/javax/json/JsonNumber.java	(revision 16017)
+++ 	(revision )
@@ -1,210 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * An immutable JSON number value.
- *
- * <p>
- * Implementations may use a {@link BigDecimal} object to store the numeric
- * value internally.
- * The {@code BigDecimal} object can be constructed from the following types:
- * <code>int</code> {@link BigDecimal#BigDecimal(int)},
- * <code>long</code> {@link BigDecimal#BigDecimal(long)},
- * <code>BigInteger</code> {@link BigDecimal#BigDecimal(BigInteger)},
- * <code>double</code> {@link BigDecimal#valueOf(double)}, and
- * <code>String</code> {@link BigDecimal#BigDecimal(String)}.
- * Some of the method semantics in this class are defined using the
- * {@code BigDecimal} semantics.
- */
-public interface JsonNumber extends JsonValue {
-
-    /**
-     * Returns true if this JSON number is a integral number. This method
-     * semantics are defined using {@code bigDecimalValue().scale()}. If the
-     * scale is zero, then it is considered integral type. This integral type
-     * information can be used to invoke an appropriate accessor method to
-     * obtain a numeric value as in the following example:
-     *
-     * <pre>
-     * <code>
-     * JsonNumber num = ...
-     * if (num.isIntegral()) {
-     *     num.longValue();     // or other methods to get integral value
-     * } else {
-     *     num.doubleValue();   // or other methods to get decimal number value
-     * }
-     * </code>
-     * </pre>
-     *
-     * @return true if this number is a integral number, otherwise false
-     */
-    boolean isIntegral();
-
-    /**
-     * Returns this JSON number as an {@code int}. Note that this conversion
-     * can lose information about the overall magnitude and precision of the
-     * number value as well as return a result with the opposite sign.
-     *
-     * @return an {@code int} representation of the JSON number
-     * @see java.math.BigDecimal#intValue()
-     */
-    int intValue();
-
-    /**
-     * Returns this JSON number as an {@code int}.
-     *
-     * @return an {@code int} representation of the JSON number
-     * @throws ArithmeticException if the number has a nonzero fractional
-     *         part or if it does not fit in an {@code int}
-     * @see java.math.BigDecimal#intValueExact()
-     */
-    int intValueExact();
-
-    /**
-     * Returns this JSON number as a {@code long}. Note that this conversion
-     * can lose information about the overall magnitude and precision of the
-     * number value as well as return a result with the opposite sign.
-     *
-     * @return a {@code long} representation of the JSON number.
-     * @see java.math.BigDecimal#longValue()
-     */
-    long longValue();
-
-    /**
-     * Returns this JSON number as a {@code long}.
-     *
-     * @return a {@code long} representation of the JSON number
-     * @throws ArithmeticException if the number has a non-zero fractional
-     *         part or if it does not fit in a {@code long}
-     * @see java.math.BigDecimal#longValueExact()
-     */
-    long longValueExact();
-
-    /**
-     * Returns this JSON number as a {@link BigInteger} object. This is a
-     * a convenience method for {@code bigDecimalValue().toBigInteger()}.
-     * Note that this conversion can lose information about the overall
-     * magnitude and precision of the number value as well as return a result
-     * with the opposite sign.
-     *
-     * @return a {@code BigInteger} representation of the JSON number.
-     * @see java.math.BigDecimal#toBigInteger()
-     */
-    BigInteger bigIntegerValue();
-
-    /**
-     * Returns this JSON number as a {@link BigInteger} object. This is a
-     * convenience method for {@code bigDecimalValue().toBigIntegerExact()}.
-     *
-     * @return a {@link BigInteger} representation of the JSON number
-     * @throws ArithmeticException if the number has a nonzero fractional part
-     * @see java.math.BigDecimal#toBigIntegerExact()
-     */
-    BigInteger bigIntegerValueExact();
-
-    /**
-     * Returns this JSON number as a {@code double}. This is a
-     * a convenience method for {@code bigDecimalValue().doubleValue()}.
-     * Note that this conversion can lose information about the overall
-     * magnitude and precision of the number value as well as return a result
-     * with the opposite sign.
-     *
-     * @return a {@code double} representation of the JSON number
-     * @see java.math.BigDecimal#doubleValue()
-     */
-    double doubleValue();
-
-    /**
-     * Returns this JSON number as a {@link BigDecimal} object.
-     *
-     * @return a {@link BigDecimal} representation of the JSON number
-     */
-    BigDecimal bigDecimalValue();
-
-    /**
-     * Returns this JSON number as a {@link Number} object.
-     *
-     * @return a {@link Number} representation of the JSON number
-     *
-     * @since 1.1
-     */
-    default Number numberValue() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns a JSON text representation of the JSON number. The
-     * representation is equivalent to {@link BigDecimal#toString()}.
-     *
-     * @return JSON text representation of the number
-     */
-    @Override
-    String toString();
-
-    /**
-     * Compares the specified object with this {@code JsonNumber} object for
-     * equality. Returns {@code true} if and only if the type of the specified
-     * object is also {@code JsonNumber} and their {@link #bigDecimalValue()}
-     * objects are <i>equal</i>
-     *
-     * @param obj the object to be compared for equality with
-     *      this {@code JsonNumber}
-     * @return {@code true} if the specified object is equal to this
-     *      {@code JsonNumber}
-     */
-    @Override
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this {@code JsonNumber} object.  The
-     * hash code of a {@code JsonNumber} object is defined as the hash code of
-     * its {@link #bigDecimalValue()} object.
-     *
-     * @return the hash code value for this {@code JsonNumber} object
-     */
-    @Override
-    int hashCode();
-
-}
Index: trunk/src/javax/json/JsonObject.java
===================================================================
--- trunk/src/javax/json/JsonObject.java	(revision 16017)
+++ 	(revision )
@@ -1,273 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.util.Map;
-
-/**
- * {@code JsonObject} class represents an immutable JSON object value
- * (an unordered collection of zero or more name/value pairs).
- * It also provides unmodifiable map view to the JSON object
- * name/value mappings.
- *
- * <p>A JsonObject instance can be created from an input source using
- * {@link JsonReader#readObject()}. For example:
- * <pre><code>
- * JsonReader jsonReader = Json.createReader(...);
- * JsonObject object = jsonReader.readObject();
- * jsonReader.close();
- * </code></pre>
- *
- * It can also be built from scratch using a {@link JsonObjectBuilder}.
- *
- * <p>For example 1: An empty JSON object can be built as follows:
- * <pre><code>
- * JsonObject object = Json.createObjectBuilder().build();
- * </code></pre>
- *
- * For example 2: The following JSON
- * <pre><code>
- * {
- *     "firstName": "John", "lastName": "Smith", "age": 25,
- *     "address" : {
- *         "streetAddress": "21 2nd Street",
- *         "city": "New York",
- *         "state": "NY",
- *         "postalCode": "10021"
- *     },
- *     "phoneNumber": [
- *         { "type": "home", "number": "212 555-1234" },
- *         { "type": "fax", "number": "646 555-4567" }
- *     ]
- * }
- * </code></pre>
- * can be built using :
- * <pre><code>
- * JsonObject value = Json.createObjectBuilder()
- *     .add("firstName", "John")
- *     .add("lastName", "Smith")
- *     .add("age", 25)
- *     .add("address", Json.createObjectBuilder()
- *         .add("streetAddress", "21 2nd Street")
- *         .add("city", "New York")
- *         .add("state", "NY")
- *         .add("postalCode", "10021"))
- *     .add("phoneNumber", Json.createArrayBuilder()
- *         .add(Json.createObjectBuilder()
- *             .add("type", "home")
- *             .add("number", "212 555-1234"))
- *         .add(Json.createObjectBuilder()
- *             .add("type", "fax")
- *             .add("number", "646 555-4567")))
- *     .build();
- * </code></pre>
- *
- * {@code JsonObject} can be written to JSON as follows:
- * <pre><code>
- * JsonWriter writer = ...
- * JsonObject obj = ...;
- * writer.writeObject(obj);
- * </code></pre>
- *
- * {@code JsonObject} values can be {@link JsonObject}, {@link JsonArray},
- * {@link JsonString}, {@link JsonNumber}, {@link JsonValue#TRUE},
- * {@link JsonValue#FALSE}, {@link JsonValue#NULL}. These values can be
- * accessed using various accessor methods.
- *
- * <p>In the above example 2, "John" can be got using
- * <pre><code>
- * String firstName = object.getString("firstName");
- * </code></pre>
- *
- * This map object provides read-only access to the JSON object data,
- * and attempts to modify the map, whether direct or via its collection
- * views, result in an {@code UnsupportedOperationException}.
- *
- * <p>The map object's iteration ordering is based on the order in which
- * name/value pairs are added to the corresponding builder or the order
- * in which name/value pairs appear in the corresponding stream.
- */
-public interface JsonObject extends JsonStructure, Map<String, JsonValue> {
-
-    /**
-     * Returns the array value to which the specified name is mapped.
-     * This is a convenience method for {@code (JsonArray)get(name)} to
-     * get the value.
-     *
-     * @param name the name whose associated value is to be returned
-     * @return the array value to which the specified name is mapped, or
-     *         {@code null} if this object contains no mapping for the name
-     * @throws ClassCastException if the value to which the specified name
-     * is mapped is not assignable to JsonArray type
-     */
-    JsonArray getJsonArray(String name);
-
-    /**
-     * Returns the object value to which the specified name is mapped.
-     * This is a convenience method for {@code (JsonObject)get(name)} to
-     * get the value.
-     *
-     * @param name the name whose associated value is to be returned
-     * @return the object value to which the specified name is mapped, or
-     *         {@code null} if this object contains no mapping for the name
-     * @throws ClassCastException if the value to which the specified name
-     * is mapped is not assignable to JsonObject type
-     */
-    JsonObject getJsonObject(String name);
-
-    /**
-     * Returns the number value to which the specified name is mapped.
-     * This is a convenience method for {@code (JsonNumber)get(name)} to
-     * get the value.
-     *
-     * @param name the name whose associated value is to be returned
-     * @return the number value to which the specified name is mapped, or
-     *         {@code null} if this object contains no mapping for the name
-     * @throws ClassCastException if the value to which the specified name
-     * is mapped is not assignable to JsonNumber type
-     */
-    JsonNumber getJsonNumber(String name);
-
-    /**
-     * Returns the string value to which the specified name is mapped.
-     * This is a convenience method for {@code (JsonString)get(name)} to
-     * get the value.
-     *
-     * @param name the name whose associated value is to be returned
-     * @return the string value to which the specified name is mapped, or
-     *         {@code null} if this object contains no mapping for the name
-     * @throws ClassCastException if the value to which the specified name
-     * is mapped is not assignable to JsonString type
-     */
-    JsonString getJsonString(String name);
-
-    /**
-     * A convenience method for
-     * {@code getJsonString(name).getString()}
-     *
-     * @param name whose associated value is to be returned as String
-     * @return the String value to which the specified name is mapped
-     * @throws NullPointerException if the specified name doesn't have any
-     * mapping
-     * @throws ClassCastException if the value for specified name mapping
-     * is not assignable to JsonString
-     */
-    String getString(String name);
-
-    /**
-     * Returns the string value of the associated {@code JsonString} mapping
-     * for the specified name. If {@code JsonString} is found, then its
-     * {@link javax.json.JsonString#getString()} is returned. Otherwise,
-     * the specified default value is returned.
-     *
-     * @param name whose associated value is to be returned as String
-     * @param defaultValue a default value to be returned
-     * @return the string value of the associated mapping for the name,
-     * or the default value
-     */
-    String getString(String name, String defaultValue);
-
-    /**
-     * A convenience method for
-     * {@code getJsonNumber(name).intValue()}
-     *
-     * @param name whose associated value is to be returned as int
-     * @return the int value to which the specified name is mapped
-     * @throws NullPointerException if the specified name doesn't have any
-     * mapping
-     * @throws ClassCastException if the value for specified name mapping
-     * is not assignable to JsonNumber
-     */
-    int getInt(String name);
-
-    /**
-     * Returns the int value of the associated {@code JsonNumber} mapping
-     * for the specified name. If {@code JsonNumber} is found, then its
-     * {@link javax.json.JsonNumber#intValue()} is returned. Otherwise,
-     * the specified default value is returned.
-     *
-     * @param name whose associated value is to be returned as int
-     * @param defaultValue a default value to be returned
-     * @return the int value of the associated mapping for the name,
-     * or the default value
-     */
-    int getInt(String name, int defaultValue);
-
-    /**
-     * Returns the boolean value of the associated mapping for the specified
-     * name. If the associated mapping is JsonValue.TRUE, then returns true.
-     * If the associated mapping is JsonValue.FALSE, then returns false.
-     *
-     * @param name whose associated value is to be returned as boolean
-     * @return the boolean value to which the specified name is mapped
-     * @throws NullPointerException if the specified name doesn't have any
-     * mapping
-     * @throws ClassCastException if the value for specified name mapping
-     * is not assignable to JsonValue.TRUE or JsonValue.FALSE
-     */
-    boolean getBoolean(String name);
-
-    /**
-     * Returns the boolean value of the associated mapping for the specified
-     * name. If the associated mapping is JsonValue.TRUE, then returns true.
-     * If the associated mapping is JsonValue.FALSE, then returns false.
-     * Otherwise, the specified default value is returned.
-     *
-     * @param name whose associated value is to be returned as int
-     * @param defaultValue a default value to be returned
-     * @return the boolean value of the associated mapping for the name,
-     * or the default value
-     */
-    boolean getBoolean(String name, boolean defaultValue);
-
-    /**
-     * Returns {@code true} if the associated value for the specified name is
-     * {@code JsonValue.NULL}.
-     *
-     * @param name name whose associated value is checked
-     * @return return true if the associated value is {@code JsonValue.NULL},
-     * otherwise false
-     * @throws NullPointerException if the specified name doesn't have any
-     * mapping
-     */
-    boolean isNull(String name);
-
-}
Index: trunk/src/javax/json/JsonObjectBuilder.java
===================================================================
--- trunk/src/javax/json/JsonObjectBuilder.java	(revision 16017)
+++ 	(revision )
@@ -1,307 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * A builder for creating {@link JsonObject} models from scratch. This
- * interface initializes an empty JSON object model and provides methods to add
- * name/value pairs to the object model and to return the resulting object.
- * The methods in this class can be chained to add multiple name/value pairs
- * to the object.
- *
- * <p>The class {@link javax.json.Json} contains methods to create the builder
- * object. The example code below shows how to build an empty {@code JsonObject}
- * instance.
- * <pre>
- * <code>
- * JsonObject object = Json.createObjectBuilder().build();
- * </code>
- * </pre>
- *
- * <p>The class {@link JsonBuilderFactory} also contains methods to create
- * {@code JsonObjectBuilder} instances. A factory instance can be used to create
- * multiple builder instances with the same configuration. This the preferred
- * way to create multiple instances.
- *
- * The example code below shows how to build a {@code JsonObject} model that
- * represents the following JSON object:
- *
- * <pre>
- * <code>
- * {
- *     "firstName": "John", "lastName": "Smith", "age": 25,
- *     "address" : {
- *         "streetAddress": "21 2nd Street",
- *         "city": "New York",
- *         "state": "NY",
- *         "postalCode": "10021"
- *     },
- *     "phoneNumber": [
- *         { "type": "home", "number": "212 555-1234" },
- *         { "type": "fax", "number": "646 555-4567" }
- *     ]
- * }
- * </code>
- * </pre>
- *
- * <p>The code to create the object shown above is the following:
- *
- * <pre>
- * <code>
- * JsonBuilderFactory factory = Json.createBuilderFactory(config);
- * JsonObject value = factory.createObjectBuilder()
- *     .add("firstName", "John")
- *     .add("lastName", "Smith")
- *     .add("age", 25)
- *     .add("address", factory.createObjectBuilder()
- *         .add("streetAddress", "21 2nd Street")
- *         .add("city", "New York")
- *         .add("state", "NY")
- *         .add("postalCode", "10021"))
- *     .add("phoneNumber", factory.createArrayBuilder()
- *         .add(factory.createObjectBuilder()
- *             .add("type", "home")
- *             .add("number", "212 555-1234"))
- *         .add(factory.createObjectBuilder()
- *             .add("type", "fax")
- *             .add("number", "646 555-4567")))
- *     .build();
- * </code>
- * </pre>
- *
- * <p>This class does <em>not</em> allow <tt>null</tt> to be used as a name or
- * value while building the JSON object
- *
- * @see JsonArrayBuilder
- */
-public interface JsonObjectBuilder {
-
-    /**
-     * Adds a name/{@code JsonValue} pair to the JSON object associated with
-     * this object builder. If the object contains a mapping for the specified
-     * name, this method replaces the old value with the specified value.
-     *
-     * @param name name in the name/value pair
-     * @param value value in the name/value pair
-     * @return this object builder
-     * @throws NullPointerException if the specified name or value is null
-     */
-    JsonObjectBuilder add(String name, JsonValue value);
-
-    /**
-     * Adds a name/{@code JsonString} pair to the JSON object associated with
-     * this object builder. If the object contains a mapping for the specified
-     * name, this method replaces the old value with the specified value.
-     *
-     * @param name name in the name/value pair
-     * @param value value in the name/value pair
-     * @return this object builder
-     * @throws NullPointerException if the specified name or value is null
-     */
-    JsonObjectBuilder add(String name, String value);
-
-    /**
-     * Adds a name/{@code JsonNumber} pair to the JSON object associated with
-     * this object builder. If the object contains a mapping for the specified
-     * name, this method replaces the old value with the specified value.
-     *
-     * @param name name in the name/value pair
-     * @param value value in the name/value pair
-     * @return this object builder
-     * @throws NullPointerException if the specified name or value is null
-     *
-     * @see JsonNumber
-     */
-    JsonObjectBuilder add(String name, BigInteger value);
-
-    /**
-     * Adds a name/{@code JsonNumber} pair to the JSON object associated with
-     * this object builder. If the object contains a mapping for the specified
-     * name, this method replaces the old value with the specified value.
-     *
-     * @param name name in the name/value pair
-     * @param value value in the name/value pair
-     * @return this object builder
-     * @throws NullPointerException if the specified name or value is null
-     *
-     * @see JsonNumber
-     */
-    JsonObjectBuilder add(String name, BigDecimal value);
-
-    /**
-     * Adds a name/{@code JsonNumber} pair to the JSON object associated with
-     * this object builder. If the object contains a mapping for the specified
-     * name, this method replaces the old value with the specified value.
-     *
-     * @param name name in the name/value pair
-     * @param value value in the name/value pair
-     * @return this object builder
-     * @throws NullPointerException if the specified name is null
-     *
-     * @see JsonNumber
-     */
-    JsonObjectBuilder add(String name, int value);
-
-    /**
-     * Adds a name/{@code JsonNumber} pair to the JSON object associated with
-     * this object builder. If the object contains a mapping for the specified
-     * name, this method replaces the old value with the specified value.
-     *
-     * @param name name in the name/value pair
-     * @param value value in the name/value pair
-     * @return this object builder
-     * @throws NullPointerException if the specified name is null
-     *
-     * @see JsonNumber
-     */
-    JsonObjectBuilder add(String name, long value);
-
-    /**
-     * Adds a name/{@code JsonNumber} pair to the JSON object associated with
-     * this object builder. If the object contains a mapping for the specified
-     * name, this method replaces the old value with the specified value.
-     *
-     * @param name name in the name/value pair
-     * @param value value in the name/value pair
-     * @return this object builder
-     * @throws NumberFormatException if the value is Not-a-Number (NaN) or 
-     * infinity
-     * @throws NullPointerException if the specified name is null
-     *
-     * @see JsonNumber
-     */
-    JsonObjectBuilder add(String name, double value);
-
-    /**
-     * Adds a name/{@code JsonValue#TRUE} or name/{@code JsonValue#FALSE} pair
-     * to the JSON object associated with this object builder. If the object
-     * contains a mapping for the specified name, this method replaces the old
-     * value with the specified value.
-     *
-     * @param name name in the name/value pair
-     * @param value value in the name/value pair
-     * @return this object builder
-     * @throws NullPointerException if the specified name is null
-     */
-    JsonObjectBuilder add(String name, boolean value);
-
-    /**
-     * Adds a name/{@code JsonValue#NULL} pair to the JSON object associated
-     * with this object builder where the value is {@code null}.
-     * If the object contains a mapping for the specified name, this method
-     * replaces the old value with {@code null}.
-     *
-     * @param name name in the name/value pair
-     * @return this object builder
-     * @throws NullPointerException if the specified name is null
-     */
-    JsonObjectBuilder addNull(String name);
-
-    /**
-     * Adds a name/{@code JsonObject} pair to the JSON object associated
-     * with this object builder. The value {@code JsonObject} is built from the
-     * specified object builder. If the object contains a mapping for the
-     * specified name, this method replaces the old value with the
-     * {@code JsonObject} from the specified object builder.
-     *
-     * @param name name in the name/value pair
-     * @param builder the value is the object associated with this builder
-     * @return this object builder
-     * @throws NullPointerException if the specified name or builder is null
-     */
-    JsonObjectBuilder add(String name, JsonObjectBuilder builder);
-
-    /**
-     * Adds a name/{@code JsonArray} pair to the JSON object associated with
-     * this object builder. The value {@code JsonArray} is built from the
-     * specified array builder. If the object contains a mapping for the
-     * specified name, this method replaces the old value with the
-     * {@code JsonArray} from the specified array builder.
-     *
-     * @param name the name in the name/value pair
-     * @param builder the value is the object array with this builder
-     * @return this object builder
-     * @throws NullPointerException if the specified name or builder is null
-     */
-    JsonObjectBuilder add(String name, JsonArrayBuilder builder);
-
-    /**
-     * Adds all name/value pairs in the JSON object associated with the specified
-     * object builder to the JSON object associated with this object builder.
-     * The newly added name/value pair will replace any existing name/value pair with
-     * the same name.
-     *
-     * @param builder the specified object builder
-     * @return this object builder
-     * @throws NullPointerException if the specified builder is null
-     * @since 1.1
-     */
-    default JsonObjectBuilder addAll(JsonObjectBuilder builder) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Remove the name/value pair from the JSON object associated with this
-     * object builder if it is present.
-     *
-     * @param name the name in the name/value pair to be removed
-     * @return this object builder
-     * @throws NullPointerException if the specified name is null
-     * @since 1.1
-     */
-    default JsonObjectBuilder remove(String name) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns the JSON object associated with this object builder. 
-     * The iteration order for the {@code JsonObject} is based
-     * on the order in which name/value pairs are added to the object using
-     * this builder.
-     *
-     * @return JSON object that is being built
-     */
-    JsonObject build();
-
-}
Index: trunk/src/javax/json/JsonPatch.java
===================================================================
--- trunk/src/javax/json/JsonPatch.java	(revision 16017)
+++ 	(revision )
@@ -1,163 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-/**
- * <p>This interface represents an immutable implementation of a JSON Patch
- * as defined by <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>.
- * </p>
- * <p>A {@code JsonPatch} can be instantiated with {@link Json#createPatch(JsonArray)}
- * by specifying the patch operations in a JSON Patch. Alternately, it
- * can also be constructed with a {@link JsonPatchBuilder}.
- * </p>
- * The following illustrates both approaches.
- * <p>1. Construct a JsonPatch with a JSON Patch.
- * <pre>{@code
- *   JsonArray contacts = ... // The target to be patched
- *   JsonArray patch = ...  ; // JSON Patch
- *   JsonPatch jsonpatch = Json.createPatch(patch);
- *   JsonArray result = jsonpatch.apply(contacts);
- * } </pre>
- * 2. Construct a JsonPatch with JsonPatchBuilder.
- * <pre>{@code
- *   JsonPatchBuilder builder = Json.createPatchBuilder();
- *   JsonArray result = builder.add("/John/phones/office", "1234-567")
- *                             .remove("/Amy/age")
- *                             .build()
- *                             .apply(contacts);
- * } </pre>
- *
- * @see <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>
- *
- * @since 1.1
- */
-public interface JsonPatch {
-
-    /**
-     * This enum represents the list of valid JSON Patch operations
-     * as defined by <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>.
-     *
-     * @see <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>
-     */
-    enum Operation {
-
-        /**
-         * "add" operation.
-         */
-        ADD("add"),
-
-        /**
-         * "remove" operation.
-         */
-        REMOVE("remove"),
-
-        /**
-         * "remove" operation.
-         */
-        REPLACE("replace"),
-
-        /**
-         * "move" operation.
-         */
-        MOVE("move"),
-
-        /**
-         * "copy" operation.
-         */
-        COPY("copy"),
-
-        /**
-         * "test" operation.
-         */
-        TEST("test");
-
-        private final String operationName;
-
-        private Operation(String operationName) {
-            this.operationName = operationName;
-        }
-
-        /**
-         * Returns enum constant name as lower case string.
-         *
-         * @return lower case name of the enum constant
-         */
-        public String operationName() {
-            return operationName;
-        }
-
-        /**
-         * Returns the enum constant with the specified name.
-         *
-         * @param operationName {@code operationName} to convert to the enum constant.
-         * @return the enum constant for given {@code operationName}
-         * @throws JsonException if given {@code operationName} is not recognized
-         */
-        public static Operation fromOperationName(String operationName) {
-            for (Operation op : values()) {
-                if (op.operationName().equalsIgnoreCase(operationName)) {
-                    return op;
-                }
-            }
-            throw new JsonException("Illegal value for the operationName of the JSON patch operation: " + operationName);
-        }
-    }
-
-    /**
-     * Applies the patch operations to the specified {@code target}.
-     * The target is not modified by the patch.
-     *
-     * @param <T> the target type, must be a subtype of {@link JsonStructure}
-     * @param target the target to apply the patch operations
-     * @return the transformed target after the patch
-     * @throws JsonException if the supplied JSON Patch is malformed or if
-     *    it contains references to non-existing members
-     */
-    <T extends JsonStructure> T apply(T target);
-
-    /**
-     * Returns the {@code JsonPatch} as {@code JsonArray}.
-     *
-     * @return this {@code JsonPatch} as {@code JsonArray}
-     */
-    JsonArray toJsonArray();
-
-}
Index: trunk/src/javax/json/JsonPatchBuilder.java
===================================================================
--- trunk/src/javax/json/JsonPatchBuilder.java	(revision 16017)
+++ 	(revision )
@@ -1,210 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-/**
- * A builder for constructing a JSON Patch as defined by
- * <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a> by adding
- * JSON Patch operations incrementally.
- * <p>
- * The following illustrates the approach.
- * <pre>
- *   JsonPatchBuilder builder = Json.createPatchBuilder();
- *   JsonPatch patch = builder.add("/John/phones/office", "1234-567")
- *                            .remove("/Amy/age")
- *                            .build();
- * </pre>
- * The result is equivalent to the following JSON Patch.
- * <pre>
- * [
- *    {"op" = "add", "path" = "/John/phones/office", "value" = "1234-567"},
- *    {"op" = "remove", "path" = "/Amy/age"}
- * ] </pre>
- *
- * @see <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>
- *
- * @since 1.1
- */
-public interface JsonPatchBuilder {
-
-    /**
-     * Adds an "add" JSON Patch operation.
-     *
-     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer.
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    JsonPatchBuilder add(String path, JsonValue value);
-
-    /**
-     * Adds an "add" JSON Patch operation.
-     *
-     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer.
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    JsonPatchBuilder add(String path, String value);
-
-    /**
-     * Adds an "add" JSON Patch operation.
-     *
-     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer.
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    JsonPatchBuilder add(String path, int value);
-
-    /**
-     * Adds an "add" JSON Patch operation.
-     *
-     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer.
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    JsonPatchBuilder add(String path, boolean value);
-
-    /**
-     * Adds a "remove" JSON Patch operation.
-     *
-     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer.
-     * @return this JsonPatchBuilder
-     */
-    JsonPatchBuilder remove(String path);
-
-    /**
-     * Adds a "replace" JSON Patch operation.
-     *
-     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer.
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    JsonPatchBuilder replace(String path, JsonValue value);
-
-    /**
-     * Adds a "replace" JSON Patch operation.
-     *
-     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    JsonPatchBuilder replace(String path, String value);
-
-    /**
-     * Adds a "replace" JSON Patch operation.
-     *
-     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    JsonPatchBuilder replace(String path, int value);
-
-    /**
-     * Adds a "replace" JSON Patch operation.
-     *
-     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    JsonPatchBuilder replace(String path, boolean value);
-
-    /**
-     * Adds a "move" JSON Patch operation.
-     *
-     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
-     * @param from the "from" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    JsonPatchBuilder move(String path, String from);
-
-    /**
-     * Adds a "copy" JSON Patch operation.
-     *
-     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
-     * @param from the "from" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    JsonPatchBuilder copy(String path, String from);
-
-    /**
-     * Adds a "test" JSON Patch operation.
-     *
-     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    JsonPatchBuilder test(String path, JsonValue value);
-
-    /**
-     * Adds a "test" JSON Patch operation.
-     *
-     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    JsonPatchBuilder test(String path, String value);
-
-    /**
-     * Adds a "test" JSON Patch operation.
-     *
-     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    JsonPatchBuilder test(String path, int value);
-
-    /**
-     * Adds a "test" JSON Patch operation.
-     *
-     * @param path the "path" member of the operation. Must be a valid escaped JSON-Pointer string.
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    JsonPatchBuilder test(String path, boolean value);
-
-
-    /**
-     * Returns the JSON Patch.
-     *
-     * @return a JSON Patch
-     */
-    JsonPatch build();
-
-}
Index: trunk/src/javax/json/JsonPointer.java
===================================================================
--- trunk/src/javax/json/JsonPointer.java	(revision 16017)
+++ 	(revision )
@@ -1,140 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-/**
- * <p>This interface represents an immutable implementation of a JSON Pointer
- * as defined by <a href="http://tools.ietf.org/html/rfc6901">RFC 6901</a>.
- * </p>
- * <p> A JSON Pointer, when applied to a target {@link JsonValue},
- * defines a reference location in the target.</p>
- * <p> An empty JSON Pointer string defines a reference to the target itself.</p>
- * <p> If the JSON Pointer string is non-empty, it must be a sequence
- * of '/' prefixed tokens, and the target must either be a {@link JsonArray}
- * or {@link JsonObject}. If the target is a {@code JsonArray}, the pointer
- * defines a reference to an array element, and the last token specifies the index.
- * If the target is a {@link JsonObject}, the pointer defines a reference to a
- * name/value pair, and the last token specifies the name.
- * </p>
- * <p> The method {@link #getValue getValue()} returns the referenced value.
- * Methods {@link #add add()}, {@link #replace replace()},
- * and {@link #remove remove()} execute operations specified in
- * <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>. </p>
- *
- * @see <a href="http://tools.ietf.org/html/rfc6901">RFC 6901</a>
- * @see <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>
- *
- * @since 1.1
- */
-public interface JsonPointer {
-
-    /**
-     * Adds or replaces a value at the referenced location in the specified
-     * {@code target} with the specified {@code value}.
-     * <ol>
-     * <li>If the reference is the target (empty JSON Pointer string),
-     * the specified {@code value}, which must be the same type as
-     * specified {@code target}, is returned.</li>
-     * <li>If the reference is an array element, the specified {@code value} is inserted
-     * into the array, at the referenced index. The value currently at that location, and
-     * any subsequent values, are shifted to the right (adds one to the indices).
-     * Index starts with 0. If the reference is specified with a "-", or if the
-     * index is equal to the size of the array, the value is appended to the array.</li>
-     * <li>If the reference is a name/value pair of a {@code JsonObject}, and the
-     * referenced value exists, the value is replaced by the specified {@code value}.
-     * If the value does not exist, a new name/value pair is added to the object.</li>
-     * </ol>
-     *
-     * @param <T> the target type, must be a subtype of {@link JsonValue}
-     * @param target the target referenced by this {@code JsonPointer}
-     * @param value the value to be added
-     * @return the transformed {@code target} after the value is added.
-     * @throws NullPointerException if {@code target} is {@code null}
-     * @throws JsonException if the reference is an array element and
-     * the index is out of range ({@code index < 0 || index > array size}),
-     * or if the pointer contains references to non-existing objects or arrays.
-     */
-    <T extends JsonStructure> T add(T target, JsonValue value);
-
-    /**
-     * Removes the value at the reference location in the specified {@code target}.
-     *
-     * @param <T> the target type, must be a subtype of {@link JsonValue}
-     * @param target the target referenced by this {@code JsonPointer}
-     * @return the transformed {@code target} after the value is removed.
-     * @throws NullPointerException if {@code target} is {@code null}
-     * @throws JsonException if the referenced value does not exist,
-     *    or if the reference is the target.
-     */
-    <T extends JsonStructure> T remove(T target);
-
-    /**
-     * Replaces the value at the referenced location in the specified
-     * {@code target} with the specified {@code value}.
-     *
-     * @param <T> the target type, must be a subtype of {@link JsonValue}
-     * @param target the target referenced by this {@code JsonPointer}
-     * @param value the value to be stored at the referenced location
-     * @return the transformed {@code target} after the value is replaced.
-     * @throws NullPointerException if {@code target} is {@code null}
-     * @throws JsonException if the referenced value does not exist,
-     *    or if the reference is the target.
-     */
-    <T extends JsonStructure> T replace(T target, JsonValue value);
-
-    /**
-     * Returns {@code true} if there is a value at the referenced location in the specified {@code target}.
-     *
-     * @param target the target referenced by this {@code JsonPointer}
-     * @return {@code true} if this pointer points to a value in a specified {@code target}.
-     */
-    boolean containsValue(JsonStructure target);
-
-    /**
-     * Returns the value at the referenced location in the specified {@code target}.
-     *
-     * @param target the target referenced by this {@code JsonPointer}
-     * @return the referenced value in the target.
-     * @throws NullPointerException if {@code target} is null
-     * @throws JsonException if the referenced value does not exist
-     */
-    JsonValue getValue(JsonStructure target);
-}
Index: trunk/src/javax/json/JsonReader.java
===================================================================
--- trunk/src/javax/json/JsonReader.java	(revision 16017)
+++ 	(revision )
@@ -1,157 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.io.Closeable;
-
-/**
- * Reads a JSON {@link JsonObject object} or an {@link JsonArray array}
- * structure from an input source.
- *
- * <p>The class {@link javax.json.Json} contains methods to create readers from
- * input sources ({@link java.io.InputStream} and {@link java.io.Reader}).
- *
- * <p>
- * The following example demonstrates how to read an empty JSON array from
- * a string:
- * <pre>
- * <code>
- * JsonReader jsonReader = Json.createReader(new StringReader("[]"));
- * JsonArray array = jsonReader.readArray();
- * jsonReader.close();
- * </code>
- * </pre>
- *
- * <p>
- * The class {@link JsonReaderFactory} also contains methods to create
- * {@code JsonReader} instances. A factory instance can be used to create
- * multiple reader instances with the same configuration. This the preferred
- * way to create multiple instances. A sample usage is shown in the following
- * example:
- * <pre>
- * <code>
- * JsonReaderFactory factory = Json.createReaderFactory(config);
- * JsonReader reader1 = factory.createReader(...);
- * JsonReader reader2 = factory.createReader(...);
- * </code>
- * </pre>
- */
-public interface JsonReader extends  /*Auto*/Closeable {
-
-    /**
-     * Returns a JSON array or object that is represented in
-     * the input source. This method needs to be called
-     * only once for a reader instance.
-     *
-     * @return a JSON object or array
-     * @throws JsonException if a JSON object or array cannot
-     *     be created due to i/o error (IOException would be
-     * cause of JsonException)
-     * @throws javax.json.stream.JsonParsingException if a JSON object or array
-     *     cannot be created due to incorrect representation
-     * @throws IllegalStateException if read, readObject, readArray,
-     *     readValue or close method is already called
-     */
-    JsonStructure read();
-
-    /**
-     * Returns a JSON object that is represented in
-     * the input source. This method needs to be called
-     * only once for a reader instance.
-     *
-     * @return a JSON object
-     * @throws JsonException if a JSON object cannot
-     *     be created due to i/o error (IOException would be
-     *     cause of JsonException)
-     * @throws javax.json.stream.JsonParsingException if a JSON object cannot
-     *     be created due to incorrect representation
-     * @throws IllegalStateException if read, readObject, readArray,
-     *     readValue or close method is already called
-     */
-    JsonObject readObject();
-
-    /**
-     * Returns a JSON array that is represented in
-     * the input source. This method needs to be called
-     * only once for a reader instance.
-     *
-     * @return a JSON array
-     * @throws JsonException if a JSON array cannot
-     *     be created due to i/o error (IOException would be
-     *     cause of JsonException)
-     * @throws javax.json.stream.JsonParsingException if a JSON array cannot
-     *     be created due to incorrect representation
-     * @throws IllegalStateException if read, readObject, readArray,
-     *     readValue or close method is already called
-     */
-    JsonArray readArray();
-
-    /**
-     * Returns a JSON value that is represented in
-     * the input source. This method needs to be called
-     * only once for a reader instance.
-     *
-     * @return a JSON value
-     * @throws JsonException if a JSON value
-     *     be created due to i/o error (IOException would be
-     *     cause of JsonException)
-     * @throws javax.json.stream.JsonParsingException if a JSON value
-     *     cannot be created due to incorrect representation
-     * @throws IllegalStateException if read, readObject, readArray,
-     *     readValue or close method is already called
-     *
-     * @since 1.1
-     */
-    default JsonValue readValue() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Closes this reader and frees any resources associated with the
-     * reader. This method closes the underlying input source.
-     *
-     * @throws JsonException if an i/o error occurs (IOException would be
-     * cause of JsonException)
-     */
-    @Override
-    void close();
-
-}
Index: trunk/src/javax/json/JsonReaderFactory.java
===================================================================
--- trunk/src/javax/json/JsonReaderFactory.java	(revision 16017)
+++ 	(revision )
@@ -1,115 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.io.InputStream;
-import java.io.Reader;
-import java.nio.charset.Charset;
-import java.util.Map;
-
-/**
- * Factory to create {@link javax.json.JsonReader} instances. If a factory
- * instance is configured with some configuration, that would be
- * used to configure the created reader instances.
- *
- * <p>
- * {@link javax.json.JsonReader} can also be created using {@link Json}'s
- * {@code createReader} methods. If multiple reader instances are created,
- * then creating them using a reader factory is preferred.
- *
- * <p>
- * <b>For example:</b>
- * <pre>
- * <code>
- * JsonReaderFactory factory = Json.createReaderFactory(...);
- * JsonReader reader1 = factory.createReader(...);
- * JsonReader reader2 = factory.createReader(...);
- * </code>
- * </pre>
- *
- * <p> All the methods in this class are safe for use by multiple concurrent
- * threads.
- */
-public interface JsonReaderFactory {
-
-    /**
-     * Creates a JSON reader from a character stream. The reader is configured
-     * with the factory configuration.
-     *
-     * @param reader a reader from which JSON is to be read
-     * @return a JSON reader
-     */
-    JsonReader createReader(Reader reader);
-
-    /**
-     * Creates a JSON reader from a byte stream. The character encoding of
-     * the stream is determined as described in
-     * <a href="http://tools.ietf.org/rfc/rfc7159.txt">RFC 7159</a>.
-     * The reader is configured with the factory configuration.
-     *
-     * @param in a byte stream from which JSON is to be read
-     * @return a JSON reader
-     */
-    JsonReader createReader(InputStream in);
-
-    /**
-     * Creates a JSON reader from a byte stream. The bytes of the stream
-     * are decoded to characters using the specified charset. The reader is
-     * configured with the factory configuration.
-     *
-     * @param in a byte stream from which JSON is to be read
-     * @param charset a charset
-     * @return a JSON reader
-     */
-    JsonReader createReader(InputStream in, Charset charset);
-
-    /**
-     * Returns read-only map of supported provider specific configuration
-     * properties that are used to configure the created JSON readers.
-     * If there are any specified configuration properties that are not
-     * supported by the provider, they won't be part of the returned map.
-     *
-     * @return a map of supported provider specific properties that are used
-     * to configure the readers. The map be empty but not null.
-     */
-    Map<String, ?> getConfigInUse();
-
-}
Index: trunk/src/javax/json/JsonString.java
===================================================================
--- trunk/src/javax/json/JsonString.java	(revision 16017)
+++ 	(revision )
@@ -1,87 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-/**
- * An immutable JSON string value.
- */
-public interface JsonString extends JsonValue {
-
-    /**
-     * Returns the JSON string value.
-     *
-     * @return a JSON string value
-     */
-    String getString();
-
-
-    /**
-     * Returns the char sequence for the JSON String value
-     *
-     * @return a char sequence for the JSON String value
-     */
-    CharSequence getChars();
-
-    /**
-     * Compares the specified object with this {@code JsonString} for equality.
-     * Returns {@code true} if and only if the specified object is also a
-     * {@code JsonString}, and their {@link #getString()} objects are
-     * <i>equal</i>.
-     *
-     * @param obj the object to be compared for equality with this 
-     *      {@code JsonString}
-     * @return {@code true} if the specified object is equal to this 
-     *      {@code JsonString}
-     */
-    @Override
-    boolean equals(Object obj);
-
-    /**
-     * Returns the hash code value for this {@code JsonString} object.  
-     * The hash code of a {@code JsonString} object is defined to be its 
-     * {@link #getString()} object's hash code.
-     *
-     * @return the hash code value for this {@code JsonString} object
-     */
-    @Override
-    int hashCode();
-
-}
Index: trunk/src/javax/json/JsonStructure.java
===================================================================
--- trunk/src/javax/json/JsonStructure.java	(revision 16017)
+++ 	(revision )
@@ -1,62 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-/**
- * Super type for the two structured types in JSON ({@link JsonObject object}s
- * and {@link JsonArray array}s).
- */
-public interface JsonStructure extends JsonValue {
-
-    /**
-     * Get the value referenced by the provided JSON Pointer in the JsonStructure.
-     *
-     * @param jsonPointer the JSON Pointer
-     * @return the {@code JsonValue} at the referenced location
-     * @throws JsonException if the JSON Pointer is malformed, or if it references
-     *     a non-existing member or value.
-     *
-     * @since 1.1
-     */
-    default public JsonValue getValue(String jsonPointer) {
-        return Json.createPointer(jsonPointer).getValue(this);
-    }
-}
Index: trunk/src/javax/json/JsonValue.java
===================================================================
--- trunk/src/javax/json/JsonValue.java	(revision 16017)
+++ 	(revision )
@@ -1,164 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-/**
- * <code>JsonValue</code> represents an immutable JSON value.
- *
- *
- * <p>A JSON value is one of the following:
- * an object ({@link JsonObject}), an array ({@link JsonArray}),
- * a number ({@link JsonNumber}), a string ({@link JsonString}),
- * {@code true} ({@link JsonValue#TRUE JsonValue.TRUE}), {@code false}
- * ({@link JsonValue#FALSE JsonValue.FALSE}),
- * or {@code null} ({@link JsonValue#NULL JsonValue.NULL}).
- */
-public interface JsonValue {
-
-    /**
-     * The empty JSON object.
-     *
-     * @since 1.1
-     */
-    static final JsonObject EMPTY_JSON_OBJECT = new EmptyObject();
-
-    /**
-     * The empty JSON array.
-     *
-     * @since 1.1
-     */
-    static final JsonArray EMPTY_JSON_ARRAY = new EmptyArray();
-
-    /**
-     * Indicates the type of a {@link JsonValue} object.
-     */
-    enum ValueType {
-        /**
-         * JSON array.
-         */
-        ARRAY,
-
-        /**
-         * JSON object.
-         */
-        OBJECT,
-
-        /**
-         * JSON string.
-         */
-        STRING,
-
-        /**
-         * JSON number.
-         */
-        NUMBER,
-
-        /**
-         * JSON true.
-         */
-        TRUE,
-
-        /**
-         * JSON false.
-         */
-        FALSE,
-
-        /**
-         * JSON null.
-         */
-        NULL
-    }
-
-    /**
-     * JSON null value.
-     */
-    static final JsonValue NULL = new JsonValueImpl(ValueType.NULL);
-
-    /**
-     * JSON true value.
-     */
-    static final JsonValue TRUE = new JsonValueImpl(ValueType.TRUE);
-
-    /**
-     * JSON false value.
-     */
-    static final JsonValue FALSE = new JsonValueImpl(ValueType.FALSE);
-
-    /**
-     * Returns the value type of this JSON value.
-     *
-     * @return JSON value type
-     */
-    ValueType getValueType();
-
-    /**
-     * Return the JsonValue as a JsonObject
-     *
-     * @return the JsonValue as a JsonObject
-     * @throws ClassCastException if the JsonValue is not a JsonObject
-     *
-     * @since 1.1
-     */
-    default JsonObject asJsonObject() {
-        return JsonObject.class.cast(this);
-    }
-
-    /**
-     * Return the JsonValue as a JsonArray
-     *
-     * @return the JsonValue as a JsonArray
-     * @throws ClassCastException if the JsonValue is not a JsonArray
-     *
-     * @since 1.1
-     */
-    default JsonArray asJsonArray() {
-        return JsonArray.class.cast(this);
-    }
-
-    /**
-     * Returns JSON text for this JSON value.
-     *
-     * @return JSON text
-     */
-    @Override
-    String toString();
-
-}
Index: trunk/src/javax/json/JsonValueImpl.java
===================================================================
--- trunk/src/javax/json/JsonValueImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,107 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2016-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.io.Serializable;
-
-/**
- * Private implementation of {@link JsonValue} for simple {@link ValueType}s
- * allowing their usage in constants which are better to implement {@link Serializable}.
- *
- * @author Lukas Jungmann
- */
-final class JsonValueImpl implements JsonValue, Serializable {
-
-    private final ValueType valueType;
-
-    JsonValueImpl(ValueType valueType) {
-        this.valueType = valueType;
-    }
-
-    /**
-     * Returns the value type of this JSON value.
-     *
-     * @return JSON value type
-     */
-    @Override
-    public ValueType getValueType() {
-        return valueType;
-    }
-
-    /**
-     * Compares the specified object with this {@link JsonValue}
-     * object for equality. Returns {@code true} if and only if the
-     * specified object is also a JsonValue, and their
-     * {@link #getValueType()} objects are <i>equal</i>.
-     *
-     * @param obj the object to be compared for equality with this JsonValue
-     * @return {@code true} if the specified object is equal to this
-     * JsonValue
-     */
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj instanceof JsonValue) {
-            return getValueType() == ((JsonValue) obj).getValueType();
-        }
-        return false;
-    }
-
-    /**
-     * Returns the hash code value for this {@link JsonValue} object.
-     * The hash code of the {@link JsonValue} object is defined to be
-     * its {@link #getValueType()} object's hash code.
-     *
-     * @return the hash code value for this {@link JsonValue} object
-     */
-    @Override
-    public int hashCode() {
-        return valueType.hashCode();
-    }
-
-    @Override
-    public String toString() {
-        return valueType.name().toLowerCase();
-    }
-
-}
Index: trunk/src/javax/json/JsonWriter.java
===================================================================
--- trunk/src/javax/json/JsonWriter.java	(revision 16017)
+++ 	(revision )
@@ -1,147 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.io.Closeable;
-
-/**
- * Writes a JSON {@link JsonObject object} or {@link JsonArray array} structure
- * to an output source.
- *
- * <p>The class {@link javax.json.Json} contains methods to create writers from
- * output sources ({@link java.io.OutputStream} and {@link java.io.Writer}).
- *
- * <p>
- * The following example demonstrates how write an empty JSON object:
- * <pre>
- * <code>
- * JsonWriter jsonWriter = Json.createWriter(...);
- * jsonWriter.writeObject(Json.createObjectBuilder().build());
- * jsonWriter.close();
- * </code>
- * </pre>
- *
- * <p>
- * The class {@link JsonWriterFactory} also contains methods to create
- * {@code JsonWriter} instances. A factory instance can be used to create
- * multiple writer instances with the same configuration. This the preferred
- * way to create multiple instances. A sample usage is shown in the following
- * example:
- * <pre>
- * <code>
- * JsonWriterFactory factory = Json.createWriterFactory(config);
- * JsonWriter writer1 = factory.createWriter(...);
- * JsonWriter writer2 = factory.createWriter(...);
- * </code>
- * </pre>
- */
-public interface JsonWriter extends  /*Auto*/Closeable {
-
-    /**
-     * Writes the specified JSON {@link JsonArray array} to the output
-     * source. This method needs to be called only once for a writer instance.
-     *
-     * @param array JSON array that is to be written to the output source
-     * @throws JsonException if the specified JSON object cannot be
-     *     written due to i/o error (IOException would be cause of
-     *     JsonException)
-     * @throws IllegalStateException if writeArray, writeObject, write or close
-     *     method is already called
-     */
-    void writeArray(JsonArray array);
-
-    /**
-     * Writes the specified JSON {@link JsonObject object} to the output
-     * source. This method needs to be called only once for a writer instance.
-     *
-     * @param object JSON object that is to be written to the output source
-     * @throws JsonException if the specified JSON object cannot be
-     *     written due to i/o error (IOException would be cause of JsonException)
-     * @throws IllegalStateException if writeArray, writeObject, write or close
-     *     method is already called
-     */
-    void writeObject(JsonObject object);
-
-    /**
-     * Writes the specified JSON {@link JsonObject object} or
-     * {@link JsonArray array} to the output source. This method needs
-     * to be called only once for a writer instance.
-     *
-     * @param value JSON array or object that is to be written to the output
-     *              source
-     * @throws JsonException if the specified JSON object cannot be
-     *     written due to i/o error (IOException would be cause of
-     *     JsonException)
-     * @throws IllegalStateException if writeArray, writeObject, write
-     *     or close method is already called
-     */
-    void write(JsonStructure value);
-
-    /**
-     * Closes this JSON writer and frees any resources associated with the
-     * writer. This method closes the underlying output source.
-     *
-     * @throws JsonException if an i/o error occurs (IOException would be
-     * cause of JsonException)
-     */
-
-    /**
-     * Writes the specified {@link JsonValue} to the output source.
-     * method needs to be called only once for a write instance.
-     *
-     * @param value a {@code JsonValue} to be written to the output
-     *              source
-     * @throws JsonException if the specified JSON object cannot be
-     *     written due to i/o error (IOException would be cause of
-     *     JsonException)
-     * @throws IllegalStateException if writeArray, writeObject, write
-     *     or close method is already called
-     *
-     * @since 1.1
-     */
-    default void write(JsonValue value) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    void close();
-
-}
Index: trunk/src/javax/json/JsonWriterFactory.java
===================================================================
--- trunk/src/javax/json/JsonWriterFactory.java	(revision 16017)
+++ 	(revision )
@@ -1,118 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json;
-
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.util.Map;
-
-/**
- * Factory to create {@link javax.json.JsonWriter} instances. If a factory
- * instance is configured with some configuration, that would be
- * used to configure the created writer instances.
- *
- * <p>
- * {@link javax.json.JsonWriter} can also be created using {@link Json}'s
- * {@code createWriter} methods. If multiple writer instances are created,
- * then creating them using a writer factory is preferred.
- *
- * <p>
- * <b>For example:</b>
- * <pre>
- * <code>
- * JsonWriterFactory factory = Json.createWriterFactory(...);
- * JsonWriter writer1 = factory.createWriter(...);
- * JsonWriter writer2 = factory.createWriter(...);
- * </code>
- * </pre>
- *
- * <p> All the methods in this class are safe for use by multiple concurrent
- * threads.
- */
-public interface JsonWriterFactory {
-
-    /**
-     * Creates a JSON writer to write a JSON {@link JsonObject object} or
-     * {@link JsonArray array} structure to the specified character stream.
-     * The writer is configured with the factory configuration.
-     *
-     * @param writer to which JSON object or array is written
-     * @return a JSON writer
-     */
-    JsonWriter createWriter(Writer writer);
-
-    /**
-     * Creates a JSON writer to write a JSON {@link JsonObject object} or
-     * {@link JsonArray array} structure to the specified byte stream.
-     * Characters written to the stream are encoded into bytes using UTF-8
-     * encoding. The writer is configured with the factory configuration.
-     *
-     * @param out to which JSON object or array is written
-     * @return a JSON writer
-     */
-    JsonWriter createWriter(OutputStream out);
-
-    /**
-     * Creates a JSON writer to write a JSON {@link JsonObject object} or
-     * {@link JsonArray array} structure to the specified byte stream.
-     * Characters written to the stream are encoded into bytes using the
-     * specified charset. The writer is configured with the factory
-     * configuration.
-     *
-     * @param out to which JSON object or array is written
-     * @param charset a charset
-     * @return a JSON writer
-     */
-    JsonWriter createWriter(OutputStream out, Charset charset);
-
-    /**
-     * Returns read-only map of supported provider specific configuration
-     * properties that are used to configure the created JSON writer objects.
-     * If there are any specified configuration properties that are not
-     * supported by the provider, they won't be part of the returned map.
-     *
-     * @return a map of supported provider specific properties that are used
-     * to configure the created writers. The map may be empty but not null.
-     */
-    Map<String, ?> getConfigInUse();
-
-}
Index: trunk/src/javax/json/package-info.java
===================================================================
--- trunk/src/javax/json/package-info.java	(revision 16017)
+++ 	(revision )
@@ -1,69 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/**
- * Provides an object model API to process <a href="http://json.org/">JSON</a>.
- *
- * <p>The object model API is a high-level API that provides immutable object
- * models for JSON object and array structures. These JSON structures are
- * represented as object models using the Java types {@link javax.json.JsonObject}
- * and {@link javax.json.JsonArray}. The interface {@code javax.json.JsonObject} provides
- * a {@link java.util.Map} view to access the unordered collection of zero or
- * more name/value pairs from the model. Similarly, the interface
- * {@code JsonArray} provides a {@link java.util.List} view to access the
- * ordered sequence of zero or more values from the model.
- *
- * <p>The object model API uses builder patterns to create and modify
- * these object models. The classes {@link javax.json.JsonObjectBuilder} and 
- * {@link javax.json.JsonArrayBuilder} provide methods to create and modify models
- * of type {@code JsonObject} and {@code JsonArray} respectively.
- *
- * <p>These object models can also be created from an input source using
- * the class {@link javax.json.JsonReader}. Similarly, these object models
- * can be written to an output source using the class {@link javax.json.JsonWriter}.
- * <p>
- * This package includes several classes that implement other JSON related
- * standards: <a href="http://tools.ietf.org/html/rfc6901">JSON Pointer</a>,
- * <a Href="http://tools.ietf.org/html/rfc6902">JSON Patch</a>, and
- * <a Href="http://tools.ietf.org/html/rfc7396">JSON Merge Patch</a>.
- * They can be used to retrieve, transform or manipulate values in an
- * object model.
- */
-package javax.json;
Index: trunk/src/javax/json/spi/JsonProvider.java
===================================================================
--- trunk/src/javax/json/spi/JsonProvider.java	(revision 16017)
+++ 	(revision )
@@ -1,504 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.spi;
-
-import javax.json.*;
-import javax.json.stream.JsonGenerator;
-import javax.json.stream.JsonGeneratorFactory;
-import javax.json.stream.JsonParser;
-import javax.json.stream.JsonParserFactory;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.io.Writer;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.ServiceLoader;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Optional;
-
-/**
- * Service provider for JSON processing objects.
- *
- * <p>All the methods in this class are safe for use by multiple concurrent
- * threads.
- *
- * @see ServiceLoader
- */
-public abstract class JsonProvider {
-
-    /**
-     * A constant representing the name of the default
-     * {@code JsonProvider} implementation class.
-     */
-    private static final String DEFAULT_PROVIDER
-            = "org.glassfish.json.JsonProviderImpl";
-
-    protected JsonProvider() {
-    }
-
-    /**
-     * Creates a JSON provider object. The provider is loaded using the
-     * {@link ServiceLoader#load(Class)} method. If there are no available
-     * service providers, this method returns the default service provider.
-     * Users are recommended to cache the result of this method.
-     *
-     * @see ServiceLoader
-     * @return a JSON provider
-     */
-    public static JsonProvider provider() {
-        ServiceLoader<JsonProvider> loader = ServiceLoader.load(JsonProvider.class);
-        Iterator<JsonProvider> it = loader.iterator();
-        if (it.hasNext()) {
-            return it.next();
-        }
-        try {
-            Class<?> clazz = Class.forName(DEFAULT_PROVIDER);
-            return (JsonProvider) clazz.newInstance();
-        } catch (ClassNotFoundException x) {
-            throw new JsonException(
-                    "Provider " + DEFAULT_PROVIDER + " not found", x);
-        } catch (Exception x) {
-            throw new JsonException(
-                    "Provider " + DEFAULT_PROVIDER + " could not be instantiated: " + x,
-                    x);
-        }
-    }
-
-    /**
-     * Creates a JSON parser from a character stream.
-     *
-     * @param reader i/o reader from which JSON is to be read
-     * @return a JSON parser
-     */
-    public abstract JsonParser createParser(Reader reader);
-
-    /**
-     * Creates a JSON parser from the specified byte stream.
-     * The character encoding of the stream is determined
-     * as defined in <a href="http://tools.ietf.org/rfc/rfc7159.txt">RFC 7159
-     * </a>.
-     *
-     * @param in i/o stream from which JSON is to be read
-     * @throws JsonException if encoding cannot be determined
-     *         or i/o error (IOException would be cause of JsonException)
-     * @return a JSON parser
-     */
-    public abstract JsonParser createParser(InputStream in);
-
-    /**
-     * Creates a parser factory for creating {@link JsonParser} instances.
-     *
-     * @return a JSON parser factory
-     *
-    public abstract JsonParserFactory createParserFactory();
-     */
-
-    /**
-     * Creates a parser factory for creating {@link JsonParser} instances.
-     * The factory is configured with the specified map of
-     * provider specific configuration properties. Provider implementations
-     * should ignore any unsupported configuration properties specified in
-     * the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON parsers. The map may be empty or null
-     * @return a JSON parser factory
-     */
-    public abstract JsonParserFactory createParserFactory(Map<String, ?> config);
-
-    /**
-     * Creates a JSON generator for writing JSON text to a character stream.
-     *
-     * @param writer a i/o writer to which JSON is written
-     * @return a JSON generator
-     */
-    public abstract JsonGenerator createGenerator(Writer writer);
-
-    /**
-     * Creates a JSON generator for writing JSON text to a byte stream.
-     *
-     * @param out i/o stream to which JSON is written
-     * @return a JSON generator
-     */
-    public abstract JsonGenerator createGenerator(OutputStream out);
-
-    /**
-     * Creates a generator factory for creating {@link JsonGenerator} instances.
-     *
-     * @return a JSON generator factory
-     *
-    public abstract JsonGeneratorFactory createGeneratorFactory();
-     */
-
-    /**
-     * Creates a generator factory for creating {@link JsonGenerator} instances.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should
-     * ignore any unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON generators. The map may be empty or null
-     * @return a JSON generator factory
-     */
-    public abstract JsonGeneratorFactory createGeneratorFactory(Map<String, ?> config);
-
-    /**
-     * Creates a JSON reader from a character stream.
-     *
-     * @param reader a reader from which JSON is to be read
-     * @return a JSON reader
-     */
-    public abstract JsonReader createReader(Reader reader);
-
-    /**
-     * Creates a JSON reader from a byte stream. The character encoding of
-     * the stream is determined as described in
-     * <a href="http://tools.ietf.org/rfc/rfc7159.txt">RFC 7159</a>.
-     *
-     * @param in a byte stream from which JSON is to be read
-     * @return a JSON reader
-     */
-    public abstract JsonReader createReader(InputStream in);
-
-    /**
-     * Creates a JSON writer to write a
-     * JSON {@link JsonObject object} or {@link JsonArray array}
-     * structure to the specified character stream.
-     *
-     * @param writer to which JSON object or array is written
-     * @return a JSON writer
-     */
-    public abstract JsonWriter createWriter(Writer writer);
-
-    /**
-     * Creates a JSON writer to write a
-     * JSON {@link JsonObject object} or {@link JsonArray array}
-     * structure to the specified byte stream. Characters written to
-     * the stream are encoded into bytes using UTF-8 encoding.
-     *
-     * @param out to which JSON object or array is written
-     * @return a JSON writer
-     */
-    public abstract JsonWriter createWriter(OutputStream out);
-
-    /**
-     * Creates a writer factory for creating {@link JsonWriter} objects.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should ignore any
-     * unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON writers. The map may be empty or null
-     * @return a JSON writer factory
-     */
-    public abstract JsonWriterFactory createWriterFactory(Map<String,?> config);
-
-    /**
-     * Creates a reader factory for creating {@link JsonReader} objects.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should ignore any
-     * unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON readers. The map may be empty or null
-     * @return a JSON reader factory
-     */
-    public abstract JsonReaderFactory createReaderFactory(Map<String,?> config);
-
-    /**
-     * Creates a JSON object builder.
-     *
-     * @return a JSON object builder
-     */
-    public abstract JsonObjectBuilder createObjectBuilder();
-
-    /**
-     * Creates a JSON object builder, initialized with the specified object.
-     *
-     * @param object the initial JSON object in the builder
-     * @return a JSON object builder
-     *
-     * @since 1.1
-     */
-    public JsonObjectBuilder createObjectBuilder(JsonObject object) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a JSON object builder, initialized with the data from specified {@code map}.
-     * If the @{code map} contains {@link Optional}s then resulting JSON object builder
-     * contains the key from the {@code map} only if the {@link Optional} is not empty.
-     *
-     * @param map the initial object in the builder
-     * @return a JSON object builder
-     * @exception IllegalArgumentException if the value from the {@code map} cannot be converted
-     *            to the corresponding {@link JsonValue}
-     *
-     * @since 1.1
-     */
-    public JsonObjectBuilder createObjectBuilder(Map<String, Object> map) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a JSON array builder.
-     *
-     * @return a JSON array builder
-     */
-    public abstract JsonArrayBuilder createArrayBuilder();
-
-    /**
-     * Creates a JSON array builder, initialized with the specified array.
-     *
-     * @param array the initial JSON array in the builder
-     * @return a JSON array builder
-     *
-     * @since 1.1
-     */
-    public JsonArrayBuilder createArrayBuilder(JsonArray array) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates JSON Pointer (<a href="http://tools.ietf.org/html/rfc6901">RFC 6901</a>)
-     * from given {@code jsonPointer} string.
-     * <ul>
-     *     <li>An empty {@code jsonPointer} string defines a reference to the target itself.</li>
-     *     <li>If the {@code jsonPointer} string is non-empty, it must be a sequence of '{@code /}' prefixed tokens.</li>
-     * </ul>
-     *
-     * @param jsonPointer the JSON Pointer string
-     * @throws NullPointerException if {@code jsonPointer} is {@code null}
-     * @throws JsonException if {@code jsonPointer} is not a valid JSON Pointer
-     * @return a JSON Pointer
-     *
-     * @since 1.1
-     */
-    public JsonPointer createPointer(String jsonPointer) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a JSON Patch builder (<a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>).
-     *
-     * @return a JSON Patch builder
-     *
-     * @since 1.1
-     */
-    public JsonPatchBuilder createPatchBuilder() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a JSON Patch builder
-     * (<a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>),
-     * initialized with the specified operations.
-     *
-     * @param array the initial patch operations
-     * @return a JSON Patch builder
-     *
-     * @since 1.1
-     */
-    public JsonPatchBuilder createPatchBuilder(JsonArray array) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a JSON Patch (<a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>)
-     * from the specified operations.
-     *
-     * @param array patch operations
-     * @return a JSON Patch
-     *
-     * @since 1.1
-     */
-    public JsonPatch createPatch(JsonArray array) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Generates a JSON Patch (<a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>)
-     * from the source and target {@code JsonStructure}.
-     * The generated JSON Patch need not be unique.
-     *
-     * @param source the source
-     * @param target the target, must be the same type as the source
-     * @return a JSON Patch which when applied to the source, yields the target
-     *
-     * @since 1.1
-     */
-    public JsonPatch createDiff(JsonStructure source, JsonStructure target) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates JSON Merge Patch (<a href="http://tools.ietf.org/html/rfc7396">RFC 7396</a>)
-     * from specified {@code JsonValue}.
-     *
-     * @param patch the patch
-     * @return a JSON Merge Patch
-     *
-     * @since 1.1
-     */
-    public JsonMergePatch createMergePatch(JsonValue patch) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Generates a JSON Merge Patch (<a href="http://tools.ietf.org/html/rfc7396">RFC 7396</a>)
-     * from the source and target {@code JsonValue}s
-     * which when applied to the {@code source}, yields the {@code target}.
-     *
-     * @param source the source
-     * @param target the target
-     * @return a JSON Merge Patch
-     *
-     * @since 1.1
-     */
-    public JsonMergePatch createMergeDiff(JsonValue source, JsonValue target) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a JSON array builder, initialized with the content of specified {@code collection}.
-     * If the @{code collection} contains {@link Optional}s then resulting JSON array builder
-     * contains the value from the {@code collection} only if the {@link Optional} is not empty.
-     *
-     * @param collection the initial data for the builder
-     * @return a JSON array builder
-     * @exception IllegalArgumentException if the value from the {@code collection} cannot be converted
-     *            to the corresponding {@link JsonValue}
-     *
-     * @since 1.1
-     */
-    public JsonArrayBuilder createArrayBuilder(Collection<?> collection) {
-        throw new UnsupportedOperationException();
-    }
-
-
-    /**
-     * Creates a builder factory for creating {@link JsonArrayBuilder}
-     * and {@link JsonObjectBuilder} objects.
-     * The factory is configured with the specified map of provider specific
-     * configuration properties. Provider implementations should ignore any
-     * unsupported configuration properties specified in the map.
-     *
-     * @param config a map of provider specific properties to configure the
-     *               JSON builders. The map may be empty or null
-     * @return a JSON builder factory
-     */
-    public abstract JsonBuilderFactory createBuilderFactory(Map<String,?> config);
-
-    /**
-     * Creates a JsonString.
-     *
-     * @param value a JSON string
-     * @return the JsonString for the string
-     *
-     * @since 1.1
-     */
-    public JsonString createValue(String value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a JsonNumber.
-     *
-     * @param value a JSON number
-     * @return the JsonNumber for the number
-     *
-     * @since 1.1
-     */
-    public JsonNumber createValue(int value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a JsonNumber.
-     *
-     * @param value a JSON number
-     * @return the JsonNumber for the number
-     *
-     * @since 1.1
-     */
-    public JsonNumber createValue(long value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a JsonNumber.
-     *
-     * @param value a JSON number
-     * @return the JsonNumber for the number
-     *
-     * @since 1.1
-     */
-    public JsonNumber createValue(double value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a JsonNumber.
-     *
-     * @param value a JSON number
-     * @return the JsonNumber for the number
-     *
-     * @since 1.1
-     */
-    public JsonNumber createValue(BigDecimal value) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Creates a JsonNumber.
-     *
-     * @param value a JSON number
-     * @return the JsonNumber for the number
-     *
-     * @since 1.1
-     */
-    public JsonNumber createValue(BigInteger value) {
-        throw new UnsupportedOperationException();
-    }
-}
Index: trunk/src/javax/json/spi/package-info.java
===================================================================
--- trunk/src/javax/json/spi/package-info.java	(revision 16017)
+++ 	(revision )
@@ -1,56 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/**
- * Service Provider Interface (SPI) to plug in implementations for
- * JSON processing objects.
- *
- * <p> {@link javax.json.spi.JsonProvider JsonProvider} is an abstract class 
- * that provides a service for creating JSON processing instances.
- * A <i>service provider</i> for {@code JsonProvider} provides an 
- * specific implementation by subclassing and implementing the methods in
- * {@code JsonProvider}. This enables using custom, efficient JSON processing
- * implementations (for e.g. parser and generator) other than the default ones.
- *
- * <p>The API locates and loads providers using {@link java.util.ServiceLoader}.
- *
- * @since JSON Processing 1.0
- */
-package javax.json.spi;
Index: trunk/src/javax/json/stream/JsonCollectors.java
===================================================================
--- trunk/src/javax/json/stream/JsonCollectors.java	(revision 16017)
+++ 	(revision )
@@ -1,184 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.stream;
-
-import java.util.Map;
-import java.util.HashMap;
-import java.util.stream.Collector;
-import java.util.function.BinaryOperator;
-import java.util.function.Function;
-import java.util.function.BiConsumer;
-
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonValue;
-import javax.json.JsonException;
-
-/**
- * This class contains some implementations of {@code java.util.stream.Collector} for accumulating
- * {@link JsonValue}s into {@link JsonArray} and {@link JsonObject}.
- *
- * @since 1.1
- */
-
-public final class JsonCollectors {
-
-    private JsonCollectors() {
-    }
-
-    /**
-     * Constructs a {@code java.util.stream.Collector} that accumulates the input {@code JsonValue}
-     * elements into a {@code JsonArray}.
-     *
-     * @return the constructed Collector
-     */
-    public static Collector<JsonValue, JsonArrayBuilder, JsonArray> toJsonArray() {
-        return Collector.of(
-                Json::createArrayBuilder,
-                JsonArrayBuilder::add,
-                JsonArrayBuilder::addAll,
-                JsonArrayBuilder::build);
-    }
-
-    /**
-     * Constructs a {@code java.util.stream.Collector} that accumulates the input {@code Map.Entry<String,JsonValue>}
-     * elements into a {@code JsonObject}.
-     *
-     * @return the constructed Collector
-     */
-    public static Collector<Map.Entry<String, JsonValue>, JsonObjectBuilder, JsonObject> toJsonObject() {
-        return Collector.of(
-                Json::createObjectBuilder,
-                (JsonObjectBuilder b, Map.Entry<String, JsonValue> v) -> b.add(v.getKey(), v.getValue()),
-                JsonObjectBuilder::addAll,
-                JsonObjectBuilder::build);
-    }
-
-    /**
-     * Constructs a {@code java.util.stream.Collector} that accumulates the input {@code JsonValue}
-     * elements into a {@code JsonObject}.  The name/value pairs of the {@code JsonObject} are computed
-     * by applying the provided mapping functions.
-     *
-     * @param keyMapper a mapping function to produce names.
-     * @param valueMapper a mapping function to produce values
-     * @return the constructed Collector
-     */
-    public static Collector<JsonValue, JsonObjectBuilder, JsonObject>
-                toJsonObject(Function<JsonValue, String> keyMapper,
-                             Function<JsonValue, JsonValue> valueMapper) {
-        return Collector.of(
-                Json::createObjectBuilder,
-                (b, v) -> b.add(keyMapper.apply(v), valueMapper.apply(v)),
-                JsonObjectBuilder::addAll,
-                JsonObjectBuilder::build,
-                Collector.Characteristics.UNORDERED);
-    }
-
-    /**
-     * Constructs a {@code java.util.stream.Collector} that implements a "group by" operation on the
-     * input {@code JsonValue} elements. A classifier function maps the input {@code JsonValue}s to keys, and
-     * the {@code JsonValue}s are partitioned into groups according to the value of the key.
-     * A reduction operation is performed on the {@code JsonValue}s in each group, using the
-     * downstream {@code Collector}. For each group, the key and the results of the reduction operation
-     * become the name/value pairs of the resultant {@code JsonObject}.
-     *
-     * @param <T> the intermediate accumulation {@code JsonArrayBuilder} of the downstream collector
-     * @param classifier a function mapping the input {@code JsonValue}s to a String, producing keys
-     * @param downstream a {@code Collector} that implements a reduction operation on the
-     *        {@code JsonValue}s in each group.
-     * @return the constructed {@code Collector}
-     */
-    public static <T extends JsonArrayBuilder> Collector<JsonValue, Map<String, T>, JsonObject>
-                groupingBy(Function<JsonValue, String> classifier,
-                           Collector<JsonValue, T, JsonArray> downstream) {
-
-        BiConsumer<Map<String, T>, JsonValue> accumulator =
-            (map, value) -> {
-                String key = classifier.apply(value);
-                if (key == null) {
-                    throw new JsonException("element cannot be mapped to a null key");
-                }
-                // Build a map of key to JsonArrayBuilder
-                T arrayBuilder =
-                    map.computeIfAbsent(key, v->downstream.supplier().get());
-                // Add elements from downstream Collector to the arrayBuilder.
-                downstream.accumulator().accept(arrayBuilder, value);
-            };
-        Function<Map<String, T>, JsonObject> finisher =
-            map -> {
-                // transform the map of name: JsonArrayBuilder to
-                //                      name: JsonArray
-                // using the downstream collector for reducing the JsonArray
-                JsonObjectBuilder objectBuilder = Json.createObjectBuilder();
-                map.forEach((k, v) -> {
-                    JsonArray array = downstream.finisher().apply(v);
-                    objectBuilder.add(k, array);
-                });
-                return objectBuilder.build();
-            };
-        BinaryOperator<Map<String, T>> combiner =
-            (map1, map2) -> {
-                map1.putAll(map2);
-                return map1;
-            };
-        return Collector.of(HashMap::new, accumulator, combiner, finisher,
-            Collector.Characteristics.UNORDERED);
-    }
-
-    /**
-     * Constructs a {@code java.util.stream.Collector} that implements a "group by" operation on the
-     * input {@code JsonValue} elements. A classifier function maps the input {@code JsonValue}s to keys, and
-     * the {@code JsonValue}s are partitioned into groups according to the value of the key.
-     * The {@code JsonValue}s in each group are added to a {@code JsonArray}.  The key and the
-     * {@code JsonArray} in each group becomes the name/value pair of the resultant {@code JsonObject}.
-     *
-     * @param classifier a function mapping the input {@code JsonValue}s to a String, producing keys
-     * @return the constructed {@code Collector}
-     */
-    public static Collector<JsonValue, Map<String, JsonArrayBuilder>, JsonObject>
-                groupingBy(Function<JsonValue, String> classifier) {
-        return groupingBy(classifier, toJsonArray());
-    }
-}
-
Index: trunk/src/javax/json/stream/JsonGenerationException.java
===================================================================
--- trunk/src/javax/json/stream/JsonGenerationException.java	(revision 16017)
+++ 	(revision )
@@ -1,81 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.stream;
-
-import javax.json.JsonException;
-
-/**
- * {@code JsonGenerationException} indicates an incorrect JSON is
- * being generated.
- */
-public class JsonGenerationException extends JsonException {
-
-    /**
-     * Constructs a new runtime exception with the specified detail message.
-     * The cause is not initialized, and may subsequently be initialized by a
-     * call to {@link #initCause}.
-     *
-     * @param message the detail message. The detail message is saved for
-     *                later retrieval by the {@link #getMessage()} method.
-     */
-    public JsonGenerationException(String message) {
-        super(message);
-    }
-
-    /**
-     * Constructs a new runtime exception with the specified detail message and
-     * cause.  <p>Note that the detail message associated with
-     * {@code cause} is <i>not</i> automatically incorporated in
-     * this runtime exception's detail message.
-     *
-     * @param message the detail message (which is saved for later retrieval
-     *                by the {@link #getMessage()} method).
-     * @param cause the cause (which is saved for later retrieval by the
-     *              {@link #getCause()} method). (A <tt>null</tt> value is
-     *              permitted, and indicates that the cause is nonexistent or
-     *              unknown.)
-     */
-    public JsonGenerationException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-}
-
Index: trunk/src/javax/json/stream/JsonGenerator.java
===================================================================
--- trunk/src/javax/json/stream/JsonGenerator.java	(revision 16017)
+++ 	(revision )
@@ -1,563 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.stream;
-
-import javax.json.JsonValue;
-import java.io.Closeable;
-import java.io.Flushable;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * Writes JSON data to an output source in a streaming way. The class
- * {@link javax.json.Json} contains methods to create generators for character
- * or output streams ({@link java.io.Writer} and {@link java.io.OutputStream}).
- *
- * <p>
- * The following example shows how to create a JSON generator:
- * <pre>
- * <code>
- * JsonGenerator generator = Json.createGenerator(...);
- * </code>
- * </pre>
- *
- * <p>
- * The class {@link JsonGeneratorFactory} also contains methods to create
- * {@code JsonGenerator} instances. {@link JsonGeneratorFactory} should be used
- * when creating multiple generator instances, as in the following example:
- * <pre>
- * <code>
- * JsonGeneratorFactory factory = Json.createGeneratorFactory();
- * JsonGenerator generator1 = factory.createGenerator(...);
- * JsonGenerator generator2 = factory.createGenerator(...);
- * </code>
- * </pre>
- *
- * <p>
- * JSON objects can be created using {@code JsonGenerator} by calling the
- * {@link #writeStartObject()} method and then adding name/value pairs with the
- * {@code write} method.
- * <p>
- * The following example shows how to generate an empty JSON object:
- * <pre>
- * <code>
- * JsonGenerator generator = ...;
- * generator.writeStartObject().writeEnd().close();
- * </code>
- * </pre>
- *
- * JSON arrays can be created using {@code JsonGenerator} by calling the
- * {@link #writeStartArray()} method and then adding values with the
- * {@code write} method.
- *
- * <p>
- * The following example shows how to generate an empty JSON array:
- * <pre>
- * <code>
- * JsonGenerator generator = ...;
- * generator.writeStartArray().writeEnd().close();
- * </code>
- * </pre>
- *
- * <p>
- * Other JSON values (that are not JSON objects or arrays) can be created
- * by calling the appropriate {@code write} methods.
- * <p>
- * The following example shows how to generate a JSON string:
- * <pre><code>
- * JsonGenerator generator = ...;
- * generator.write("message").close();
- * </code></pre>
- *
- * {@code JsonGenerator} methods can be chained as in the following example:
- * <pre>
- * <code>
- * generator
- *     .writeStartObject()
- *         .write("firstName", "John")
- *         .write("lastName", "Smith")
- *         .write("age", 25)
- *         .writeStartObject("address")
- *             .write("streetAddress", "21 2nd Street")
- *             .write("city", "New York")
- *             .write("state", "NY")
- *             .write("postalCode", "10021")
- *         .writeEnd()
- *         .writeStartArray("phoneNumber")
- *             .writeStartObject()
- *                 .write("type", "home")
- *                 .write("number", "212 555-1234")
- *             .writeEnd()
- *             .writeStartObject()
- *                 .write("type", "fax")
- *                 .write("number", "646 555-4567")
- *             .writeEnd()
- *         .writeEnd()
- *     .writeEnd();
- * generator.close();
- * </code>
- * </pre>
- *
- * The example code above generates the following JSON (or equivalent):
- * <pre>
- * <code>
- * {
- *   "firstName": "John", "lastName": "Smith", "age": 25,
- *   "address" : {
- *       "streetAddress": "21 2nd Street",
- *       "city": "New York",
- *       "state": "NY",
- *       "postalCode": "10021"
- *   },
- *   "phoneNumber": [
- *       {"type": "home", "number": "212 555-1234"},
- *       {"type": "fax", "number": "646 555-4567"}
- *    ]
- * }
- * </code>
- * </pre>
- *
- * The generated JSON text must strictly conform to the grammar defined in
- * <a href="http://www.ietf.org/rfc/rfc7159.txt">RFC 7159</a>.
- *
- * @see javax.json.Json
- * @see JsonGeneratorFactory
- */
-public interface JsonGenerator extends Flushable, /*Auto*/Closeable {
-    /**
-     * Configuration property to generate JSON prettily. All providers
-     * must support this property. The value of the property could be
-     * be anything.
-     */
-    String PRETTY_PRINTING = "javax.json.stream.JsonGenerator.prettyPrinting" ;
-
-    /**
-     * Writes the JSON start object character. It starts a new child object
-     * context within which JSON name/value pairs can be written to the object.
-     * This method is valid only in an array context, field context or in no context (when a
-     * context is not yet started). This method can only be called once in
-     * no context.
-     *
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is called within an
-     *      object context or if it is called more than once in no context.
-     */
-    JsonGenerator writeStartObject();
-
-    /**
-     * Writes the JSON name/start object character pair in the current
-     * object context. It starts a new child object context within which JSON
-     * name/value pairs can be written to the object.
-     *
-     * @param name a name within the JSON name/object pair to be written
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *     object context
-     */
-    JsonGenerator writeStartObject(String name);
-
-    /**
-     * Writes the JSON name with a colon. It starts a field context, in which valid
-     * options are writing a value, starting an object or an array.
-     *
-     * Writing value closes field context, if object or array is started after field name,
-     * field context will be closed after object/array close.
-     *
-     * @param name name of json field
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *     object context
-     *
-     * @since 1.1
-     */
-    JsonGenerator writeKey(String name);
-
-    /**
-     * Writes the JSON start array character. It starts a new child array
-     * context within which JSON values can be written to the array. This
-     * method is valid only in an array context, field context or in no context (when a
-     * context is not yet started). This method can only be called once in
-     * no context.
-     *
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is called within an
-     *      object context or if called more than once in no context
-     */
-    JsonGenerator writeStartArray();
-
-    /**
-     * Writes the JSON name/start array character pair with in the current
-     * object context. It starts a new child array context within which JSON
-     * values can be written to the array.
-     *
-     * @param name a name within the JSON name/array pair to be written
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within
-     *      an object context
-     */
-    JsonGenerator writeStartArray(String name);
-
-    /**
-     * Writes a JSON name/value pair in the current object context.
-     *
-     * @param name a name in the JSON name/value pair to be written in
-     *             current JSON object
-     * @param value a value in the JSON name/value pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      object context
-     */
-    JsonGenerator write(String name, JsonValue value);
-
-    /**
-     * Writes a JSON name/string value pair in the current object context.
-     * The specified value is written as JSON string value.
-     *
-     * @param name a name in the JSON name/string pair to be written in
-     *             current JSON object
-     * @param value a value in the JSON name/string pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      object context
-     */
-    JsonGenerator write(String name, String value);
-
-    /**
-     * Writes a JSON name/number value pair in the current object context.
-     * The specified value is written as a JSON number value. The string
-     * {@code new BigDecimal(value).toString()}
-     * is used as the text value for writing.
-     *
-     * @param name a name in the JSON name/number pair to be written in
-     *             current JSON object
-     * @param value a value in the JSON name/number pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      object context.
-     */
-    JsonGenerator write(String name, BigInteger value);
-
-    /**
-     * Writes a JSON name/number value pair in the current object context.
-     * The specified value is written as a JSON number value. The specified
-     * value's {@code toString()} is used as the text value for writing.
-     *
-     * @param name a name in the JSON name/number pair to be written in
-     *             current JSON object
-     * @param value a value in the JSON name/number pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      object context.
-     */
-    JsonGenerator write(String name, BigDecimal value);
-
-    /**
-     * Writes a JSON name/number value pair in the current object context.
-     * The specified value is written as a JSON number value. The string
-     * {@code new BigDecimal(value).toString()} is used as the text value
-     * for writing.
-     *
-     * @param name a name in the JSON name/number pair to be written in
-     *             current JSON object
-     * @param value a value in the JSON name/number pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      object context.
-     */
-    JsonGenerator write(String name, int value);
-
-    /**
-     * Writes a JSON name/number value pair in the current object context.
-     * The specified value is written as a JSON number value. The string
-     * {@code new BigDecimal(value).toString()} is used as the text
-     * value for writing.
-     *
-     * @param name a name in the JSON name/number pair to be written in
-     *             current JSON object
-     * @param value a value in the JSON name/number pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      object context.
-     */
-    JsonGenerator write(String name, long value);
-
-    /**
-     * Writes a JSON name/number value pair in the current object context.
-     * The specified value is written as a JSON number value. The string
-     * {@code BigDecimal.valueOf(double).toString()}
-     * is used as the text value for writing.
-     *
-     * @param name a name in the JSON name/number pair to be written in
-     *             current JSON object
-     * @param value a value in the JSON name/number pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws NumberFormatException if the value is Not-a-Number (NaN) or infinity.
-     * @throws JsonGenerationException if this method is not called within an
-     *      object context
-     */
-    JsonGenerator write(String name, double value);
-
-    /**
-     * Writes a JSON name/boolean value pair in the current object context.
-     * If value is true, it writes the JSON {@code true} value, otherwise
-     * it writes the JSON {@code false} value.
-     *
-     * @param name a name in the JSON name/boolean pair to be written in
-     *             current JSON object
-     * @param value a value in the JSON name/boolean pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      object context.
-     */
-    JsonGenerator write(String name, boolean value);
-
-
-    /**
-     * Writes a JSON name/null value pair in an current object context.
-     *
-     * @param name a name in the JSON name/null pair to be written in
-     *             current JSON object
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      object context
-     */
-    JsonGenerator writeNull(String name);
-
-    /**
-     * Writes the end of the current context. If the current context is
-     * an array context, this method writes the end-of-array character (']').
-     * If the current context is an object context, this method writes the
-     * end-of-object character ('}'). After writing the end of the current
-     * context, the parent context becomes the new current context.
-     * If parent context is field context, it is closed.
-     *
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is called in no context.
-     */
-    JsonGenerator writeEnd();
-
-    /**
-     * Writes the specified value as a JSON value within
-     * the current array, field or root context.
-     *
-     * @param value a value to be written in current JSON array
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      array or root context.
-     */
-    JsonGenerator write(JsonValue value);
-
-    /**
-     * Writes the specified value as a JSON string value within
-     * the current array, field or root context.
-     *
-     * @param value a value to be written in current JSON array
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      array or root context.
-     */
-    JsonGenerator write(String value);
-
-    /**
-     * Writes the specified value as a JSON number value within
-     * the current array, field or root context. The specified value's {@code toString()}
-     * is used as the the text value for writing.
-     *
-     * @param value a value to be written in current JSON array
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      array or root context.
-     *
-     * @see javax.json.JsonNumber
-     */
-    JsonGenerator write(BigDecimal value);
-
-    /**
-     * Writes the specified value as a JSON number value within
-     * the current array, field or root context. The string {@code new BigDecimal(value).toString()}
-     * is used as the text value for writing.
-     *
-     * @param value a value to be written in current JSON array
-     * @return this generator.
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      array or root context.
-     *
-     * @see javax.json.JsonNumber
-     */
-    JsonGenerator write(BigInteger value);
-
-    /**
-     * Writes the specified value as a JSON number value within
-     * the current array, field or root context. The string {@code new BigDecimal(value).toString()}
-     * is used as the text value for writing.
-     *
-     * @param value a value to be written in current JSON array
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      array or root context.
-     */
-    JsonGenerator write(int value);
-
-    /**
-     * Writes the specified value as a JSON number value within
-     * the current array, field or root context. The string {@code new BigDecimal(value).toString()}
-     * is used as the text value for writing.
-     *
-     * @param value a value to be written in current JSON array
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      array or root context.
-     */
-    JsonGenerator write(long value);
-
-    /**
-     * Writes the specified value as a JSON number value within the current
-     * array, field or root context. The string {@code BigDecimal.valueOf(value).toString()}
-     * is used as the text value for writing.
-     *
-     * @param value a value to be written in current JSON array
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      array or root context.
-     * @throws NumberFormatException if the value is Not-a-Number (NaN) or infinity.
-     */
-    JsonGenerator write(double value);
-
-    /**
-     * Writes a JSON true or false value within the current array, field or root context.
-     * If value is true, this method writes the JSON {@code true} value,
-     * otherwise it writes the JSON {@code false} value.
-     *
-     * @param value a {@code boolean} value
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      array or root context.
-     */
-    JsonGenerator write(boolean value);
-
-    /**
-     * Writes a JSON null value within the current array, field or root context.
-     *
-     * @return this generator
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if this method is not called within an
-     *      array or root context.
-     */
-    JsonGenerator writeNull();
-
-    /**
-     * Closes this generator and frees any resources associated with it.
-     * This method closes the underlying output source.
-     *
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonGenerationException if an incomplete JSON is generated
-     */
-    @Override
-    void close();
-
-    /**
-     * Flushes the underlying output source. If the generator has saved
-     * any characters in a buffer, writes them immediately to the underlying
-     * output source before flushing it.
-     *
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     */
-    @Override
-    void flush();
-
-}
Index: trunk/src/javax/json/stream/JsonGeneratorFactory.java
===================================================================
--- trunk/src/javax/json/stream/JsonGeneratorFactory.java	(revision 16017)
+++ 	(revision )
@@ -1,113 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.stream;
-
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.util.Map;
-
-/**
- * Factory to create {@link JsonGenerator} instances. If a factory
- * instance is configured with some configuration, the configuration applies
- * to all generator instances created using that factory instance.
- *
- * <p>
- * The class {@link javax.json.Json Json} also provides methods to create
- * {@link JsonGenerator} instances, but using {@code JsonGeneratorFactory} is
- * preferred when creating multiple generator instances as shown in the
- * following example:
- *
- * <pre>
- * <code>
- * JsonGeneratorFactory factory = Json.createGeneratorFactory();
- * JsonGenerator generator1 = factory.createGenerator(...);
- * JsonGenerator generator2 = factory.createGenerator(...);
- * </code>
- * </pre>
- *
- * <p> All the methods in this class are safe for use by multiple concurrent
- * threads.
- */
-public interface JsonGeneratorFactory {
-
-    /**
-     * Creates a JSON generator to write JSON text to a character stream.
-     * The generator is configured with the factory configuration.
-     *
-     * @param writer i/o writer to which JSON is written
-     * @return the created JSON generator
-     */
-    JsonGenerator createGenerator(Writer writer);
-
-    /**
-     * Creates a JSON generator to write JSON text to a byte stream. Characters 
-     * written to the stream are encoded into bytes using UTF-8 encoding. 
-     * The generator is configured with the factory's configuration.
-     *
-     * @param out i/o stream to which JSON is written
-     * @return the created JSON generator
-     */
-    JsonGenerator createGenerator(OutputStream out);
-
-    /**
-     * Creates a JSON generator to write JSON text to a byte stream. Characters 
-     * written to the stream are encoded into bytes using the specified charset. 
-     * The generator is configured with the factory's configuration.
-     *
-     * @param out i/o stream to which JSON is written
-     * @param charset a charset
-     * @return the created JSON generator
-     */
-    JsonGenerator createGenerator(OutputStream out, Charset charset);
-
-    /**
-     * Returns a read-only map of supported provider specific configuration
-     * properties that are used to configure the JSON generators.
-     * If there are any specified configuration properties that are not
-     * supported by the provider, they won't be part of the returned map.
-     *
-     * @return a map of supported provider specific properties that are used
-     * to configure the created generators. The map may be empty but not null
-     */
-    Map<String, ?> getConfigInUse();
-
-}
Index: trunk/src/javax/json/stream/JsonLocation.java
===================================================================
--- trunk/src/javax/json/stream/JsonLocation.java	(revision 16017)
+++ 	(revision )
@@ -1,85 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.stream;
-
-/**
- * Provides the location information of a JSON event in an input source. The
- * {@code JsonLocation} information can be used to identify incorrect JSON
- * or can be used by higher frameworks to know about the processing location.
- *
- * <p>All the information provided by a {@code JsonLocation} is optional. For
- * example, a provider may only report line numbers. Also, there may not be any
- * location information for an input source. For example, if a
- * {@code JsonParser} is created using
- * {@link javax.json.JsonArray JsonArray} input source, all the methods in
- * this class return -1.
- * @see JsonParser
- * @see JsonParsingException
- */
-public interface JsonLocation {
-
-    /**
-     * Return the line number (starts with 1 for the first line) for the current JSON event in the input source.
-     *
-     * @return the line number (starts with 1 for the first line) or -1 if none is available
-     */
-    long getLineNumber();
-
-    /**
-     * Return the column number (starts with 1 for the first column) for the current JSON event in the input source.
-     *
-     * @return the column number (starts with 1 for the first column) or -1 if none is available
-     */
-    long getColumnNumber();
-
-    /**
-     * Return the stream offset into the input source this location
-     * is pointing to. If the input source is a file or a byte stream then
-     * this is the byte offset into that stream, but if the input source is
-     * a character media then the offset is the character offset.
-     * Returns -1 if there is no offset available.
-     *
-     * @return the offset of input source stream, or -1 if there is
-     * no offset available
-     */
-    long getStreamOffset();
-
-}
Index: trunk/src/javax/json/stream/JsonParser.java
===================================================================
--- trunk/src/javax/json/stream/JsonParser.java	(revision 16017)
+++ 	(revision )
@@ -1,511 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.stream;
-
-
-import java.io.Closeable;
-import java.math.BigDecimal;
-import java.util.stream.Stream;
-import java.util.Map;
-
-import javax.json.JsonValue;
-import javax.json.JsonObject;
-import javax.json.JsonArray;
-
-/**
- * Provides forward, read-only access to JSON data in a streaming way. This
- * is the most efficient way for reading JSON data.
- * This is the only way to parse and process JSON data that are too big to be loaded in memory.
- * <p>The class
- * {@link javax.json.Json} contains methods to create parsers from input
- * sources ({@link java.io.InputStream} and {@link java.io.Reader}).
- *
- * <p>
- * The following example demonstrates how to create a parser from a string
- * that contains an empty JSON array:
- * <pre>
- * <code>
- * JsonParser parser = Json.createParser(new StringReader("[]"));
- * </code>
- * </pre>
- *
- * <p>
- * The class {@link JsonParserFactory} also contains methods to create
- * {@code JsonParser} instances. {@link JsonParserFactory} is preferred
- * when creating multiple parser instances. A sample usage is shown
- * in the following example:
- * <pre>
- * <code>
- * JsonParserFactory factory = Json.createParserFactory();
- * JsonParser parser1 = factory.createParser(...);
- * JsonParser parser2 = factory.createParser(...);
- * </code>
- * </pre>
- *
- * <p>
- * {@code JsonParser} parses JSON using the pull parsing programming model.
- * In this model the client code controls the thread and calls the method
- * {@code next()} to advance the parser to the next state after
- * processing each element. The parser can generate the following events:
- * {@code START_OBJECT}, {@code END_OBJECT}, {@code START_ARRAY},
- * {@code END_ARRAY}, {@code KEY_NAME}, {@code VALUE_STRING},
- * {@code VALUE_NUMBER}, {@code VALUE_TRUE}, {@code VALUE_FALSE},
- * and {@code VALUE_NULL}.
- *
- * <p>
- * <b>For example</b>, for an empty JSON object ({ }), the parser generates the event
- * {@code START_OBJECT} with the first call to the method {@code next()} and the
- * event {@code END_OBJECT} with the second call to the method {@code next()}.
- * The following code demonstrates how to access these events:
- *
- * <pre>
- * <code>
- * Event event = parser.next(); // START_OBJECT
- * event = parser.next();       // END_OBJECT
- * </code>
- * </pre>
- *
- * <p>
- * <b>For example</b>, for the following JSON:
- * <pre>
- * {
- *   "firstName": "John", "lastName": "Smith", "age": 25,
- *   "phoneNumber": [
- *       { "type": "home", "number": "212 555-1234" },
- *       { "type": "fax", "number": "646 555-4567" }
- *    ]
- * }
- * </pre>
- *
- * <p>calls to the method {@code next()} result in parse events at the specified
- * locations below (marked in bold):
- *
- * <pre>
- * {<B>START_OBJECT</B>
- *   "firstName"<B>KEY_NAME</B>: "John"<B>VALUE_STRING</B>, "lastName"<B>KEY_NAME</B>: "Smith"<B>VALUE_STRING</B>, "age"<B>KEY_NAME</B>: 25<B>VALUE_NUMBER</B>,
- *   "phoneNumber"<B>KEY_NAME</B> : [<B>START_ARRAY</B>
- *       {<B>START_OBJECT</B> "type"<B>KEY_NAME</B>: "home"<B>VALUE_STRING</B>, "number"<B>KEY_NAME</B>: "212 555-1234"<B>VALUE_STRING</B> }<B>END_OBJECT</B>,
- *       {<B>START_OBJECT</B> "type"<B>KEY_NAME</B>: "fax"<B>VALUE_STRING</B>, "number"<B>KEY_NAME</B>: "646 555-4567"<B>VALUE_STRING</B> }<B>END_OBJECT</B>
- *    ]<B>END_ARRAY</B>
- * }<B>END_OBJECT</B>
- * </pre>
- *
- * The methods {@link #next()} and {@link #hasNext()} enable iteration over
- * parser events to process JSON data. {@code JsonParser} provides get methods
- * to obtain the value at the current state of the parser. For example, the
- * following code shows how to obtain the value "John" from the JSON above:
- *
- * <pre>
- * <code>
- * Event event = parser.next(); // START_OBJECT
- * event = parser.next();       // KEY_NAME
- * event = parser.next();       // VALUE_STRING
- * parser.getString();          // "John"
- * </code>
- * </pre>
- *
- * Starting in version 1.1, it is possible to build a partial JSON object
- * model from the stream, at the current parser position.
- * The methods {@link #getArray} and {@link #getObject} can be used to read in
- * a {@code JsonArray} or {@code JsonObject}.  For example, the following code
- * shows how to obtain the phoneNumber in a JsonArray, from the JSON above:
- *
- * <pre><code>
- * while (parser.hasNext() {
- *     Event event = parser.next();
- *     if (event == JsonParser.Event.KEY_NAME ) {
- *         String key = getString();
- *         event = parser.next();
- *         if (key.equals("phoneNumber") {
- *             JsonArray phones = parser.getArray();
- *         }
- *     }
- * }
- * </code></pre>
- *
- * The methods {@link #getArrayStream} and {@link #getObjectStream} can be used
- * to get a stream of the elements of a {@code JsonArray} or {@code JsonObject}.
- * For example, the following code shows another way to obtain John's phoneNumber
- * in a {@code JsonArray} :
- *
- * <pre>{@code
- * Event event = parser.next(); // START_OBJECT
- * JsonArray phones = (JsonArray)
- *     parser.getObjectStream().filter(e->e.getKey().equals("phoneNumber"))
- *                             .map(e->e.getValue())
- *                             .findFirst()
- *                             .get();
- * }</pre>
- *
- * The methods {@link #skipArray} and {@link #skipObject} can be used to
- * skip tokens and position the parser to {@code END_ARRAY} or
- * {@code END_OBJECT}.
- * <p>
- * {@code JsonParser} can be used to parse sequence of JSON values that are not
- * enclosed in a JSON array, e.g. { } { }. The following code demonstrates how
- * to parse such sequence.
- * <pre><code>
- * JsonParser parser = Json.createParser(...);
- * while (parser.hasNext) {
- *     parser.next(); // advance parser state
- *     JsonValue value = parser.getValue();
- * }
- * </code></pre>
- *
- * @see javax.json.Json
- * @see JsonParserFactory
- */
-public interface JsonParser extends /*Auto*/Closeable {
-
-    /**
-     * An event from {@code JsonParser}.
-     */
-    enum Event {
-        /**
-         * Start of a JSON array. The position of the parser is after '['.
-         */
-        START_ARRAY,
-        /**
-         * Start of a JSON object. The position of the parser is after '{'.
-         */
-        START_OBJECT,
-        /**
-         * Name in a name/value pair of a JSON object. The position of the parser
-         * is after the key name. The method {@link #getString} returns the key
-         * name.
-         */
-        KEY_NAME,
-        /**
-         * String value in a JSON array or object. The position of the parser is
-         * after the string value. The method {@link #getString}
-         * returns the string value.
-         */
-        VALUE_STRING,
-        /**
-         * Number value in a JSON array or object. The position of the parser is
-         * after the number value. {@code JsonParser} provides the following
-         * methods to access the number value: {@link #getInt},
-         * {@link #getLong}, and {@link #getBigDecimal}.
-         */
-        VALUE_NUMBER,
-        /**
-         * {@code true} value in a JSON array or object. The position of the
-         * parser is after the {@code true} value.
-         */
-        VALUE_TRUE,
-        /**
-         * {@code false} value in a JSON array or object. The position of the
-         * parser is after the {@code false} value.
-         */
-        VALUE_FALSE,
-        /**
-         * {@code null} value in a JSON array or object. The position of the
-         * parser is after the {@code null} value.
-         */
-        VALUE_NULL,
-        /**
-         * End of a JSON object. The position of the parser is after '}'.
-         */
-        END_OBJECT,
-        /**
-         * End of a JSON array. The position of the parser is after ']'.
-         */
-        END_ARRAY
-    }
-
-    /**
-     * Returns {@code true} if there are more parsing states. This method returns
-     * {@code false} if the parser reaches the end of the JSON text.
-     *
-     * @return {@code true} if there are more parsing states.
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonParsingException if the parser encounters invalid JSON
-     * when advancing to next state.
-     */
-    boolean hasNext();
-
-    /**
-     * Returns the event for the next parsing state.
-     *
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     * @throws JsonParsingException if the parser encounters invalid JSON
-     * when advancing to next state.
-     * @throws java.util.NoSuchElementException if there are no more parsing
-     * states.
-     * @return the event for the next parsing state
-     */
-    Event next();
-
-    /**
-     * Returns a {@code String} for the name in a name/value pair,
-     * for a string value or a number value. This method should only be called
-     * when the parser state is {@link Event#KEY_NAME}, {@link Event#VALUE_STRING},
-     * or {@link Event#VALUE_NUMBER}.
-     *
-     * @return a name when the parser state is {@link Event#KEY_NAME}
-     *         a string value when the parser state is {@link Event#VALUE_STRING}
-     *         a number value when the parser state is {@link Event#VALUE_NUMBER}
-     * @throws IllegalStateException when the parser state is not
-     *      {@code KEY_NAME}, {@code VALUE_STRING}, or {@code VALUE_NUMBER}
-     */
-    String getString();
-
-    /**
-     * Returns true if the JSON number at the current parser state is a
-     * integral number. A {@link BigDecimal} may be used to store the value
-     * internally and this method semantics are defined using its
-     * {@code scale()}. If the scale is zero, then it is considered integral
-     * type. This integral type information can be used to invoke an
-     * appropriate accessor method to obtain a numeric value as in the
-     * following example:
-     *
-     * <pre>
-     * <code>
-     * JsonParser parser = ...
-     * if (parser.isIntegralNumber()) {
-     *     parser.getInt();     // or other methods to get integral value
-     * } else {
-     *     parser.getBigDecimal();
-     * }
-     * </code>
-     * </pre>
-     *
-     * @return true if this number is a integral number, otherwise false
-     * @throws IllegalStateException when the parser state is not
-     *      {@code VALUE_NUMBER}
-     */
-    boolean isIntegralNumber();
-
-    /**
-     * Returns a JSON number as an integer. The returned value is equal
-     * to {@code new BigDecimal(getString()).intValue()}. Note that
-     * this conversion can lose information about the overall magnitude
-     * and precision of the number value as well as return a result with
-     * the opposite sign. This method should only be called when the parser
-     * state is {@link Event#VALUE_NUMBER}.
-     *
-     * @return an integer for a JSON number
-     * @throws IllegalStateException when the parser state is not
-     *      {@code VALUE_NUMBER}
-     * @see java.math.BigDecimal#intValue()
-     */
-    int getInt();
-
-    /**
-     * Returns a JSON number as a long. The returned value is equal
-     * to {@code new BigDecimal(getString()).longValue()}. Note that this
-     * conversion can lose information about the overall magnitude and
-     * precision of the number value as well as return a result with
-     * the opposite sign. This method is only called when the parser state is
-     * {@link Event#VALUE_NUMBER}.
-     *
-     * @return a long for a JSON number
-     * @throws IllegalStateException when the parser state is not
-     *      {@code VALUE_NUMBER}
-     * @see java.math.BigDecimal#longValue()
-     */
-    long getLong();
-
-    /**
-     * Returns a JSON number as a {@code BigDecimal}. The {@code BigDecimal}
-     * is created using {@code new BigDecimal(getString())}. This
-     * method should only called when the parser state is
-     * {@link Event#VALUE_NUMBER}.
-     *
-     * @return a {@code BigDecimal} for a JSON number
-     * @throws IllegalStateException when the parser state is not
-     *      {@code VALUE_NUMBER}
-     */
-    BigDecimal getBigDecimal();
-
-    /**
-     * Return the location that corresponds to the parser's current state in
-     * the JSON input source. The location information is only valid in the
-     * current parser state (or until the parser is advanced to a next state).
-     *
-     * @return a non-null location corresponding to the current parser state
-     * in JSON input source
-     */
-    JsonLocation getLocation();
-
-    /**
-     * Returns a {@code JsonObject} and advances the parser to the
-     * corresponding {@code END_OBJECT}.
-     *
-     * @return the {@code JsonObject} at the current parser position
-     *
-     * @throws IllegalStateException when the parser state is not
-     *     {@code START_OBJECT}
-     *
-     * @since 1.1
-     */
-    default public JsonObject getObject() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns a {@code JsonValue} at the current parser position.
-     * If the parser state is {@code START_ARRAY}, the behavior is
-     * the same as {@link #getArray}. If the parser state is
-     * {@code START_OBJECT}, the behavior is the same as
-     * {@link #getObject}. For all other cases, if applicable, the JSON value is
-     * read and returned.
-     *
-     * @return the {@code JsonValue} at the current parser position.
-     * @throws IllegalStateException when the parser state is
-     *     {@code END_OBJECT} or {@code END_ARRAY}
-     *
-     * @since 1.1
-     */
-    default public JsonValue getValue() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns a {@code JsonArray} and advance the parser to the
-     * the corresponding {@code END_ARRAY}.
-     *
-     * @return the {@code JsonArray} at the current parser position
-     *
-     * @throws IllegalStateException when the parser state is not
-     *     {@code START_ARRAY}
-     *
-     * @since 1.1
-     */
-    default public JsonArray getArray() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns a stream of the {@code JsonArray} elements.
-     * The parser state must be {@code START_ARRAY}.
-     * The elements are read lazily, on an as-needed basis, as
-     * required by the stream operations.
-     * If the stream operations do not consume
-     * all of the array elements, {@link skipArray} can be used to
-     * skip the unprocessed array elements.
-     *
-     * @return a stream of elements of the {@code JsonArray}
-     *
-     * @throws IllegalStateException when the parser state is not
-     *     {@code START_ARRAY}
-     *
-     * @since 1.1
-     */
-    default public Stream<JsonValue> getArrayStream() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns a stream of the {@code JsonObject}'s
-     * name/value pairs. The parser state must be {@code START_OBJECT}.
-     * The name/value pairs are read lazily, on an as-needed basis, as
-     * required by the stream operations.
-     * If the stream operations do not consume
-     * all of the object's name/value pairs, {@link skipObject} can be
-     * used to skip the unprocessed elements.
-     *
-     * @return a stream of name/value pairs of the {@code JsonObject}
-     *
-     * @throws IllegalStateException when the parser state is not
-     *     {@code START_OBJECT}
-     *
-     * @since 1.1
-     */
-    default public Stream<Map.Entry<String,JsonValue>> getObjectStream() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns a stream of {@code JsonValue} from a sequence of
-     * JSON values. The values are read lazily, on an as-needed basis,
-     * as needed by the stream operations.
-     *
-     * @return a Stream of {@code JsonValue}
-     *
-     * @throws IllegalStateException if the parser is in an array or object.
-     *
-     * @since 1.1
-     */
-    default public Stream<JsonValue> getValueStream() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Advance the parser to {@code END_ARRAY}.
-     * If the parser is in array context, i.e. it has previously
-     * encountered a {@code START_ARRAY} without encountering the
-     * corresponding {@code END_ARRAY}, the parser is advanced to
-     * the corresponding {@code END_ARRAY}.
-     * If the parser is not in any array context, nothing happens.
-     *
-     * @since 1.1
-     */
-    default public void skipArray() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Advance the parser to {@code END_OBJECT}.
-     * If the parser is in object context, i.e. it has previously
-     * encountered a {@code START_OBJECT} without encountering the
-     * corresponding {@code END_OBJECT}, the parser is advanced to
-     * the corresponding {@code END_OBJECT}.
-     * If the parser is not in any object context, nothing happens.
-     *
-     * @since 1.1
-     */
-    default public void skipObject() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Closes this parser and frees any resources associated with the
-     * parser. This method closes the underlying input source.
-     *
-     * @throws javax.json.JsonException if an i/o error occurs (IOException
-     * would be cause of JsonException)
-     */
-    @Override
-    void close();
-}
Index: trunk/src/javax/json/stream/JsonParserFactory.java
===================================================================
--- trunk/src/javax/json/stream/JsonParserFactory.java	(revision 16017)
+++ 	(revision )
@@ -1,132 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2011-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.stream;
-
-import javax.json.JsonArray;
-import javax.json.JsonObject;
-import java.io.InputStream;
-import java.io.Reader;
-import java.nio.charset.Charset;
-import java.util.Map;
-
-/**
- * Factory for creating {@link JsonParser} instances. If a factory
- * instance is configured with a configuration, the configuration applies
- * to all parser instances created using that factory instance.
- *
- * <p>
- * The class {@link javax.json.Json Json} also provides methods to create
- * {@link JsonParser} instances, but using {@code JsonParserFactory} is 
- * preferred when creating multiple parser instances as shown in the following
- * example:
- *
- * <pre>
- * <code>
- * JsonParserFactory factory = Json.createParserFactory();
- * JsonParser parser1 = factory.createParser(...);
- * JsonParser parser2 = factory.createParser(...);
- * </code>
- * </pre>
- *
- * <p> All the methods in this class are safe for use by multiple concurrent
- * threads.
- */
-public interface JsonParserFactory {
-
-    /**
-     * Creates a JSON parser from a character stream.
-     *
-     * @param reader a i/o reader from which JSON is to be read
-     * @return the created JSON parser
-     */
-    JsonParser createParser(Reader reader);
-
-    /**
-     * Creates a JSON parser from the specified byte stream.
-     * The character encoding of the stream is determined
-     * as specified in <a href="http://tools.ietf.org/rfc/rfc7159.txt">RFC 7159</a>.
-     *
-     * @param in i/o stream from which JSON is to be read
-     * @return the created JSON parser
-     * @throws javax.json.JsonException if encoding cannot be determined
-     *         or i/o error (IOException would be cause of JsonException)
-     */
-    JsonParser createParser(InputStream in);
-
-    /**
-     * Creates a JSON parser from the specified byte stream.
-     * The bytes of the stream are decoded to characters using the
-     * specified charset.
-     *
-     * @param in i/o stream from which JSON is to be read
-     * @param charset a charset
-     * @return the created JSON parser
-     */
-    JsonParser createParser(InputStream in, Charset charset);
-
-    /**
-     * Creates a JSON parser from the specified JSON object.
-     *
-     * @param obj a JSON object
-     * @return the created JSON parser
-     */
-    JsonParser createParser(JsonObject obj);
-
-    /**
-     * Creates a JSON parser from the specified JSON array.
-     *
-     * @param array a JSON array
-     * @return the created JSON parser
-     */
-    JsonParser createParser(JsonArray array);
-
-    /**
-     * Returns a read-only map of supported provider specific configuration
-     * properties that are used to configure the JSON parsers.
-     * If there are any specified configuration properties that are not
-     * supported by the provider, they won't be part of the returned map.
-     *
-     * @return a map of supported provider specific properties that are used
-     * to configure the created parsers. The map may be empty but not null
-     */
-    Map<String, ?> getConfigInUse();
-
-}
Index: trunk/src/javax/json/stream/JsonParsingException.java
===================================================================
--- trunk/src/javax/json/stream/JsonParsingException.java	(revision 16017)
+++ 	(revision )
@@ -1,96 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package javax.json.stream;
-
-import javax.json.JsonException;
-
-/**
- * {@code JsonParsingException} is used when an incorrect JSON is
- * being parsed.
- */
-public class JsonParsingException extends JsonException {
-
-    private final JsonLocation location;
-
-    /**
-     * Constructs a new runtime exception with the specified detail message.
-     * The cause is not initialized, and may subsequently be initialized by a
-     * call to {@link #initCause}.
-     *
-     * @param message the detail message. The detail message is saved for
-     *                later retrieval by the {@link #getMessage()} method.
-     * @param location the location of the incorrect JSON
-     */
-    public JsonParsingException(String message, JsonLocation location) {
-        super(message);
-        this.location = location;
-    }
-
-    /**
-     * Constructs a new runtime exception with the specified detail message and
-     * cause.  <p>Note that the detail message associated with
-     * {@code cause} is <i>not</i> automatically incorporated in
-     * this runtime exception's detail message.
-     *
-     * @param message the detail message (which is saved for later retrieval
-     *                by the {@link #getMessage()} method).
-     * @param cause the cause (which is saved for later retrieval by the
-     *              {@link #getCause()} method). (A <tt>null</tt> value is
-     *              permitted, and indicates that the cause is nonexistent or
-     *              unknown.)
-     * @param location the location of the incorrect JSON
-     */
-    public JsonParsingException(String message, Throwable cause, JsonLocation location) {
-        super(message, cause);
-        this.location = location;
-    }
-
-    /**
-     * Return the location of the incorrect JSON.
-     *
-     * @return the non-null location of the incorrect JSON
-     */
-    public JsonLocation getLocation() {
-        return location;
-    }
-
-}
-
Index: trunk/src/javax/json/stream/package-info.java
===================================================================
--- trunk/src/javax/json/stream/package-info.java	(revision 16017)
+++ 	(revision )
@@ -1,71 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-/**
- * Provides a streaming API to parse and generate
- * <a href="http://json.org/">JSON</a>.
- *
- * <p>
- * The streaming API consists of the interfaces
- * {@link javax.json.stream.JsonParser} and
- * {@link javax.json.stream.JsonGenerator}. The interface {@code JsonParser}
- * contains methods to parse JSON in a streaming way. The interface
- * {@code JsonGenerator} contains methods to write JSON to an output source
- * in a streaming way.
- *
- * <p>
- * {@code JsonParser} provides forward, read-only access to JSON data using the
- * pull parsing programming model. In this model the application code controls
- * the thread and calls methods in the parser interface to move the parser
- * forward or to obtain JSON data from the current state of the parser.
- *
- * <p>
- * {@code JsonGenerator} provides methods to write JSON to an output source.
- * The generator writes name/value pairs in JSON objects and values in JSON
- * arrays.
- * 
- * <p>
- * The streaming API is a low-level API designed to process large amounts of
- * JSON data efficiently. Other JSON frameworks (such as JSON binding) can be
- * implemented using this API.
- *
- * @since JSON Processing 1.0
- */
-package javax.json.stream;
Index: trunk/src/org/glassfish/json/BufferPoolImpl.java
===================================================================
--- trunk/src/org/glassfish/json/BufferPoolImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,98 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import java.lang.ref.WeakReference;
-import java.util.concurrent.ConcurrentLinkedQueue;
-
-/**
- * char[] pool that pool instances of char[] which are expensive to create.
- *
- * @author Jitendra Kotamraju
- */
-class BufferPoolImpl implements BufferPool {
-
-    // volatile since multiple threads may access queue reference
-    private volatile WeakReference<ConcurrentLinkedQueue<char[]>> queue;
-
-    /**
-     * Gets a new object from the pool.
-     *
-     * <p>
-     * If no object is available in the pool, this method creates a new one.
-     *
-     * @return
-     *      always non-null.
-     */
-    @Override
-    public final char[] take() {
-        char[] t = getQueue().poll();
-        if (t==null)
-            return new char[4096];
-        return t;
-    }
-
-    private ConcurrentLinkedQueue<char[]> getQueue() {
-        WeakReference<ConcurrentLinkedQueue<char[]>> q = queue;
-        if (q != null) {
-            ConcurrentLinkedQueue<char[]> d = q.get();
-            if (d != null)
-                return d;
-        }
-
-        // overwrite the queue
-        ConcurrentLinkedQueue<char[]> d = new ConcurrentLinkedQueue<>();
-        queue = new WeakReference<>(d);
-
-        return d;
-    }
-
-    /**
-     * Returns an object back to the pool.
-     */
-    @Override
-    public final void recycle(char[] t) {
-        getQueue().offer(t);
-    }
-
-}
Index: trunk/src/org/glassfish/json/JsonArrayBuilderImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonArrayBuilderImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,503 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.*;
-import java.io.StringWriter;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.AbstractList;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
-/**
- * JsonArrayBuilder implementation
- *
- * @author Jitendra Kotamraju
- * @author Kin-man Chung
- */
-
-class JsonArrayBuilderImpl implements JsonArrayBuilder {
-    private ArrayList<JsonValue> valueList;
-    private final BufferPool bufferPool;
-
-    JsonArrayBuilderImpl(BufferPool bufferPool) {
-        this.bufferPool = bufferPool;
-    }
-
-    JsonArrayBuilderImpl(JsonArray array, BufferPool bufferPool) {
-        this.bufferPool = bufferPool;
-        valueList = new ArrayList<>();
-        valueList.addAll(array);
-    }
-
-    JsonArrayBuilderImpl(Collection<?> collection, BufferPool bufferPool) {
-        this.bufferPool = bufferPool;
-        valueList = new ArrayList<>();
-        populate(collection);
-    }
-
-    @Override
-    public JsonArrayBuilder add(JsonValue value) {
-        validateValue(value);
-        addValueList(value);
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(String value) {
-        validateValue(value);
-        addValueList(new JsonStringImpl(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(BigDecimal value) {
-        validateValue(value);
-        addValueList(JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(BigInteger value) {
-        validateValue(value);
-        addValueList(JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(int value) {
-        addValueList(JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(long value) {
-        addValueList(JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(double value) {
-        addValueList(JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(boolean value) {
-        addValueList(value ? JsonValue.TRUE : JsonValue.FALSE);
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder addNull() {
-        addValueList(JsonValue.NULL);
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(JsonObjectBuilder builder) {
-        if (builder == null) {
-            throw new NullPointerException(JsonMessages.ARRBUILDER_OBJECT_BUILDER_NULL());
-        }
-        addValueList(builder.build());
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(JsonArrayBuilder builder) {
-        if (builder == null) {
-            throw new NullPointerException(JsonMessages.ARRBUILDER_ARRAY_BUILDER_NULL());
-        }
-        addValueList(builder.build());
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder addAll(JsonArrayBuilder builder) {
-        if (builder == null) {
-            throw new NullPointerException(JsonMessages.ARRBUILDER_ARRAY_BUILDER_NULL());
-        }
-        if (valueList == null) {
-            valueList = new ArrayList<>();
-        }
-        valueList.addAll(builder.build());
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(int index, JsonValue value) {
-        validateValue(value);
-        addValueList(index, value);
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(int index, String value) {
-        validateValue(value);
-        addValueList(index, new JsonStringImpl(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(int index, BigDecimal value) {
-        validateValue(value);
-        addValueList(index, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(int index, BigInteger value) {
-        validateValue(value);
-        addValueList(index, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(int index, int value) {
-        addValueList(index, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(int index, long value) {
-        addValueList(index, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(int index, double value) {
-        addValueList(index, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(int index, boolean value) {
-        addValueList(index, value ? JsonValue.TRUE : JsonValue.FALSE);
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder addNull(int index) {
-        addValueList(index, JsonValue.NULL);
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(int index, JsonObjectBuilder builder) {
-        if (builder == null) {
-            throw new NullPointerException(JsonMessages.ARRBUILDER_OBJECT_BUILDER_NULL());
-        }
-        addValueList(index, builder.build());
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder add(int index, JsonArrayBuilder builder) {
-        if (builder == null) {
-            throw new NullPointerException(JsonMessages.ARRBUILDER_OBJECT_BUILDER_NULL());
-        }
-        addValueList(index, builder.build());
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder set(int index, JsonValue value) {
-        validateValue(value);
-        setValueList(index, value);
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder set(int index, String value) {
-        validateValue(value);
-        setValueList(index, new JsonStringImpl(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder set(int index, BigDecimal value) {
-        validateValue(value);
-        setValueList(index, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder set(int index, BigInteger value) {
-        validateValue(value);
-        setValueList(index, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder set(int index, int value) {
-        setValueList(index, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder set(int index, long value) {
-        setValueList(index, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder set(int index, double value) {
-        setValueList(index, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder set(int index, boolean value) {
-        setValueList(index, value ? JsonValue.TRUE : JsonValue.FALSE);
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder setNull(int index) {
-        setValueList(index, JsonValue.NULL);
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder set(int index, JsonObjectBuilder builder) {
-        if (builder == null) {
-            throw new NullPointerException(JsonMessages.ARRBUILDER_OBJECT_BUILDER_NULL());
-        }
-        setValueList(index, builder.build());
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder set(int index, JsonArrayBuilder builder) {
-        if (builder == null) {
-            throw new NullPointerException(JsonMessages.ARRBUILDER_OBJECT_BUILDER_NULL());
-        }
-        setValueList(index, builder.build());
-        return this;
-    }
-
-    @Override
-    public JsonArrayBuilder remove(int index) {
-        if (valueList == null) {
-            throw new IndexOutOfBoundsException(JsonMessages.ARRBUILDER_VALUELIST_NULL(index, 0));
-        }
-        valueList.remove(index);
-        return this;
-    }
-
-    @Override
-    public JsonArray build() {
-        List<JsonValue> snapshot;
-        if (valueList == null) {
-            snapshot = Collections.emptyList();
-        } else {
-            // Should we trim to minimize storage ?
-            // valueList.trimToSize();
-            snapshot = Collections.unmodifiableList(valueList);
-        }
-        valueList = null;
-        return new JsonArrayImpl(snapshot, bufferPool);
-    }
-
-    private void populate(Collection<?> collection) {
-        for (Object value : collection) {
-            if (value != null && value instanceof Optional) {
-                ((Optional<?>) value).ifPresent(v ->
-                        this.valueList.add(MapUtil.handle(v, bufferPool)));
-            } else {
-                this.valueList.add(MapUtil.handle(value, bufferPool));
-            }
-        }
-    }
-
-    private void addValueList(JsonValue value) {
-        if (valueList == null) {
-            valueList = new ArrayList<>();
-        }
-        valueList.add(value);
-    }
-
-    private void addValueList(int index, JsonValue value) {
-        if (valueList == null) {
-            valueList = new ArrayList<>();
-        }
-        valueList.add(index, value);
-    }
-
-    private void setValueList(int index, JsonValue value) {
-        if (valueList == null) {
-            throw new IndexOutOfBoundsException(JsonMessages.ARRBUILDER_VALUELIST_NULL(index, 0));
-        }
-        valueList.set(index, value);
-    }
-
-    private void validateValue(Object value) {
-        if (value == null) {
-            throw new NullPointerException(JsonMessages.ARRBUILDER_VALUE_NULL());
-        }
-    }
-
-    private static final class JsonArrayImpl extends AbstractList<JsonValue> implements JsonArray {
-        private final List<JsonValue> valueList;    // Unmodifiable
-        private final BufferPool bufferPool;
-
-        JsonArrayImpl(List<JsonValue> valueList, BufferPool bufferPool) {
-            this.valueList = valueList;
-            this.bufferPool = bufferPool;
-        }
-
-        @Override
-        public int size() {
-            return valueList.size();
-        }
-
-        @Override
-        public JsonObject getJsonObject(int index) {
-            return (JsonObject)valueList.get(index);
-        }
-
-        @Override
-        public JsonArray getJsonArray(int index) {
-            return (JsonArray)valueList.get(index);
-        }
-
-        @Override
-        public JsonNumber getJsonNumber(int index) {
-            return (JsonNumber)valueList.get(index);
-        }
-
-        @Override
-        public JsonString getJsonString(int index) {
-            return (JsonString)valueList.get(index);
-        }
-
-        @Override
-        @SuppressWarnings("unchecked")
-        public <T extends JsonValue> List<T> getValuesAs(Class<T> clazz) {
-            return (List<T>)valueList;
-        }
-
-        @Override
-        public String getString(int index) {
-            return getJsonString(index).getString();
-        }
-
-        @Override
-        public String getString(int index, String defaultValue) {
-            try {
-                return getString(index);
-            } catch (Exception e) {
-                return defaultValue;
-            }
-        }
-
-        @Override
-        public int getInt(int index) {
-            return getJsonNumber(index).intValue();
-        }
-
-        @Override
-        public int getInt(int index, int defaultValue) {
-            try {
-                return getInt(index);
-            } catch (Exception e) {
-                return defaultValue;
-            }
-        }
-
-        @Override
-        public boolean getBoolean(int index) {
-            JsonValue jsonValue = get(index);
-            if (jsonValue == JsonValue.TRUE) {
-                return true;
-            } else if (jsonValue == JsonValue.FALSE) {
-                return false;
-            } else {
-                throw new ClassCastException();
-            }
-        }
-
-        @Override
-        public boolean getBoolean(int index, boolean defaultValue) {
-            try {
-                return getBoolean(index);
-            } catch (Exception e) {
-                return defaultValue;
-            }
-        }
-
-        @Override
-        public boolean isNull(int index) {
-            return valueList.get(index).equals(JsonValue.NULL);
-        }
-
-        @Override
-        public ValueType getValueType() {
-            return ValueType.ARRAY;
-        }
-
-        @Override
-        public JsonValue get(int index) {
-            return valueList.get(index);
-        }
-
-        @Override
-        public String toString() {
-            StringWriter sw = new StringWriter();
-            try (JsonWriter jw = new JsonWriterImpl(sw, bufferPool)) {
-                jw.write(this);
-            }
-            return sw.toString();
-        }
-
-        @Override
-        public JsonArray asJsonArray() {
-            return this;
-        }
-    }
-}
-
Index: trunk/src/org/glassfish/json/JsonBuilderFactoryImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonBuilderFactoryImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,100 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import java.util.Collection;
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.JsonObject;
-import javax.json.JsonArray;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonBuilderFactory;
-import javax.json.JsonObjectBuilder;
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonBuilderFactoryImpl implements JsonBuilderFactory {
-    private final Map<String, ?> config;
-    private final BufferPool bufferPool;
-
-    JsonBuilderFactoryImpl(BufferPool bufferPool) {
-        this.config = Collections.emptyMap();
-        this.bufferPool = bufferPool;
-    }
-
-    @Override
-    public JsonObjectBuilder createObjectBuilder() {
-        return new JsonObjectBuilderImpl(bufferPool);
-    }
- 
-    @Override
-    public JsonObjectBuilder createObjectBuilder(JsonObject object) {
-        return new JsonObjectBuilderImpl(object, bufferPool);
-    }
-
-    @Override
-    public JsonObjectBuilder createObjectBuilder(Map<String, Object> object) {
-        return new JsonObjectBuilderImpl(object, bufferPool);
-    }
-
-    @Override
-    public JsonArrayBuilder createArrayBuilder() {
-        return new JsonArrayBuilderImpl(bufferPool);
-    }
-
-    @Override
-    public JsonArrayBuilder createArrayBuilder(JsonArray array) {
-        return new JsonArrayBuilderImpl(array, bufferPool);
-    }
-
-    @Override
-    public JsonArrayBuilder createArrayBuilder(Collection<?> collection) {
-        return new JsonArrayBuilderImpl(collection, bufferPool);
-    }
-
-    @Override
-    public Map<String, ?> getConfigInUse() {
-        return config;
-    }
-}
Index: trunk/src/org/glassfish/json/JsonGeneratorFactoryImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonGeneratorFactoryImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,94 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.stream.JsonGenerator;
-import javax.json.stream.JsonGeneratorFactory;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonGeneratorFactoryImpl implements JsonGeneratorFactory {
-
-    private final boolean prettyPrinting;
-    private final Map<String, ?> config;    // unmodifiable map
-    private final BufferPool bufferPool;
-
-    JsonGeneratorFactoryImpl(Map<String, ?> config, boolean prettyPrinting,
-            BufferPool bufferPool) {
-        this.config = config;
-        this.prettyPrinting = prettyPrinting;
-        this.bufferPool = bufferPool;
-    }
-
-    @Override
-    public JsonGenerator createGenerator(Writer writer) {
-        return prettyPrinting
-                ? new JsonPrettyGeneratorImpl(writer, bufferPool)
-                : new JsonGeneratorImpl(writer, bufferPool);
-    }
-
-    @Override
-    public JsonGenerator createGenerator(OutputStream out) {
-        return prettyPrinting
-                ? new JsonPrettyGeneratorImpl(out, bufferPool)
-                : new JsonGeneratorImpl(out, bufferPool);
-    }
-
-    @Override
-    public JsonGenerator createGenerator(OutputStream out, Charset charset) {
-        return prettyPrinting
-                ? new JsonPrettyGeneratorImpl(out, charset, bufferPool)
-                : new JsonGeneratorImpl(out, charset, bufferPool);
-    }
-
-    @Override
-    public Map<String, ?> getConfigInUse() {
-        return config;
-    }
-
-}
Index: trunk/src/org/glassfish/json/JsonGeneratorImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonGeneratorImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,731 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.*;
-import javax.json.stream.JsonGenerationException;
-import javax.json.stream.JsonGenerator;
-import java.io.*;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayDeque;
-import java.util.Deque;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonGeneratorImpl implements JsonGenerator {
-
-    private static final char[] INT_MIN_VALUE_CHARS = "-2147483648".toCharArray();
-    private static final int[] INT_CHARS_SIZE_TABLE = { 9, 99, 999, 9999, 99999,
-            999999, 9999999, 99999999, 999999999, Integer.MAX_VALUE };
-
-    private static final char [] DIGIT_TENS = {
-            '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
-            '1', '1', '1', '1', '1', '1', '1', '1', '1', '1',
-            '2', '2', '2', '2', '2', '2', '2', '2', '2', '2',
-            '3', '3', '3', '3', '3', '3', '3', '3', '3', '3',
-            '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
-            '5', '5', '5', '5', '5', '5', '5', '5', '5', '5',
-            '6', '6', '6', '6', '6', '6', '6', '6', '6', '6',
-            '7', '7', '7', '7', '7', '7', '7', '7', '7', '7',
-            '8', '8', '8', '8', '8', '8', '8', '8', '8', '8',
-            '9', '9', '9', '9', '9', '9', '9', '9', '9', '9',
-    } ;
-
-    private static final char [] DIGIT_ONES = {
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-    } ;
-
-    /**
-     * All possible chars for representing a number as a String
-     */
-    private static final char[] DIGITS = {
-            '0' , '1' , '2' , '3' , '4' , '5' ,
-            '6' , '7' , '8' , '9'
-    };
-
-    private static enum Scope {
-        IN_NONE,
-        IN_OBJECT,
-        IN_FIELD,
-        IN_ARRAY
-    }
-
-    private final BufferPool bufferPool;
-    private final Writer writer;
-    private Context currentContext = new Context(Scope.IN_NONE);
-    private final Deque<Context> stack = new ArrayDeque<>();
-
-    // Using own buffering mechanism as JDK's BufferedWriter uses synchronized
-    // methods. Also, flushBuffer() is useful when you don't want to actually
-    // flush the underlying output source
-    private final char buf[];     // capacity >= INT_MIN_VALUE_CHARS.length
-    private int len = 0;
-
-    JsonGeneratorImpl(Writer writer, BufferPool bufferPool) {
-        this.writer = writer;
-        this.bufferPool = bufferPool;
-        this.buf = bufferPool.take();
-    }
-
-    JsonGeneratorImpl(OutputStream out, BufferPool bufferPool) {
-        this(out, StandardCharsets.UTF_8, bufferPool);
-    }
-
-    JsonGeneratorImpl(OutputStream out, Charset encoding, BufferPool bufferPool) {
-        this(new OutputStreamWriter(out, encoding), bufferPool);
-    }
-
-    @Override
-    public void flush() {
-        flushBuffer();
-        try {
-            writer.flush();
-        } catch (IOException ioe) {
-            throw new JsonException(JsonMessages.GENERATOR_FLUSH_IO_ERR(), ioe);
-        }
-    }
-
-    @Override
-    public JsonGenerator writeStartObject() {
-        if (currentContext.scope == Scope.IN_OBJECT) {
-            throw new JsonGenerationException(JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        if (currentContext.scope == Scope.IN_NONE && !currentContext.first) {
-            throw new JsonGenerationException(JsonMessages.GENERATOR_ILLEGAL_MULTIPLE_TEXT());
-        }
-        writeComma();
-        writeChar('{');
-        stack.push(currentContext);
-        currentContext = new Context(Scope.IN_OBJECT);
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeStartObject(String name) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeChar('{');
-        stack.push(currentContext);
-        currentContext = new Context(Scope.IN_OBJECT);
-        return this;
-    }
-
-    private JsonGenerator writeName(String name) {
-        writeComma();
-        writeEscapedString(name);
-        writeColon();
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String name, String fieldValue) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeEscapedString(fieldValue);
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String name, int value) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeInt(value);
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String name, long value) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeString(String.valueOf(value));
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String name, double value) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        if (Double.isInfinite(value) || Double.isNaN(value)) {
-            throw new NumberFormatException(JsonMessages.GENERATOR_DOUBLE_INFINITE_NAN());
-        }
-        writeName(name);
-        writeString(String.valueOf(value));
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String name, BigInteger value) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeString(String.valueOf(value));
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String name, BigDecimal value) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeString(String.valueOf(value));
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String name, boolean value) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeString(value? "true" : "false");
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeNull(String name) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeString("null");
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(JsonValue value) {
-        checkContextForValue();
-
-        switch (value.getValueType()) {
-            case ARRAY:
-                JsonArray array = (JsonArray)value;
-                writeStartArray();
-                for(JsonValue child: array) {
-                    write(child);
-                }
-                writeEnd();
-                break;
-            case OBJECT:
-                JsonObject object = (JsonObject)value;
-                writeStartObject();
-                for(Map.Entry<String, JsonValue> member: object.entrySet()) {
-                    write(member.getKey(), member.getValue());
-                }
-                writeEnd();
-                break;
-            case STRING:
-                JsonString str = (JsonString)value;
-                write(str.getString());
-                break;
-            case NUMBER:
-                JsonNumber number = (JsonNumber)value;
-                writeValue(number.toString());
-                popFieldContext();
-                break;
-            case TRUE:
-                write(true);
-                break;
-            case FALSE:
-                write(false);
-                break;
-            case NULL:
-                writeNull();
-                break;
-        }
-
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeStartArray() {
-        if (currentContext.scope == Scope.IN_OBJECT) {
-            throw new JsonGenerationException(JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        if (currentContext.scope == Scope.IN_NONE && !currentContext.first) {
-            throw new JsonGenerationException(JsonMessages.GENERATOR_ILLEGAL_MULTIPLE_TEXT());
-        }
-        writeComma();
-        writeChar('[');
-        stack.push(currentContext);
-        currentContext = new Context(Scope.IN_ARRAY);
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeStartArray(String name) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        writeChar('[');
-        stack.push(currentContext);
-        currentContext = new Context(Scope.IN_ARRAY);
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String name, JsonValue value) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        switch (value.getValueType()) {
-            case ARRAY:
-                JsonArray array = (JsonArray)value;
-                writeStartArray(name);
-                for(JsonValue child: array) {
-                    write(child);
-                }
-                writeEnd();
-                break;
-            case OBJECT:
-                JsonObject object = (JsonObject)value;
-                writeStartObject(name);
-                for(Map.Entry<String, JsonValue> member: object.entrySet()) {
-                    write(member.getKey(), member.getValue());
-                }
-                writeEnd();
-                break;
-            case STRING:
-                JsonString str = (JsonString)value;
-                write(name, str.getString());
-                break;
-            case NUMBER:
-                JsonNumber number = (JsonNumber)value;
-                writeValue(name, number.toString());
-                break;
-            case TRUE:
-                write(name, true);
-                break;
-            case FALSE:
-                write(name, false);
-                break;
-            case NULL:
-                writeNull(name);
-                break;
-        }
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(String value) {
-        checkContextForValue();
-        writeComma();
-        writeEscapedString(value);
-        popFieldContext();
-        return this;
-    }
-
-
-    @Override
-    public JsonGenerator write(int value) {
-        checkContextForValue();
-        writeComma();
-        writeInt(value);
-        popFieldContext();
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(long value) {
-        checkContextForValue();
-        writeValue(String.valueOf(value));
-        popFieldContext();
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(double value) {
-        checkContextForValue();
-        if (Double.isInfinite(value) || Double.isNaN(value)) {
-            throw new NumberFormatException(JsonMessages.GENERATOR_DOUBLE_INFINITE_NAN());
-        }
-        writeValue(String.valueOf(value));
-        popFieldContext();
-        return this;
-    }
-
-    @Override
-    public JsonGenerator write(BigInteger value) {
-        checkContextForValue();
-        writeValue(value.toString());
-        popFieldContext();
-        return this;
-    }
-
-    private void checkContextForValue() {
-        if ((!currentContext.first && currentContext.scope != Scope.IN_ARRAY && currentContext.scope != Scope.IN_FIELD)
-                || (currentContext.first && currentContext.scope == Scope.IN_OBJECT)) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-    }
-
-    @Override
-    public JsonGenerator write(BigDecimal value) {
-        checkContextForValue();
-        writeValue(value.toString());
-        popFieldContext();
-
-        return this;
-    }
-
-    private void popFieldContext() {
-        if (currentContext.scope == Scope.IN_FIELD) {
-            currentContext = stack.pop();
-        }
-    }
-
-    @Override
-    public JsonGenerator write(boolean value) {
-        checkContextForValue();
-        writeComma();
-        writeString(value ? "true" : "false");
-        popFieldContext();
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeNull() {
-        checkContextForValue();
-        writeComma();
-        writeString("null");
-        popFieldContext();
-        return this;
-    }
-
-    private void writeValue(String value) {
-        writeComma();
-        writeString(value);
-    }
-
-    private void writeValue(String name, String value) {
-        writeComma();
-        writeEscapedString(name);
-        writeColon();
-        writeString(value);
-    }
-
-    @Override
-    public JsonGenerator writeKey(String name) {
-        if (currentContext.scope != Scope.IN_OBJECT) {
-            throw new JsonGenerationException(
-                    JsonMessages.GENERATOR_ILLEGAL_METHOD(currentContext.scope));
-        }
-        writeName(name);
-        stack.push(currentContext);
-        currentContext = new Context(Scope.IN_FIELD);
-        currentContext.first = false;
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeEnd() {
-        if (currentContext.scope == Scope.IN_NONE) {
-            throw new JsonGenerationException("writeEnd() cannot be called in no context");
-        }
-        writeChar(currentContext.scope == Scope.IN_ARRAY ? ']' : '}');
-        currentContext = stack.pop();
-        popFieldContext();
-        return this;
-    }
-
-    protected void writeComma() {
-        if (!currentContext.first && currentContext.scope != Scope.IN_FIELD) {
-            writeChar(',');
-        }
-        currentContext.first = false;
-    }
-
-    protected void writeColon() {
-        writeChar(':');
-    }
-
-    private static class Context {
-        boolean first = true;
-        final Scope scope;
-
-        Context(Scope scope) {
-            this.scope = scope;
-        }
-
-    }
-
-    @Override
-    public void close() {
-        if (currentContext.scope != Scope.IN_NONE || currentContext.first) {
-            throw new JsonGenerationException(JsonMessages.GENERATOR_INCOMPLETE_JSON());
-        }
-        flushBuffer();
-        try {
-            writer.close();
-        } catch (IOException ioe) {
-            throw new JsonException(JsonMessages.GENERATOR_CLOSE_IO_ERR(), ioe);
-        }
-        bufferPool.recycle(buf);
-    }
-
-    // begin, end-1 indexes represent characters that need not
-    // be escaped
-    //
-    // XXXssssssssssssXXXXXXXXXXXXXXXXXXXXXXrrrrrrrrrrrrrrXXXXXX
-    //    ^           ^                     ^             ^
-    //    |           |                     |             |
-    //   begin       end                   begin         end
-    void writeEscapedString(String string) {
-        writeChar('"');
-        int len = string.length();
-        for(int i = 0; i < len; i++) {
-            int begin = i, end = i;
-            char c = string.charAt(i);
-            // find all the characters that need not be escaped
-            // unescaped = %x20-21 | %x23-5B | %x5D-10FFFF
-            while(c >= 0x20 && c <= 0x10ffff && c != 0x22 && c != 0x5c) {
-                i++; end = i;
-                if (i < len) {
-                    c = string.charAt(i);
-                } else {
-                    break;
-                }
-            }
-            // Write characters without escaping
-            if (begin < end) {
-                writeString(string, begin, end);
-                if (i == len) {
-                    break;
-                }
-            }
-
-            switch (c) {
-                case '"':
-                case '\\':
-                    writeChar('\\'); writeChar(c);
-                    break;
-                case '\b':
-                    writeChar('\\'); writeChar('b');
-                    break;
-                case '\f':
-                    writeChar('\\'); writeChar('f');
-                    break;
-                case '\n':
-                    writeChar('\\'); writeChar('n');
-                    break;
-                case '\r':
-                    writeChar('\\'); writeChar('r');
-                    break;
-                case '\t':
-                    writeChar('\\'); writeChar('t');
-                    break;
-                default:
-                    String hex = "000" + Integer.toHexString(c);
-                    writeString("\\u" + hex.substring(hex.length() - 4));
-            }
-        }
-        writeChar('"');
-    }
-
-    void writeString(String str, int begin, int end) {
-        while (begin < end) {       // source begin and end indexes
-            int no = Math.min(buf.length - len, end - begin);
-            str.getChars(begin, begin + no, buf, len);
-            begin += no;            // Increment source index
-            len += no;              // Increment dest index
-            if (len >= buf.length) {
-                flushBuffer();
-            }
-        }
-    }
-
-    void writeString(String str) {
-        writeString(str, 0, str.length());
-    }
-
-    void writeChar(char c) {
-        if (len >= buf.length) {
-            flushBuffer();
-        }
-        buf[len++] = c;
-    }
-
-    // Not using Integer.toString() since it creates intermediary String
-    // Also, we want the chars to be copied to our buffer directly
-    void writeInt(int num) {
-        int size;
-        if (num == Integer.MIN_VALUE) {
-            size = INT_MIN_VALUE_CHARS.length;
-        } else {
-            size = (num < 0) ? stringSize(-num) + 1 : stringSize(num);
-        }
-        if (len+size >= buf.length) {
-            flushBuffer();
-        }
-        if (num == Integer.MIN_VALUE) {
-            System.arraycopy(INT_MIN_VALUE_CHARS, 0, buf, len, size);
-        } else {
-            fillIntChars(num, buf, len+size);
-        }
-        len += size;
-    }
-
-    // flushBuffer writes the buffered contents to writer. But incase of
-    // byte stream, an OuputStreamWriter is created and that buffers too.
-    // We may need to call OutputStreamWriter#flushBuffer() using
-    // reflection if that is really required (commented out below)
-    void flushBuffer() {
-        try {
-            if (len > 0) {
-                writer.write(buf, 0, len);
-                len = 0;
-            }
-        } catch (IOException ioe) {
-            throw new JsonException(JsonMessages.GENERATOR_WRITE_IO_ERR(), ioe);
-        }
-    }
-
-//    private static final Method flushBufferMethod;
-//    static {
-//        Method m = null;
-//        try {
-//            m = OutputStreamWriter.class.getDeclaredMethod("flushBuffer");
-//            m.setAccessible(true);
-//        } catch (Exception e) {
-//            // no-op
-//        }
-//        flushBufferMethod = m;
-//    }
-//    void flushBufferOSW() {
-//        flushBuffer();
-//        if (writer instanceof OutputStreamWriter) {
-//            try {
-//                flushBufferMethod.invoke(writer);
-//            } catch (Exception e) {
-//                // no-op
-//            }
-//        }
-//    }
-
-    // Requires positive x
-    private static int stringSize(int x) {
-        for (int i=0; ; i++)
-            if (x <= INT_CHARS_SIZE_TABLE[i])
-                return i+1;
-    }
-
-    /**
-     * Places characters representing the integer i into the
-     * character array buf. The characters are placed into
-     * the buffer backwards starting with the least significant
-     * digit at the specified index (exclusive), and working
-     * backwards from there.
-     *
-     * Will fail if i == Integer.MIN_VALUE
-     */
-    private static void fillIntChars(int i, char[] buf, int index) {
-        int q, r;
-        int charPos = index;
-        char sign = 0;
-
-        if (i < 0) {
-            sign = '-';
-            i = -i;
-        }
-
-        // Generate two digits per iteration
-        while (i >= 65536) {
-            q = i / 100;
-            // really: r = i - (q * 100);
-            r = i - ((q << 6) + (q << 5) + (q << 2));
-            i = q;
-            buf [--charPos] = DIGIT_ONES[r];
-            buf [--charPos] = DIGIT_TENS[r];
-        }
-
-        // Fall thru to fast mode for smaller numbers
-        // assert(i <= 65536, i);
-        for (;;) {
-            q = (i * 52429) >>> (16+3);
-            r = i - ((q << 3) + (q << 1));  // r = i-(q*10) ...
-            buf [--charPos] = DIGITS[r];
-            i = q;
-            if (i == 0) break;
-        }
-        if (sign != 0) {
-            buf [--charPos] = sign;
-        }
-    }
-
-}
Index: trunk/src/org/glassfish/json/JsonLocationImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonLocationImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,81 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import javax.json.stream.JsonLocation;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonLocationImpl implements JsonLocation {
-    static final JsonLocation UNKNOWN = new JsonLocationImpl(-1, -1, -1);
-
-    private final long columnNo;
-    private final long lineNo;
-    private final long offset;
-
-    JsonLocationImpl(long lineNo, long columnNo, long streamOffset) {
-        this.lineNo = lineNo;
-        this.columnNo = columnNo;
-        this.offset = streamOffset;
-    }
-
-    @Override
-    public long getLineNumber() {
-        return lineNo;
-    }
-
-    @Override
-    public long getColumnNumber() {
-        return columnNo;
-    }
-
-    @Override
-    public long getStreamOffset() {
-        return offset;
-    }
-
-    @Override
-    public String toString() {
-        return "(line no="+lineNo+", column no="+columnNo+", offset="+ offset +")";
-    }
-
-}
Index: trunk/src/org/glassfish/json/JsonMergePatchImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonMergePatchImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,142 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import javax.json.Json;
-import javax.json.JsonMergePatch;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonValue;
-
-/**
- * This class is an implementation of a JSON Merge Patch as specified in
- * <a href="http://tools.ietf.org/html/rfc7396">RFC 7396</a>.
- *
- * @since 1.1
- */
-
-public final class JsonMergePatchImpl implements JsonMergePatch {
-
-    private JsonValue patch;
-
-    public JsonMergePatchImpl(JsonValue patch) {
-        this.patch = patch;
-    }
-
-    @Override
-    public JsonValue apply(JsonValue target) {
-        return mergePatch(target, patch);
-    }
-
-    @Override
-    public JsonValue toJsonValue() {
-        return patch;
-    }
-    /**
-     * Applies the specified patch to the specified target.
-     * The target is not modified by the patch.
-     *
-     * @param target the {@code JsonValue} to apply the patch operations
-     * @param patch the patch
-     * @return the {@code JsonValue} as the result of applying the patch
-     *    operations on the target.
-     */
-    private static JsonValue mergePatch(JsonValue target, JsonValue patch) {
-
-        if (patch.getValueType() != JsonValue.ValueType.OBJECT) {
-            return patch;
-        }
-        if (target.getValueType() != JsonValue.ValueType.OBJECT) {
-            target = JsonValue.EMPTY_JSON_OBJECT;
-        }
-        JsonObject targetJsonObject = target.asJsonObject();
-        JsonObjectBuilder builder =
-            Json.createObjectBuilder(targetJsonObject);
-        patch.asJsonObject().forEach((key, value) -> {
-            if (value == JsonValue.NULL) {
-                if (targetJsonObject.containsKey(key)) {
-                    builder.remove(key);
-                }
-            } else if (targetJsonObject.containsKey(key)) {
-                builder.add(key, mergePatch(targetJsonObject.get(key), value));
-            } else {
-                builder.add(key, mergePatch(JsonValue.EMPTY_JSON_OBJECT, value));
-            }
-        });
-        return builder.build();
-    }
-
-    /**
-     * Generate a JSON Merge Patch from the source and target {@code JsonValue}.
-     * @param source the source
-     * @param target the target
-     * @return a JSON Patch which when applied to the source, yields the target
-     */
-    static JsonValue diff(JsonValue source, JsonValue target) {
-        if (source.getValueType() != JsonValue.ValueType.OBJECT ||
-                target.getValueType() != JsonValue.ValueType.OBJECT) {
-            return target;
-        }
-        JsonObject s = (JsonObject) source;
-        JsonObject t = (JsonObject) target;
-        JsonObjectBuilder builder = Json.createObjectBuilder();
-        // First find members to be replaced or removed
-        s.forEach((key, value) -> {
-            if (t.containsKey(key)) {
-                // key present in both.
-                if (! value.equals(t.get(key))) {
-                    // If the values are equal, nop, else get diff for the values
-                    builder.add(key, diff(value, t.get(key)));
-                }
-            } else {
-                builder.addNull(key);
-            }
-        });
-        // Then find members to be added
-        t.forEach((key, value) -> {
-            if (! s.containsKey(key))
-                builder.add(key, value);
-        });
-        return builder.build();
-    }
-
-}
-
Index: trunk/src/org/glassfish/json/JsonMessages.java
===================================================================
--- trunk/src/org/glassfish/json/JsonMessages.java	(revision 16017)
+++ 	(revision )
@@ -1,310 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-
-import javax.json.stream.JsonLocation;
-import javax.json.stream.JsonParser;
-import java.text.MessageFormat;
-import java.util.ResourceBundle;
-import javax.json.JsonObject;
-import javax.json.JsonValue;
-
-/**
- * Defines string formatting method for each constant in the resource file
- *
- * @author Jitendra Kotamraju
- */
-final class JsonMessages {
-    private static final ResourceBundle BUNDLE =
-            ResourceBundle.getBundle("org.glassfish.json.messages");
-
-    // global/shared messages
-    static String INTERNAL_ERROR() {
-        return localize("internal.error");
-    }
-
-    // tokenizer messages
-    static String TOKENIZER_UNEXPECTED_CHAR(int unexpected, JsonLocation location) {
-        return localize("tokenizer.unexpected.char", unexpected, location);
-    }
-
-    static String TOKENIZER_EXPECTED_CHAR(int unexpected, JsonLocation location, char expected) {
-        return localize("tokenizer.expected.char", unexpected, location, expected);
-    }
-
-    static String TOKENIZER_IO_ERR() {
-        return localize("tokenizer.io.err");
-    }
-
-
-    // parser messages
-    static String PARSER_GETSTRING_ERR(JsonParser.Event event) {
-        return localize("parser.getString.err", event);
-    }
-
-    static String PARSER_ISINTEGRALNUMBER_ERR(JsonParser.Event event) {
-        return localize("parser.isIntegralNumber.err", event);
-    }
-
-    static String PARSER_GETINT_ERR(JsonParser.Event event) {
-        return localize("parser.getInt.err", event);
-    }
-
-    static String PARSER_GETLONG_ERR(JsonParser.Event event) {
-        return localize("parser.getLong.err", event);
-    }
-
-    static String PARSER_GETBIGDECIMAL_ERR(JsonParser.Event event) {
-        return localize("parser.getBigDecimal.err", event);
-    }
-
-    static String PARSER_GETARRAY_ERR(JsonParser.Event event) {
-        return localize("parser.getArray.err", event);
-    }
-
-    static String PARSER_GETOBJECT_ERR(JsonParser.Event event) {
-        return localize("parser.getObject.err", event);
-    }
-
-    static String PARSER_GETVALUE_ERR(JsonParser.Event event) {
-        return localize("parser.getValue.err", event);
-    }
-
-    static String PARSER_GETVALUESTREAM_ERR() {
-        return localize("parser.getValueStream.err");
-    }
-
-    static String PARSER_EXPECTED_EOF(JsonTokenizer.JsonToken token) {
-        return localize("parser.expected.eof", token);
-    }
-
-    static String PARSER_TOKENIZER_CLOSE_IO() {
-        return localize("parser.tokenizer.close.io");
-    }
-
-    static String PARSER_INVALID_TOKEN(JsonTokenizer.JsonToken token, JsonLocation location, String expectedTokens) {
-        return localize("parser.invalid.token", token, location, expectedTokens);
-    }
-
-    static String PARSER_STATE_ERR(JsonValue.ValueType type) {
-        return localize("parser.state.err", type);
-    }
-
-    static String PARSER_SCOPE_ERR(JsonValue value) {
-        return localize("parser.scope.err", value);
-    }
-
-    static String PARSER_INPUT_ENC_DETECT_FAILED() {
-        return localize("parser.input.enc.detect.failed");
-    }
-
-    static String PARSER_INPUT_ENC_DETECT_IOERR() {
-        return localize("parser.input.enc.detect.ioerr");
-    }
-
-    // generator messages
-    static String GENERATOR_FLUSH_IO_ERR() {
-        return localize("generator.flush.io.err");
-    }
-
-    static String GENERATOR_CLOSE_IO_ERR() {
-        return localize("generator.close.io.err");
-    }
-
-    static String GENERATOR_WRITE_IO_ERR() {
-        return localize("generator.write.io.err");
-    }
-
-    static String GENERATOR_ILLEGAL_METHOD(Object scope) {
-        return localize("generator.illegal.method", scope);
-    }
-
-    static String GENERATOR_DOUBLE_INFINITE_NAN() {
-        return localize("generator.double.infinite.nan");
-    }
-
-    static String GENERATOR_INCOMPLETE_JSON() {
-        return localize("generator.incomplete.json");
-    }
-
-    static String GENERATOR_ILLEGAL_MULTIPLE_TEXT() {
-        return localize("generator.illegal.multiple.text");
-    }
-
-
-
-    // writer messages
-    static String WRITER_WRITE_ALREADY_CALLED() {
-        return localize("writer.write.already.called");
-    }
-
-    // reader messages
-    static String READER_READ_ALREADY_CALLED() {
-        return localize("reader.read.already.called");
-    }
-
-
-    // obj builder messages
-    static String OBJBUILDER_NAME_NULL() {
-        return localize("objbuilder.name.null");
-    }
-
-    static String OBJBUILDER_VALUE_NULL() {
-        return localize("objbuilder.value.null");
-    }
-
-    static String OBJBUILDER_OBJECT_BUILDER_NULL() {
-        return localize("objbuilder.object.builder.null");
-    }
-
-    static String OBJBUILDER_ARRAY_BUILDER_NULL() {
-        return localize("objbuilder.array.builder.null");
-    }
-
-
-    // array builder messages
-    static String ARRBUILDER_VALUE_NULL() {
-        return localize("arrbuilder.value.null");
-    }
-
-    static String ARRBUILDER_OBJECT_BUILDER_NULL() {
-        return localize("arrbuilder.object.builder.null");
-    }
-
-    static String ARRBUILDER_ARRAY_BUILDER_NULL() {
-        return localize("arrbuilder.array.builder.null");
-    }
-
-    static String ARRBUILDER_VALUELIST_NULL(int index, int size) {
-        return localize("arrbuilder.valuelist.null", index, size);
-    }
-
-    // json pointer messages
-    static String POINTER_FORMAT_INVALID() {
-        return localize("pointer.format.invalid");
-    }
-
-    static String POINTER_MAPPING_MISSING(JsonObject object, String key) {
-        return localize("pointer.mapping.missing", object, key);
-    }
-
-    static String POINTER_REFERENCE_INVALID(JsonValue.ValueType type) {
-        return localize("pointer.reference.invalid", type.name());
-    }
-
-    static String POINTER_ARRAY_INDEX_ERR(String token) {
-        return localize("pointer.array.index.err", token);
-    }
-
-    static String POINTER_ARRAY_INDEX_ILLEGAL(String token) {
-        return localize("pointer.array.index.illegal", token);
-    }
-
-    // nodereference messages
-    static String NODEREF_VALUE_ADD_ERR() {
-        return localize("noderef.value.add.err");
-    }
-
-    static String NODEREF_VALUE_CANNOT_REMOVE() {
-        return localize("noderef.value.cannot.remove");
-    }
-
-    static String NODEREF_OBJECT_MISSING(String key) {
-        return localize("noderef.object.missing", key);
-    }
-
-    static String NODEREF_ARRAY_INDEX_ERR(int index, int size) {
-        return localize("noderef.array.index.err", index, size);
-    }
-
-    // json patch messages
-    static String PATCH_MUST_BE_ARRAY() {
-        return localize("patch.must.be.array");
-    }
-
-    static String PATCH_MOVE_PROPER_PREFIX(String from, String path) {
-        return localize("patch.move.proper.prefix", from, path);
-    }
-
-    static String PATCH_MOVE_TARGET_NULL(String from) {
-        return localize("patch.move.target.null", from);
-    }
-
-    static String PATCH_TEST_FAILED(String path, String value) {
-        return localize("patch.test.failed", path, value);
-    }
-
-    static String PATCH_ILLEGAL_OPERATION(String operation) {
-        return localize("patch.illegal.operation", operation);
-    }
-
-    static String PATCH_MEMBER_MISSING(String operation, String member) {
-        return localize("patch.member.missing", operation, member);
-    }
-
-
-    private static String localize(String key, Object ... args) {
-        try {
-            String msg = BUNDLE.getString(key);
-            return MessageFormat.format(msg, args);
-        } catch (Exception e) {
-            return getDefaultMessage(key, args);
-        }
-    }
-
-    private static String getDefaultMessage(String key, Object ... args) {
-        StringBuilder sb = new StringBuilder();
-        sb.append("[failed to localize] ");
-        sb.append(key);
-        if (args != null) {
-            sb.append('(');
-            for (int i = 0; i < args.length; ++i) {
-                if (i != 0)
-                    sb.append(", ");
-                sb.append(String.valueOf(args[i]));
-            }
-            sb.append(')');
-        }
-        return sb.toString();
-    }
-
-}
Index: trunk/src/org/glassfish/json/JsonNumberImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonNumberImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,288 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import javax.json.JsonNumber;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * JsonNumber impl. Subclasses provide optimized implementations
- * when backed by int, long, BigDecimal
- *
- * @author Jitendra Kotamraju
- */
-abstract class JsonNumberImpl implements JsonNumber {
-
-    static JsonNumber getJsonNumber(int num) {
-        return new JsonIntNumber(num);
-    }
-
-    static JsonNumber getJsonNumber(long num) {
-        return new JsonLongNumber(num);
-    }
-
-    static JsonNumber getJsonNumber(BigInteger value) {
-        return new JsonBigDecimalNumber(new BigDecimal(value));
-    }
-
-    static JsonNumber getJsonNumber(double value) {
-        //bigDecimal = new BigDecimal(value);
-        // This is the preferred way to convert double to BigDecimal
-        return new JsonBigDecimalNumber(BigDecimal.valueOf(value));
-    }
-
-    static JsonNumber getJsonNumber(BigDecimal value) {
-        return new JsonBigDecimalNumber(value);
-    }
-
-    // Optimized JsonNumber impl for int numbers.
-    private static final class JsonIntNumber extends JsonNumberImpl {
-        private final int num;
-        private BigDecimal bigDecimal;  // assigning it lazily on demand
-
-        JsonIntNumber(int num) {
-            this.num = num;
-        }
-
-        @Override
-        public boolean isIntegral() {
-            return true;
-        }
-
-        @Override
-        public int intValue() {
-            return num;
-        }
-
-        @Override
-        public int intValueExact() {
-            return num;
-        }
-
-        @Override
-        public long longValue() {
-            return num;
-        }
-
-        @Override
-        public long longValueExact() {
-            return num;
-        }
-
-        @Override
-        public double doubleValue() {
-            return num;
-        }
-
-        @Override
-        public BigDecimal bigDecimalValue() {
-            // reference assignments are atomic. At the most some more temp
-            // BigDecimal objects are created
-            BigDecimal bd = bigDecimal;
-            if (bd == null) {
-                bigDecimal = bd = new BigDecimal(num);
-            }
-            return bd;
-        }
-
-        @Override
-        public Number numberValue() {
-            return num;
-        }
-
-        @Override
-        public String toString() {
-            return Integer.toString(num);
-        }
-    }
-
-    // Optimized JsonNumber impl for long numbers.
-    private static final class JsonLongNumber extends JsonNumberImpl {
-        private final long num;
-        private BigDecimal bigDecimal;  // assigning it lazily on demand
-
-        JsonLongNumber(long num) {
-            this.num = num;
-        }
-
-        @Override
-        public boolean isIntegral() {
-            return true;
-        }
-
-        @Override
-        public int intValue() {
-            return (int) num;
-        }
-
-        @Override
-        public int intValueExact() {
-            return Math.toIntExact(num);
-        }
-
-        @Override
-        public long longValue() {
-            return num;
-        }
-
-        @Override
-        public long longValueExact() {
-            return num;
-        }
-
-        @Override
-        public double doubleValue() {
-            return num;
-        }
-
-        @Override
-        public BigDecimal bigDecimalValue() {
-            // reference assignments are atomic. At the most some more temp
-            // BigDecimal objects are created
-            BigDecimal bd = bigDecimal;
-            if (bd == null) {
-                bigDecimal = bd = new BigDecimal(num);
-            }
-            return bd;
-        }
-
-        @Override
-        public Number numberValue() {
-            return num;
-        }
-
-        @Override
-        public String toString() {
-            return Long.toString(num);
-        }
-
-    }
-
-    // JsonNumber impl using BigDecimal numbers.
-    private static final class JsonBigDecimalNumber extends JsonNumberImpl {
-        private final BigDecimal bigDecimal;
-
-        JsonBigDecimalNumber(BigDecimal value) {
-            this.bigDecimal = value;
-        }
-
-        @Override
-        public BigDecimal bigDecimalValue() {
-            return bigDecimal;
-        }
-
-        @Override
-        public Number numberValue() {
-            return bigDecimalValue();
-        }
-
-    }
-
-    @Override
-    public boolean isIntegral() {
-        return bigDecimalValue().scale() == 0;
-    }
-
-    @Override
-    public int intValue() {
-        return bigDecimalValue().intValue();
-    }
-
-    @Override
-    public int intValueExact() {
-        return bigDecimalValue().intValueExact();
-    }
-
-    @Override
-    public long longValue() {
-        return bigDecimalValue().longValue();
-    }
-
-    @Override
-    public long longValueExact() {
-        return bigDecimalValue().longValueExact();
-    }
-
-    @Override
-    public double doubleValue() {
-        return bigDecimalValue().doubleValue();
-    }
-
-    @Override
-    public BigInteger bigIntegerValue() {
-        return bigDecimalValue().toBigInteger();
-    }
-
-    @Override
-    public BigInteger bigIntegerValueExact() {
-        return bigDecimalValue().toBigIntegerExact();
-    }
-
-    @Override
-    public ValueType getValueType() {
-        return ValueType.NUMBER;
-    }
-
-    @Override
-    public int hashCode() {
-        return bigDecimalValue().hashCode();
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj){
-            return true;
-        }
-        if (!(obj instanceof JsonNumber)) {
-            return false;
-        }
-        JsonNumber other = (JsonNumber)obj;
-        return bigDecimalValue().equals(other.bigDecimalValue());
-    }
-
-    @Override
-    public String toString() {
-        return bigDecimalValue().toString();
-    }
-
-}
-
Index: trunk/src/org/glassfish/json/JsonObjectBuilderImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonObjectBuilderImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,351 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.JsonArrayBuilder;
-import javax.json.*;
-import java.io.StringWriter;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.*;
-
-/**
- * JsonObjectBuilder implementation
- *
- * @author Jitendra Kotamraju
- * @author Kin-man Chung
- */
-class JsonObjectBuilderImpl implements JsonObjectBuilder {
-
-    private Map<String, JsonValue> valueMap;
-    private final BufferPool bufferPool;
-
-    JsonObjectBuilderImpl(BufferPool bufferPool) {
-        this.bufferPool = bufferPool;
-    }
-
-    JsonObjectBuilderImpl(JsonObject object, BufferPool bufferPool) {
-        this.bufferPool = bufferPool;
-        valueMap = new LinkedHashMap<>();
-        valueMap.putAll(object);
-    }
-
-    JsonObjectBuilderImpl(Map<String, Object> map, BufferPool bufferPool) {
-        this.bufferPool = bufferPool;
-        valueMap = new LinkedHashMap<>();
-        populate(map);
-    }
-
-    @Override
-    public JsonObjectBuilder add(String name, JsonValue value) {
-        validateName(name);
-        validateValue(value);
-        putValueMap(name, value);
-        return this;
-    }
-
-    @Override
-    public JsonObjectBuilder add(String name, String value) {
-        validateName(name);
-        validateValue(value);
-        putValueMap(name, new JsonStringImpl(value));
-        return this;
-    }
-
-    @Override
-    public JsonObjectBuilder add(String name, BigInteger value) {
-        validateName(name);
-        validateValue(value);
-        putValueMap(name, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonObjectBuilder add(String name, BigDecimal value) {
-        validateName(name);
-        validateValue(value);
-        putValueMap(name, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonObjectBuilder add(String name, int value) {
-        validateName(name);
-        putValueMap(name, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonObjectBuilder add(String name, long value) {
-        validateName(name);
-        putValueMap(name, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonObjectBuilder add(String name, double value) {
-        validateName(name);
-        putValueMap(name, JsonNumberImpl.getJsonNumber(value));
-        return this;
-    }
-
-    @Override
-    public JsonObjectBuilder add(String name, boolean value) {
-        validateName(name);
-        putValueMap(name, value ? JsonValue.TRUE : JsonValue.FALSE);
-        return this;
-    }
-
-    @Override
-    public JsonObjectBuilder addNull(String name) {
-        validateName(name);
-        putValueMap(name, JsonValue.NULL);
-        return this;
-    }
-
-    @Override
-    public JsonObjectBuilder add(String name, JsonObjectBuilder builder) {
-        validateName(name);
-        if (builder == null) {
-            throw new NullPointerException(JsonMessages.OBJBUILDER_OBJECT_BUILDER_NULL());
-        }
-        putValueMap(name, builder.build());
-        return this;
-    }
-
-    @Override
-    public JsonObjectBuilder add(String name, JsonArrayBuilder builder) {
-        validateName(name);
-        if (builder == null) {
-            throw new NullPointerException(JsonMessages.OBJBUILDER_ARRAY_BUILDER_NULL());
-        }
-        putValueMap(name, builder.build());
-        return this;
-    }
-
-    @Override
-    public JsonObjectBuilder addAll(JsonObjectBuilder builder) {
-        if (builder == null) {
-            throw new NullPointerException(JsonMessages.OBJBUILDER_OBJECT_BUILDER_NULL());
-        }
-        if (valueMap == null) {
-            this.valueMap = new LinkedHashMap<>();
-        }
-        this.valueMap.putAll(builder.build());
-        return this;
-    }
-
-    @Override
-    public JsonObjectBuilder remove(String name) {
-        validateName(name);
-        this.valueMap.remove(name);
-        return this;
-    }
-
-    @Override
-    public JsonObject build() {
-        Map<String, JsonValue> snapshot = (valueMap == null)
-                ? Collections.<String, JsonValue>emptyMap()
-                : Collections.unmodifiableMap(valueMap);
-        valueMap = null;
-        return new JsonObjectImpl(snapshot, bufferPool);
-    }
-
-    private void populate(Map<String, Object> map) {
-        final Set<String> fields = map.keySet();
-        for (String field : fields) {
-            Object value = map.get(field);
-            if (value != null && value instanceof Optional) {
-                ((Optional<?>) value).ifPresent(v ->
-                        this.valueMap.put(field, MapUtil.handle(v, bufferPool)));
-            } else {
-                this.valueMap.put(field, MapUtil.handle(value, bufferPool));
-            }
-        }
-    }
-
-    private void putValueMap(String name, JsonValue value) {
-        if (valueMap == null) {
-            this.valueMap = new LinkedHashMap<>();
-        }
-        valueMap.put(name, value);
-    }
-
-    private void validateName(String name) {
-        if (name == null) {
-            throw new NullPointerException(JsonMessages.OBJBUILDER_NAME_NULL());
-        }
-    }
-
-    private void validateValue(Object value) {
-        if (value == null) {
-            throw new NullPointerException(JsonMessages.OBJBUILDER_VALUE_NULL());
-        }
-    }
-
-    private static final class JsonObjectImpl extends AbstractMap<String, JsonValue> implements JsonObject {
-        private final Map<String, JsonValue> valueMap;      // unmodifiable
-        private final BufferPool bufferPool;
-
-        JsonObjectImpl(Map<String, JsonValue> valueMap, BufferPool bufferPool) {
-            this.valueMap = valueMap;
-            this.bufferPool = bufferPool;
-        }
-
-        @Override
-        public JsonArray getJsonArray(String name) {
-            return (JsonArray)get(name);
-        }
-
-        @Override
-        public JsonObject getJsonObject(String name) {
-            return (JsonObject)get(name);
-        }
-
-        @Override
-        public JsonNumber getJsonNumber(String name) {
-            return (JsonNumber)get(name);
-        }
-
-        @Override
-        public JsonString getJsonString(String name) {
-            return (JsonString)get(name);
-        }
-
-        @Override
-        public String getString(String name) {
-            return getJsonString(name).getString();
-        }
-
-        @Override
-        public String getString(String name, String defaultValue) {
-            try {
-                return getString(name);
-            } catch (Exception e) {
-                return defaultValue;
-            }
-        }
-
-        @Override
-        public int getInt(String name) {
-            return getJsonNumber(name).intValue();
-        }
-
-        @Override
-        public int getInt(String name, int defaultValue) {
-            try {
-                return getInt(name);
-            } catch (Exception e) {
-                return defaultValue;
-            }
-        }
-
-        @Override
-        public boolean getBoolean(String name) {
-            JsonValue value = get(name);
-            if (value == null) {
-                throw new NullPointerException();
-            } else if (value == JsonValue.TRUE) {
-                return true;
-            } else if (value == JsonValue.FALSE) {
-                return false;
-            } else {
-                throw new ClassCastException();
-            }
-        }
-
-        @Override
-        public boolean getBoolean(String name, boolean defaultValue) {
-            try {
-                return getBoolean(name);
-            } catch (Exception e) {
-                return defaultValue;
-            }
-        }
-
-        @Override
-        public boolean isNull(String name) {
-            return get(name).equals(JsonValue.NULL);
-        }
-
-        @Override
-        public ValueType getValueType() {
-            return ValueType.OBJECT;
-        }
-
-        @Override
-        public Set<Entry<String, JsonValue>> entrySet() {
-            return valueMap.entrySet();
-        }
-
-        @Override
-        public String toString() {
-            StringWriter sw = new StringWriter();
-            try (JsonWriter jw = new JsonWriterImpl(sw, bufferPool)) {
-                jw.write(this);
-            }
-            return sw.toString();
-        }
-
-        @Override
-        public JsonObject asJsonObject() {
-            return this;
-        }
-
-        @Override
-        public int size() {
-            return valueMap.size();
-        }
-
-        @Override
-        public JsonValue get(Object key) {
-            return valueMap.get(key);
-        }
-
-        @Override
-        public boolean containsKey(Object key) {
-            return valueMap.containsKey(key);
-        }
-    }
-
-}
Index: trunk/src/org/glassfish/json/JsonParserFactoryImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonParserFactoryImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,95 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.JsonArray;
-import javax.json.JsonObject;
-import javax.json.stream.JsonParserFactory;
-import javax.json.stream.JsonParser;
-import java.io.InputStream;
-import java.io.Reader;
-import java.nio.charset.Charset;
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonParserFactoryImpl implements JsonParserFactory {
-    private final Map<String, ?> config = Collections.emptyMap();
-    private final BufferPool bufferPool;
-
-    JsonParserFactoryImpl(BufferPool bufferPool) {
-        this.bufferPool = bufferPool;
-    }
-
-    @Override
-    public JsonParser createParser(Reader reader) {
-        return new JsonParserImpl(reader, bufferPool);
-    }
-
-    @Override
-    public JsonParser createParser(InputStream in) {
-        return new JsonParserImpl(in, bufferPool);
-    }
-
-    @Override
-    public JsonParser createParser(InputStream in, Charset charset) {
-        return new JsonParserImpl(in, charset, bufferPool);
-    }
-
-    @Override
-    public JsonParser createParser(JsonArray array) {
-        return new JsonStructureParser(array);
-    }
-
-    @Override
-    public Map<String, ?> getConfigInUse() {
-        return config;
-    }
-
-    @Override
-    public JsonParser createParser(JsonObject object) {
-        return new JsonStructureParser(object);
-    }
-}
Index: trunk/src/org/glassfish/json/JsonParserImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonParserImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,563 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.math.BigDecimal;
-import java.nio.charset.Charset;
-import java.util.AbstractMap;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Spliterator;
-import java.util.Spliterators;
-import java.util.function.Consumer;
-import java.util.stream.Stream;
-import java.util.stream.StreamSupport;
-
-import javax.json.JsonArray;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonValue;
-import javax.json.stream.JsonLocation;
-import javax.json.stream.JsonParser;
-import javax.json.stream.JsonParser.Event;
-import javax.json.stream.JsonParsingException;
-
-import org.glassfish.json.JsonTokenizer.JsonToken;
-import org.glassfish.json.api.BufferPool;
-
-/**
- * JSON parser implementation. NoneContext, ArrayContext, ObjectContext is used
- * to go to next parser state.
- *
- * @author Jitendra Kotamraju
- * @author Kin-man Chung
- */
-public class JsonParserImpl implements JsonParser {
-
-    private final BufferPool bufferPool;
-    private Context currentContext = new NoneContext();
-    private Event currentEvent;
-
-    private final Stack stack = new Stack();
-    private final JsonTokenizer tokenizer;
-
-    public JsonParserImpl(Reader reader, BufferPool bufferPool) {
-        this.bufferPool = bufferPool;
-        tokenizer = new JsonTokenizer(reader, bufferPool);
-    }
-
-    public JsonParserImpl(InputStream in, BufferPool bufferPool) {
-        this.bufferPool = bufferPool;
-        UnicodeDetectingInputStream uin = new UnicodeDetectingInputStream(in);
-        tokenizer = new JsonTokenizer(new InputStreamReader(uin, uin.getCharset()), bufferPool);
-    }
-
-    public JsonParserImpl(InputStream in, Charset encoding, BufferPool bufferPool) {
-        this.bufferPool = bufferPool;
-        tokenizer = new JsonTokenizer(new InputStreamReader(in, encoding), bufferPool);
-    }
-
-    @Override
-    public String getString() {
-        if (currentEvent == Event.KEY_NAME || currentEvent == Event.VALUE_STRING
-                || currentEvent == Event.VALUE_NUMBER) {
-            return tokenizer.getValue();
-        }
-        throw new IllegalStateException(
-                JsonMessages.PARSER_GETSTRING_ERR(currentEvent));
-    }
-
-    @Override
-    public boolean isIntegralNumber() {
-        if (currentEvent != Event.VALUE_NUMBER) {
-            throw new IllegalStateException(
-                    JsonMessages.PARSER_ISINTEGRALNUMBER_ERR(currentEvent));
-        }
-        return tokenizer.isIntegral();
-    }
-
-    @Override
-    public int getInt() {
-        if (currentEvent != Event.VALUE_NUMBER) {
-            throw new IllegalStateException(
-                    JsonMessages.PARSER_GETINT_ERR(currentEvent));
-        }
-        return tokenizer.getInt();
-    }
-
-    boolean isDefinitelyInt() {
-        return tokenizer.isDefinitelyInt();
-    }
-
-    boolean isDefinitelyLong() {
-    	return tokenizer.isDefinitelyLong();
-    }
-
-    @Override
-    public long getLong() {
-        if (currentEvent != Event.VALUE_NUMBER) {
-            throw new IllegalStateException(
-                    JsonMessages.PARSER_GETLONG_ERR(currentEvent));
-        }
-        return tokenizer.getLong();
-    }
-
-    @Override
-    public BigDecimal getBigDecimal() {
-        if (currentEvent != Event.VALUE_NUMBER) {
-            throw new IllegalStateException(
-                    JsonMessages.PARSER_GETBIGDECIMAL_ERR(currentEvent));
-        }
-        return tokenizer.getBigDecimal();
-    }
-
-    @Override
-    public JsonArray getArray() {
-        if (currentEvent != Event.START_ARRAY) {
-            throw new IllegalStateException(
-                JsonMessages.PARSER_GETARRAY_ERR(currentEvent));
-        }
-        return getArray(new JsonArrayBuilderImpl(bufferPool));
-    }
-
-    @Override
-    public JsonObject getObject() {
-        if (currentEvent != Event.START_OBJECT) {
-            throw new IllegalStateException(
-                JsonMessages.PARSER_GETOBJECT_ERR(currentEvent));
-        }
-        return getObject(new JsonObjectBuilderImpl(bufferPool));
-    }
-
-    @Override
-    public JsonValue getValue() {
-        switch (currentEvent) {
-            case START_ARRAY:
-                return getArray(new JsonArrayBuilderImpl(bufferPool));
-            case START_OBJECT:
-                return getObject(new JsonObjectBuilderImpl(bufferPool));
-            case KEY_NAME:
-            case VALUE_STRING:
-                return new JsonStringImpl(getString());
-            case VALUE_NUMBER:
-                if (isDefinitelyInt()) {
-                    return JsonNumberImpl.getJsonNumber(getInt());
-                } else if (isDefinitelyLong()) {
-                    return JsonNumberImpl.getJsonNumber(getLong());
-                }
-                return JsonNumberImpl.getJsonNumber(getBigDecimal());
-            case VALUE_TRUE:
-                return JsonValue.TRUE;
-            case VALUE_FALSE:
-                return JsonValue.FALSE;
-            case VALUE_NULL:
-                return JsonValue.NULL;
-            case END_ARRAY:
-            case END_OBJECT:
-            default:
-            	throw new IllegalStateException(JsonMessages.PARSER_GETVALUE_ERR(currentEvent));
-        }
-    }
-
-    @Override
-    public Stream<JsonValue> getArrayStream() {
-        if (currentEvent != Event.START_ARRAY) {
-            throw new IllegalStateException(
-                JsonMessages.PARSER_GETARRAY_ERR(currentEvent));
-        }
-        Spliterator<JsonValue> spliterator =
-                new Spliterators.AbstractSpliterator<JsonValue>(Long.MAX_VALUE, Spliterator.ORDERED) {
-            @Override
-            public Spliterator<JsonValue> trySplit() {
-                return null;
-            }
-            @Override
-            public boolean tryAdvance(Consumer<? super JsonValue> action) {
-                if (action == null) {
-                    throw new NullPointerException();
-                }
-                if (! hasNext()) {
-                    return false;
-                }
-                if (next() == JsonParser.Event.END_ARRAY) {
-                    return false;
-                }
-                action.accept(getValue());
-                return true;
-            }
-        };
-        return StreamSupport.stream(spliterator, false);
-    }
-
-    @Override
-    public Stream<Map.Entry<String, JsonValue>> getObjectStream() {
-        if (currentEvent != Event.START_OBJECT) {
-            throw new IllegalStateException(
-                JsonMessages.PARSER_GETOBJECT_ERR(currentEvent));
-        }
-        Spliterator<Map.Entry<String, JsonValue>> spliterator =
-                new Spliterators.AbstractSpliterator<Map.Entry<String, JsonValue>>(Long.MAX_VALUE, Spliterator.ORDERED) {
-            @Override
-            public Spliterator<Map.Entry<String,JsonValue>> trySplit() {
-                return null;
-            }
-            @Override
-            public boolean tryAdvance(Consumer<? super Map.Entry<String, JsonValue>> action) {
-                if (action == null) {
-                    throw new NullPointerException();
-                }
-                if (! hasNext()) {
-                    return false;
-                }
-                JsonParser.Event e = next();
-                if (e == JsonParser.Event.END_OBJECT) {
-                    return false;
-                }
-                if (e != JsonParser.Event.KEY_NAME) {
-                    throw new JsonException(JsonMessages.INTERNAL_ERROR());
-                }
-                String key = getString();
-                if (! hasNext()) {
-                    throw new JsonException(JsonMessages.INTERNAL_ERROR());
-                }
-                next();
-                JsonValue value = getValue();
-                action.accept(new AbstractMap.SimpleImmutableEntry<>(key, value));
-                return true;
-            }
-        };
-        return StreamSupport.stream(spliterator, false);
-    }
-
-    @Override
-    public Stream<JsonValue> getValueStream() {
-        if (! (currentContext instanceof NoneContext)) {
-            throw new IllegalStateException(
-                JsonMessages.PARSER_GETVALUESTREAM_ERR());
-        }
-        Spliterator<JsonValue> spliterator =
-                new Spliterators.AbstractSpliterator<JsonValue>(Long.MAX_VALUE, Spliterator.ORDERED) {
-            @Override
-            public Spliterator<JsonValue> trySplit() {
-                return null;
-            }
-            @Override
-            public boolean tryAdvance(Consumer<? super JsonValue> action) {
-                if (action == null) {
-                    throw new NullPointerException();
-                }
-                if (! hasNext()) {
-                    return false;
-                }
-                next();
-                action.accept(getValue());
-                return true;
-            }
-        };
-        return StreamSupport.stream(spliterator, false);
-    }
-
-    @Override
-    public void skipArray() {
-        if (currentEvent == Event.START_ARRAY) {
-            currentContext.skip();
-            currentContext = stack.pop();
-        }
-    }
-
-    @Override
-    public void skipObject() {
-        if (currentEvent == Event.START_OBJECT) {
-            currentContext.skip();
-            currentContext = stack.pop();
-        }
-    }
-
-    private JsonArray getArray(JsonArrayBuilder builder) {
-        while(hasNext()) {
-            JsonParser.Event e = next();
-            if (e == JsonParser.Event.END_ARRAY) {
-                return builder.build();
-            }
-            builder.add(getValue());
-        }
-        throw parsingException(JsonToken.EOF, "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, FALSE, NULL, SQUARECLOSE]");
-    }
-
-    private JsonObject getObject(JsonObjectBuilder builder) {
-        while(hasNext()) {
-            JsonParser.Event e = next();
-            if (e == JsonParser.Event.END_OBJECT) {
-                return builder.build();
-            }
-            String key = getString();
-            next();
-            builder.add(key, getValue());
-        }
-        throw parsingException(JsonToken.EOF, "[STRING, CURLYCLOSE]");
-    }
-
-    @Override
-    public JsonLocation getLocation() {
-        return tokenizer.getLocation();
-    }
-
-    public JsonLocation getLastCharLocation() {
-        return tokenizer.getLastCharLocation();
-    }
-
-    @Override
-    public boolean hasNext() {
-        return tokenizer.hasNextToken();
-    }
-
-    @Override
-    public Event next() {
-        if (!hasNext()) {
-            throw new NoSuchElementException();
-        }
-        return currentEvent = currentContext.getNextEvent();
-    }
-
-    @Override
-    public void close() {
-        try {
-            tokenizer.close();
-        } catch (IOException e) {
-            throw new JsonException(JsonMessages.PARSER_TOKENIZER_CLOSE_IO(), e);
-        }
-    }
-
-    // Using the optimized stack impl as we don't require other things
-    // like iterator etc.
-    private static final class Stack {
-        private Context head;
-
-        private void push(Context context) {
-            context.next = head;
-            head = context;
-        }
-
-        private Context pop() {
-            if (head == null) {
-                throw new NoSuchElementException();
-            }
-            Context temp = head;
-            head = head.next;
-            return temp;
-        }
-
-        private Context peek() {
-            return head;
-        }
-
-        private boolean isEmpty() {
-            return head == null;
-        }
-    }
-
-    private abstract class Context {
-        Context next;
-        abstract Event getNextEvent();
-        abstract void skip();
-    }
-
-    private final class NoneContext extends Context {
-        @Override
-        public Event getNextEvent() {
-            // Handle 1. {   2. [   3. value
-            JsonToken token = tokenizer.nextToken();
-            if (token == JsonToken.CURLYOPEN) {
-                stack.push(currentContext);
-                currentContext = new ObjectContext();
-                return Event.START_OBJECT;
-            } else if (token == JsonToken.SQUAREOPEN) {
-                stack.push(currentContext);
-                currentContext = new ArrayContext();
-                return Event.START_ARRAY;
-            } else if (token.isValue()) {
-                return token.getEvent();
-            }
-            throw parsingException(token, "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, FALSE, NULL]");
-        }
-
-        @Override
-        void skip() {
-            // no-op
-        }
-    }
-
-    private JsonParsingException parsingException(JsonToken token, String expectedTokens) {
-        JsonLocation location = getLastCharLocation();
-        return new JsonParsingException(
-                JsonMessages.PARSER_INVALID_TOKEN(token, location, expectedTokens), location);
-    }
-
-    private final class ObjectContext extends Context {
-        private boolean firstValue = true;
-
-        /*
-         * Some more things could be optimized. For example, instead
-         * tokenizer.nextToken(), one could use tokenizer.matchColonToken() to
-         * match ':'. That might optimize a bit, but will fragment nextToken().
-         * I think the current one is more readable.
-         *
-         */
-        @Override
-        public Event getNextEvent() {
-            // Handle 1. }   2. name:value   3. ,name:value
-            JsonToken token = tokenizer.nextToken();
-            if (currentEvent == Event.KEY_NAME) {
-                // Handle 1. :value
-                if (token != JsonToken.COLON) {
-                    throw parsingException(token, "[COLON]");
-                }
-                token = tokenizer.nextToken();
-                if (token.isValue()) {
-                    return token.getEvent();
-                } else if (token == JsonToken.CURLYOPEN) {
-                    stack.push(currentContext);
-                    currentContext = new ObjectContext();
-                    return Event.START_OBJECT;
-                } else if (token == JsonToken.SQUAREOPEN) {
-                    stack.push(currentContext);
-                    currentContext = new ArrayContext();
-                    return Event.START_ARRAY;
-                }
-                throw parsingException(token, "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, FALSE, NULL]");
-            } else {
-                // Handle 1. }   2. name   3. ,name
-                if (token == JsonToken.CURLYCLOSE) {
-                    currentContext = stack.pop();
-                    return Event.END_OBJECT;
-                }
-                if (firstValue) {
-                    firstValue = false;
-                } else {
-                    if (token != JsonToken.COMMA) {
-                        throw parsingException(token, "[COMMA]");
-                    }
-                    token = tokenizer.nextToken();
-                }
-                if (token == JsonToken.STRING) {
-                    return Event.KEY_NAME;
-                }
-                throw parsingException(token, "[STRING]");
-            }
-        }
-
-        @Override
-        void skip() {
-            JsonToken token;
-            int depth = 1;
-            do {
-                token = tokenizer.nextToken();
-                switch (token) {
-                    case CURLYCLOSE:
-                        depth--;
-                        break;
-                    case CURLYOPEN:
-                        depth++;
-                        break;
-                }
-            } while (!(token == JsonToken.CURLYCLOSE && depth == 0));
-        }
-
-    }
-
-    private final class ArrayContext extends Context {
-        private boolean firstValue = true;
-
-        // Handle 1. ]   2. value   3. ,value
-        @Override
-        public Event getNextEvent() {
-            JsonToken token = tokenizer.nextToken();
-            if (token == JsonToken.SQUARECLOSE) {
-                currentContext = stack.pop();
-                return Event.END_ARRAY;
-            }
-            if (firstValue) {
-                firstValue = false;
-            } else {
-                if (token != JsonToken.COMMA) {
-                    throw parsingException(token, "[COMMA]");
-                }
-                token = tokenizer.nextToken();
-            }
-            if (token.isValue()) {
-                return token.getEvent();
-            } else if (token == JsonToken.CURLYOPEN) {
-                stack.push(currentContext);
-                currentContext = new ObjectContext();
-                return Event.START_OBJECT;
-            } else if (token == JsonToken.SQUAREOPEN) {
-                stack.push(currentContext);
-                currentContext = new ArrayContext();
-                return Event.START_ARRAY;
-            }
-            throw parsingException(token, "[CURLYOPEN, SQUAREOPEN, STRING, NUMBER, TRUE, FALSE, NULL]");
-        }
-
-        @Override
-        void skip() {
-            JsonToken token;
-            int depth = 1;
-            do {
-                token = tokenizer.nextToken();
-                switch (token) {
-                    case SQUARECLOSE:
-                        depth--;
-                        break;
-                    case SQUAREOPEN:
-                        depth++;
-                        break;
-                }
-            } while (!(token == JsonToken.SQUARECLOSE && depth == 0));
-        }
-    }
-
-}
Index: trunk/src/org/glassfish/json/JsonPatchBuilderImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonPatchBuilderImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,362 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonException;
-import javax.json.JsonPatch;
-import javax.json.JsonPatch.Operation;
-import javax.json.JsonPatchBuilder;
-import javax.json.JsonStructure;
-import javax.json.JsonValue;
-
-/**
- * A builder for constructing a JSON Patch by adding
- * JSON Patch operations incrementally.
- * <p>
- * The following illustrates the approach.
- * <pre>
- *   JsonPatchBuilder builder = Json.createPatchBuilder();
- *   JsonPatch patch = builder.add("/John/phones/office", "1234-567")
- *                            .remove("/Amy/age")
- *                            .build();
- * </pre>
- * The result is equivalent to the following JSON Patch.
- * <pre>
- * [
- *    {"op" = "add", "path" = "/John/phones/office", "value" = "1234-567"},
- *    {"op" = "remove", "path" = "/Amy/age"}
- * ] </pre>
- *
- * @since 1.1
- */
-public final class JsonPatchBuilderImpl implements JsonPatchBuilder {
-
-    private final JsonArrayBuilder builder;
-
-    /**
-     * Creates a JsonPatchBuilderImpl, starting with the specified
-     * JSON Patch
-     * @param patch the JSON Patch
-     */
-    public JsonPatchBuilderImpl(JsonArray patch) {
-        builder = Json.createArrayBuilder(patch);
-    }
-
-    /**
-     * Creates JsonPatchBuilderImpl with empty JSON Patch
-     */
-    public JsonPatchBuilderImpl() {
-        builder = Json.createArrayBuilder();
-    }
-
-    /**
-     * A convenience method for {@code new JsonPatchImpl(build()).apply(target)}.
-     * The target is not modified by the patch.
-     *
-     * @param <T> the target type, must be a subtype of {@link JsonStructure}
-     * @param target the target to apply the patch operations
-     * @return the transformed target after the patch
-     * @throws JsonException if the supplied JSON Patch is malformed or if
-     *    it contains references to non-existing members
-     */
-    public <T extends JsonStructure> T apply(T target) {
-        return build().apply(target);
-    }
-
-    /**
-     * Adds an "add" JSON Patch operation.
-     * @param path the "path" member of the operation
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    @Override
-    public JsonPatchBuilder add(String path, JsonValue value) {
-        builder.add(Json.createObjectBuilder()
-                           .add("op", Operation.ADD.operationName())
-                           .add("path", path)
-                           .add("value", value)
-                   );
-        return this;
-    }
-
-    /**
-     * Adds an "add" JSON Patch operation
-     * @param path the "path" member of the operation
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    @Override
-    public JsonPatchBuilder add(String path, String value) {
-        builder.add(Json.createObjectBuilder()
-                           .add("op", Operation.ADD.operationName())
-                           .add("path", path)
-                           .add("value", value)
-                   );
-        return this;
-    }
-
-    /**
-     * Adds an "add" JSON Patch operation
-     * @param path the "path" member of the operation
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    @Override
-    public JsonPatchBuilder add(String path, int value) {
-        builder.add(Json.createObjectBuilder()
-                           .add("op", Operation.ADD.operationName())
-                           .add("path", path)
-                           .add("value", value)
-                  );
-        return this;
-    }
-
-    /**
-     * Adds an "add" JSON Patch operation
-     * @param path the "path" member of the operation
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    @Override
-    public JsonPatchBuilder add(String path, boolean value) {
-        builder.add(Json.createObjectBuilder()
-                           .add("op", Operation.ADD.operationName())
-                           .add("path", path)
-                           .add("value", value)
-                   );
-        return this;
-    }
-
-    /**
-     * Adds a "remove" JSON Patch operation.
-     * @param path the "path" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    @Override
-    public JsonPatchBuilder remove(String path) {
-        builder.add(Json.createObjectBuilder()
-                           .add("op", Operation.REMOVE.operationName())
-                           .add("path", path)
-                    );
-        return this;
-    }
-
-    /**
-     * Adds a "replace" JSON Patch operation.
-     * @param path the "path" member of the operation
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    @Override
-    public JsonPatchBuilder replace(String path, JsonValue value) {
-        builder.add(Json.createObjectBuilder()
-                           .add("op", Operation.REPLACE.operationName())
-                           .add("path", path)
-                           .add("value", value)
-                  );
-        return this;
-    }
-
-    /**
-     * Adds a "replace" JSON Patch operation.
-     * @param path the "path" member of the operation
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    @Override
-    public JsonPatchBuilder replace(String path, String value) {
-        builder.add(Json.createObjectBuilder()
-                           .add("op", Operation.REPLACE.operationName())
-                           .add("path", path)
-                           .add("value", value)
-                  );
-        return this;
-    }
-
-    /**
-     * Adds a "replace" JSON Patch operation.
-     * @param path the "path" member of the operation
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    @Override
-    public JsonPatchBuilder replace(String path, int value) {
-        builder.add(Json.createObjectBuilder()
-                           .add("op", Operation.REPLACE.operationName())
-                           .add("path", path)
-                           .add("value", value)
-                  );
-        return this;
-    }
-
-    /**
-     * Adds a "replace" JSON Patch operation.
-     * @param path the "path" member of the operation
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    @Override
-    public JsonPatchBuilder replace(String path, boolean value) {
-        builder.add(Json.createObjectBuilder()
-                           .add("op", Operation.REPLACE.operationName())
-                           .add("path", path)
-                           .add("value", value)
-                  );
-        return this;
-    }
-
-    /**
-     * Adds a "move" JSON Patch operation.
-     * @param path the "path" member of the operation
-     * @param from the "from" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    @Override
-    public JsonPatchBuilder move(String path, String from) {
-        builder.add(Json.createObjectBuilder()
-                           .add("op", Operation.MOVE.operationName())
-                           .add("path", path)
-                           .add("from", from)
-                  );
-        return this;
-    }
-
-    /**
-     * Adds a "copy" JSON Patch operation.
-     * @param path the "path" member of the operation
-     * @param from the "from" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    @Override
-    public JsonPatchBuilder copy(String path, String from) {
-        builder.add(Json.createObjectBuilder()
-                           .add("op", Operation.COPY.operationName())
-                           .add("path", path)
-                           .add("from", from)
-                  );
-        return this;
-    }
-
-    /**
-     * Adds a "test" JSON Patch operation.
-     * @param path the "path" member of the operation
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    @Override
-    public JsonPatchBuilder test(String path, JsonValue value) {
-        builder.add(Json.createObjectBuilder()
-                           .add("op", Operation.TEST.operationName())
-                           .add("path", path)
-                           .add("value", value)
-                  );
-        return this;
-    }
-
-    /**
-     * Adds a "test" JSON Patch operation.
-     * @param path the "path" member of the operation
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    @Override
-    public JsonPatchBuilder test(String path, String value) {
-        builder.add(Json.createObjectBuilder()
-                           .add("op", Operation.TEST.operationName())
-                           .add("path", path)
-                           .add("value", value)
-                  );
-        return this;
-    }
-
-    /**
-     * Adds a "test" JSON Patch operation.
-     * @param path the "path" member of the operation
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    @Override
-    public JsonPatchBuilder test(String path, int value) {
-        builder.add(Json.createObjectBuilder()
-                           .add("op", Operation.TEST.operationName())
-                           .add("path", path)
-                           .add("value", value)
-                  );
-        return this;
-    }
-
-    /**
-     * Adds a "test" JSON Patch operation.
-     * @param path the "path" member of the operation
-     * @param value the "value" member of the operation
-     * @return this JsonPatchBuilder
-     */
-    @Override
-    public JsonPatchBuilder test(String path, boolean value) {
-        builder.add(Json.createObjectBuilder()
-                           .add("op", Operation.TEST.operationName())
-                           .add("path", path)
-                           .add("value", value)
-                  );
-        return this;
-    }
-
-    /**
-     * Returns the patch operations in a JsonArray
-     * @return the patch operations in a JsonArray
-     */
-    public JsonArray buildAsJsonArray() {
-        return builder.build();
-    }
-
-    /**
-     * Returns the patch operation in a JsonPatch
-     * @return the patch operation in a JsonPatch
-     */
-    @Override
-    public JsonPatch build() {
-        return new JsonPatchImpl(buildAsJsonArray());
-    }
-}
-
Index: trunk/src/org/glassfish/json/JsonPatchImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonPatchImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,321 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import javax.json.*;
-import javax.json.JsonValue.ValueType;
-
-/**
- * This class is an immutable representation of a JSON Patch as specified in
- * <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>.
- * <p>A {@code JsonPatch} can be instantiated with {@link Json#createPatch(JsonArray)}
- * by specifying the patch operations in a JSON Patch. Alternately, it
- * can also be constructed with a {@link JsonPatchBuilder}.
- * </p>
- * The following illustrates both approaches.
- * <p>1. Construct a JsonPatch with a JSON Patch.
- * <pre>{@code
- *   JsonArray contacts = ... // The target to be patched
- *   JsonArray patch = ...  ; // JSON Patch
- *   JsonPatch jsonpatch = Json.createPatch(patch);
- *   JsonArray result = jsonpatch.apply(contacts);
- * } </pre>
- * 2. Construct a JsonPatch with JsonPatchBuilder.
- * <pre>{@code
- *   JsonPatchBuilder builder = Json.createPatchBuilder();
- *   JsonArray result = builder.add("/John/phones/office", "1234-567")
- *                             .remove("/Amy/age")
- *                             .build()
- *                             .apply(contacts);
- * } </pre>
- *
- * @since 1.1
- */
-public class JsonPatchImpl implements JsonPatch {
-
-    private final JsonArray patch;
-
-    /**
-     * Constructs a JsonPatchImpl
-     * @param patch the JSON Patch
-     */
-    public JsonPatchImpl(JsonArray patch) {
-        this.patch = patch;
-    }
-
-    /**
-     * Compares this {@code JsonPatchImpl} with another object.
-     * @param obj the object to compare this {@code JsonPatchImpl} against
-     * @return true if the given object is a {@code JsonPatchImpl} with the same
-     * reference tokens as this one, false otherwise.
-     */
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (obj == null || obj.getClass() != JsonPatchImpl.class)
-            return false;
-        return patch.equals(((JsonPatchImpl)obj).patch);
-    }
-
-    /**
-     * Returns the hash code value for this {@code JsonPatchImpl}.
-     *
-     * @return the hash code value for this {@code JsonPatchImpl} object
-     */
-    @Override
-    public int hashCode() {
-        return patch.hashCode();
-    }
-
-    /**
-     * Returns the JSON Patch text
-     * @return the JSON Patch text
-     */
-    @Override
-    public String toString() {
-        return patch.toString();
-    }
-
-    /**
-     * Applies the patch operations to the specified {@code target}.
-     * The target is not modified by the patch.
-     *
-     * @param target the target to apply the patch operations
-     * @return the transformed target after the patch
-     * @throws JsonException if the supplied JSON Patch is malformed or if
-     *    it contains references to non-existing members
-     */
-    @Override
-    public JsonStructure apply(JsonStructure target) {
-
-        JsonStructure result = target;
-
-        for (JsonValue operation: patch) {
-            if (operation.getValueType() != ValueType.OBJECT) {
-                throw new JsonException(JsonMessages.PATCH_MUST_BE_ARRAY());
-            }
-            result = apply(result, (JsonObject) operation);
-        }
-        return result;
-    }
-
-    @Override
-    public JsonArray toJsonArray() {
-        return patch;
-    }
-
-    /**
-     * Generates a JSON Patch from the source and target {@code JsonStructure}.
-     * The generated JSON Patch need not be unique.
-     * @param source the source
-     * @param target the target, must be the same type as the source
-     * @return a JSON Patch which when applied to the source, yields the target
-     */
-    public static JsonArray diff(JsonStructure source, JsonStructure target) {
-        return (new DiffGenerator()).diff(source, target);
-    }
-
-    /**
-     * Applies a JSON Patch operation to the target.
-     * @param target the target to apply the operation
-     * @param operation the JSON Patch operation
-     * @return the target after the patch
-     */
-    private JsonStructure apply(JsonStructure target, JsonObject operation) {
-
-        JsonPointer pointer = getPointer(operation, "path");
-        JsonPointer from;
-        switch (Operation.fromOperationName(operation.getString("op"))) {
-            case ADD:
-                return pointer.add(target, getValue(operation));
-            case REPLACE:
-                return pointer.replace(target, getValue(operation));
-            case REMOVE:
-                return pointer.remove(target);
-            case COPY:
-                from = getPointer(operation, "from");
-                return pointer.add(target, from.getValue(target));
-            case MOVE:
-                // Check if from is a proper prefix of path
-                String dest = operation.getString("path");
-                String src = operation.getString("from");
-                if (dest.startsWith(src) && src.length() < dest.length()) {
-                    throw new JsonException(JsonMessages.PATCH_MOVE_PROPER_PREFIX(src, dest));
-                }
-                from = getPointer(operation, "from");
-                // Check if 'from' exists in target object
-                if (!from.containsValue(target)) {
-                    throw new JsonException(JsonMessages.PATCH_MOVE_TARGET_NULL(src));
-                }
-                if (pointer.equals(from)) {
-                    // nop
-                    return target;
-                }
-                return pointer.add(from.remove(target), from.getValue(target));
-            case TEST:
-                if (! getValue(operation).equals(pointer.getValue(target))) {
-                    throw new JsonException(JsonMessages.PATCH_TEST_FAILED(operation.getString("path"), getValue(operation).toString()));
-                }
-                return target;
-            default:
-                throw new JsonException(JsonMessages.PATCH_ILLEGAL_OPERATION(operation.getString("op")));
-        }
-    }
-
-    private JsonPointer getPointer(JsonObject operation, String member) {
-        JsonString pointerString = operation.getJsonString(member);
-        if (pointerString == null) {
-            missingMember(operation.getString("op"), member);
-        }
-        return Json.createPointer(pointerString.getString());
-    }
-
-    private JsonValue getValue(JsonObject operation) {
-        JsonValue value = operation.get("value");
-        if (value == null) {
-            missingMember(operation.getString("op"), "value");
-        }
-        return value;
-    }
-
-    private void missingMember(String op, String  member) {
-        throw new JsonException(JsonMessages.PATCH_MEMBER_MISSING(op, member));
-    }
-
-    static class DiffGenerator {
-        private JsonPatchBuilder builder;
-
-        JsonArray diff(JsonStructure source, JsonStructure target) {
-            builder = Json.createPatchBuilder();
-            diff("", source, target);
-            return builder.build().toJsonArray();
-        }
-
-        private void diff(String path, JsonValue source, JsonValue target) {
-            if (source.equals(target)) {
-                return;
-            }
-            ValueType s = source.getValueType();
-            ValueType t = target.getValueType();
-            if (s == ValueType.OBJECT && t == ValueType.OBJECT) {
-                diffObject(path, (JsonObject) source, (JsonObject) target);
-            } else if (s == ValueType.ARRAY && t == ValueType.ARRAY) {
-                diffArray(path, (JsonArray) source, (JsonArray) target);
-            } else {
-                builder.replace(path, target);
-            }
-        }
-
-        private void diffObject(String path, JsonObject source, JsonObject target) {
-            source.forEach((key, value) -> {
-                if (target.containsKey(key)) {
-                    diff(path + '/' + key, value, target.get(key));
-                } else {
-                    builder.remove(path + '/' + key);
-                }
-            });
-            target.forEach((key, value) -> {
-                if (! source.containsKey(key)) {
-                    builder.add(path + '/' + key, value);
-                }
-            });
-        }
-
-        /*
-         * For array element diff, find the longest common subsequence, per
-         * http://en.wikipedia.org/wiki/Longest_common_subsequence_problem .
-         * We modify the algorithm to generate a replace if possible.
-         */
-        private void diffArray(String path, JsonArray source, JsonArray target) {
-            /* The array c keeps track of length of the subsequence. To avoid
-             * computing the equality of array elements again, we
-             * left shift its value by 1, and use the low order bit to mark
-             * that two items are equal.
-             */
-            int m = source.size();
-            int n = target.size();
-            int [][] c = new int[m+1][n+1];
-            for (int i = 0; i < m+1; i++)
-                c[i][0] = 0;
-            for (int i = 0; i < n+1; i++)
-                c[0][i] = 0;
-            for (int i = 0; i < m; i++) {
-                for (int j = 0; j < n; j++) {
-                    if (source.get(i).equals(target.get(j))) {
-                        c[i+1][j+1] = ((c[i][j]) & ~1) + 3;
-                        // 3 = (1 << 1) | 1;
-                    } else {
-                        c[i+1][j+1] = Math.max(c[i+1][j], c[i][j+1]) & ~1;
-                    }
-                }
-            }
-
-            int i = m;
-            int j = n;
-            while (i > 0 || j > 0) {
-                if (i == 0) {
-                    j--;
-                    builder.add(path + '/' + j, target.get(j));
-                } else if (j == 0) {
-                    i--;
-                    builder.remove(path + '/' + i);
-                } else if ((c[i][j] & 1) == 1) {
-                    i--; j--;
-                } else {
-                    int f = c[i][j-1] >> 1;
-                    int g = c[i-1][j] >> 1;
-                    if (f > g) {
-                        j--;
-                        builder.add(path + '/' + j, target.get(j));
-                    } else if (f < g) {
-                        i--;
-                        builder.remove(path + '/' + i);
-                    } else { // f == g) {
-                       i--; j--;
-                       diff(path + '/' + i, source.get(i), target.get(j));
-                    }
-                }
-            }
-        }
-    }
-}
-
Index: trunk/src/org/glassfish/json/JsonPointerImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonPointerImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,316 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import javax.json.JsonArray;
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonPointer;
-import javax.json.JsonStructure;
-import javax.json.JsonValue;
-import java.io.Serializable;
-import java.util.function.BiFunction;
-
-/**
- * <p>This class is an immutable representation of a JSON Pointer as specified in
- * <a href="http://tools.ietf.org/html/rfc6901">RFC 6901</a>.
- * </p>
- * <p> A JSON Pointer, when applied to a target {@link JsonValue},
- * defines a reference location in the target.</p>
- * <p> An empty JSON Pointer string defines a reference to the target itself.</p>
- * <p> If the JSON Pointer string is non-empty, it must be a sequence
- * of '/' prefixed tokens, and the target must either be a {@link JsonArray}
- * or {@link JsonObject}. If the target is a {@code JsonArray}, the pointer
- * defines a reference to an array element, and the last token specifies the index.
- * If the target is a {@link JsonObject}, the pointer defines a reference to a
- * name/value pair, and the last token specifies the name.
- * </p>
- * <p> The method {@link #getValue getValue()} returns the referenced value.
- * The methods {@link #add add()}, {@link #replace replace()},
- * and {@link #remove remove()} executes the operations specified in
- * <a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a>. </p>
- *
- * @since 1.1
- */
-
-public final class JsonPointerImpl implements JsonPointer, Serializable {
-
-    private static final long serialVersionUID = -8123110179640843141L;
-    private final String[] tokens;
-    private final String jsonPointer;
-
-    /**
-     * Constructs and initializes a JsonPointerImpl.
-     * @param jsonPointer the JSON Pointer string
-     * @throws NullPointerException if {@code jsonPointer} is {@code null}
-     * @throws JsonException if {@code jsonPointer} is not a valid JSON Pointer
-     */
-    public JsonPointerImpl(String jsonPointer) {
-        this.jsonPointer = jsonPointer;
-        tokens = jsonPointer.split("/", -1);  // keep the trailing blanks
-        if (! "".equals(tokens[0])) {
-            throw new JsonException(JsonMessages.POINTER_FORMAT_INVALID());
-        }
-        for (int i = 1; i < tokens.length; i++) {
-            String token = tokens[i];
-            StringBuilder reftoken = new StringBuilder();
-            for (int j = 0; j < token.length(); j++) {
-                char ch = token.charAt(j);
-                if (ch == '~' && j < token.length() - 1) {
-                    char ch1 = token.charAt(j+1);
-                    if (ch1 == '0') {
-                        ch = '~'; j++;
-                    } else if (ch1 == '1') {
-                        ch = '/'; j++;
-                    }
-                }
-                reftoken.append(ch);
-            }
-            tokens[i] = reftoken.toString();
-        }
-    }
-
-    /**
-     * Compares this {@code JsonPointer} with another object.
-     * @param obj the object to compare this {@code JsonPointer} against
-     * @return true if the given object is a {@code JsonPointer} with the same
-     * reference tokens as this one, false otherwise.
-     */
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (obj == null || obj.getClass() != JsonPointerImpl.class)
-            return false;
-        return jsonPointer.equals(((JsonPointerImpl)obj).jsonPointer);
-    }
-
-    /**
-     * Returns the hash code value for this {@code JsonPointer} object.
-     * The hash code of this object is defined by the hash codes of it's reference tokens.
-     *
-     * @return the hash code value for this {@code JsonPointer} object
-     */
-    @Override
-    public int hashCode() {
-        return jsonPointer.hashCode();
-    }
-
-    /**
-     * Returns {@code true} if there is a value at the referenced location in the specified {@code target}.
-     *
-     * @param target the target referenced by this {@code JsonPointer}
-     * @return {@code true} if this pointer points to a value in a specified {@code target}.
-     */
-    @Override
-    public boolean containsValue(JsonStructure target) {
-        NodeReference[] refs = getReferences(target);
-        return refs[0].contains();
-    }
-
-    /**
-     * Returns the value at the referenced location in the specified {@code target}
-     *
-     * @param target the target referenced by this {@code JsonPointer}
-     * @return the referenced value in the target.
-     * @throws NullPointerException if {@code target} is null
-     * @throws JsonException if the referenced value does not exist
-     */
-    @Override
-    public JsonValue getValue(JsonStructure target) {
-        NodeReference[] refs = getReferences(target);
-        return refs[0].get();
-    }
-
-    /**
-     * Adds or replaces a value at the referenced location in the specified
-     * {@code target} with the specified {@code value}.
-     * <ol>
-     * <li>If the reference is the target (empty JSON Pointer string),
-     * the specified {@code value}, which must be the same type as
-     * specified {@code target}, is returned.</li>
-     * <li>If the reference is an array element, the specified {@code value} is inserted
-     * into the array, at the referenced index. The value currently at that location, and
-     * any subsequent values, are shifted to the right (adds one to the indices).
-     * Index starts with 0. If the reference is specified with a "-", or if the
-     * index is equal to the size of the array, the value is appended to the array.</li>
-     * <li>If the reference is a name/value pair of a {@code JsonObject}, and the
-     * referenced value exists, the value is replaced by the specified {@code value}.
-     * If the value does not exist, a new name/value pair is added to the object.</li>
-     * </ol>
-     *
-     * @param target the target referenced by this {@code JsonPointer}
-     * @param value the value to be added
-     * @return the transformed {@code target} after the value is added.
-     * @throws NullPointerException if {@code target} is {@code null}
-     * @throws JsonException if the reference is an array element and
-     * the index is out of range ({@code index < 0 || index > array size}),
-     * or if the pointer contains references to non-existing objects or arrays.
-     */
-    @Override
-    public JsonStructure add(JsonStructure target, JsonValue value) {
-        return execute(NodeReference::add, target, value);
-    }
-
-    /**
-     * Replaces the value at the referenced location in the specified
-     * {@code target} with the specified {@code value}.
-     *
-     * @param target the target referenced by this {@code JsonPointer}
-     * @param value the value to be stored at the referenced location
-     * @return the transformed {@code target} after the value is replaced.
-     * @throws NullPointerException if {@code target} is {@code null}
-     * @throws JsonException if the referenced value does not exist,
-     *    or if the reference is the target.
-     */
-    @Override
-    public JsonStructure replace(JsonStructure target, JsonValue value) {
-        return execute(NodeReference::replace, target, value);
-    }
-
-    /**
-     * Removes the value at the reference location in the specified {@code target}
-     *
-     * @param target the target referenced by this {@code JsonPointer}
-     * @return the transformed {@code target} after the value is removed.
-     * @throws NullPointerException if {@code target} is {@code null}
-     * @throws JsonException if the referenced value does not exist,
-     *    or if the reference is the target.
-     */
-    @Override
-    public JsonStructure remove(JsonStructure target) {
-        return execute((r,v)->r.remove(), target, null);
-    }
-
-    /**
-     * Executes the operation
-     * @param op a {code BiFunction} used to specify the operation to execute on
-     *    the leaf node of the Json Pointer
-     * @param target the target JsonStructure for this JsonPointer
-     * @param value the JsonValue for add and replace, can be null for getvalue and remove
-     */
-    private JsonStructure execute(BiFunction<NodeReference, JsonValue, JsonStructure> op,
-            JsonStructure target, JsonValue value) {
-
-        NodeReference[] refs = getReferences(target);
-        JsonStructure result = op.apply(refs[0], value);
-        for (int i = 1; i < refs.length; i++) {
-            result = refs[i].replace(result);
-        }
-        return result;
-    }
-
-    /**
-     * Computes the {@code NodeReference}s for each node on the path of
-     * the JSON Pointer, in reverse order, starting from the leaf node
-     */
-    private NodeReference[] getReferences(JsonStructure target) {
-        NodeReference[] references;
-        // First check if this is a reference to a JSON value tree
-        if (tokens.length == 1) {
-            references = new NodeReference[1];
-            references[0] = NodeReference.of(target);
-            return references;
-        }
-
-        references = new NodeReference[tokens.length-1];
-        JsonValue value = target;
-        int s = tokens.length;
-        for (int i = 1; i < s; i++) {
-             // Start with index 1, skipping the "" token
-            switch (value.getValueType()) {
-                case OBJECT:
-                    JsonObject object = (JsonObject) value;
-                    references[s-i-1] = NodeReference.of(object, tokens[i]);
-                    if (i < s-1) {
-                        value = object.get(tokens[i]);
-                        if (value == null) {
-                            // Except for the last name, the mapping must exist
-                            throw new JsonException(JsonMessages.POINTER_MAPPING_MISSING(object, tokens[i]));
-                        }
-                    }
-                    break;
-                case ARRAY:
-                    int index = getIndex(tokens[i]);
-                    JsonArray array = (JsonArray) value;
-                    references[s-i-1] = NodeReference.of(array, index);
-                    if (i < s-1 && index != -1) {
-                        if (index >= array.size()) {
-                            throw new JsonException(JsonMessages.NODEREF_ARRAY_INDEX_ERR(index, array.size()));
-                        }
-                        // The last array index in the path can have index value of -1
-                        // ("-" in the JSON pointer)
-                        value = array.get(index);
-                    }
-                    break;
-                default:
-                    throw new JsonException(JsonMessages.POINTER_REFERENCE_INVALID(value.getValueType()));
-             }
-        }
-        return references;
-    }
-
-    /**
-     * Computes the array index
-     * @param token the input string token
-     * @return the array index. -1 if the token is "-"
-     * @throws JsonException if the string token is not in correct format
-     */
-    static private int getIndex(String token) {
-        if (token == null || token.length() == 0) {
-            throw new JsonException(JsonMessages.POINTER_ARRAY_INDEX_ERR(token));
-        }
-        if (token.equals("-")) {
-            return -1;
-        }
-        if (token.equals("0")) {
-            return 0;
-        }
-        if (token.charAt(0) == '+' || token.charAt(0) == '-') {
-            throw new JsonException(JsonMessages.POINTER_ARRAY_INDEX_ERR(token));
-        }
-        try {
-            return Integer.parseInt(token);
-        } catch (NumberFormatException ex) {
-            throw new JsonException(JsonMessages.POINTER_ARRAY_INDEX_ILLEGAL(token), ex);
-       }
-    }
-}
Index: trunk/src/org/glassfish/json/JsonPrettyGeneratorImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonPrettyGeneratorImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,128 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.stream.JsonGenerator;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.Charset;
-
-/**
- * @author Jitendra Kotamraju
- */
-public class JsonPrettyGeneratorImpl extends JsonGeneratorImpl {
-    private int indentLevel;
-    private static final String INDENT = "    ";
-
-    public JsonPrettyGeneratorImpl(Writer writer, BufferPool bufferPool) {
-        super(writer, bufferPool);
-    }
-
-    public JsonPrettyGeneratorImpl(OutputStream out, BufferPool bufferPool) {
-        super(out, bufferPool);
-    }
-
-    public JsonPrettyGeneratorImpl(OutputStream out, Charset encoding, BufferPool bufferPool) {
-        super(out, encoding, bufferPool);
-    }
-
-    @Override
-    public JsonGenerator writeStartObject() {
-        super.writeStartObject();
-        indentLevel++;
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeStartObject(String name) {
-        super.writeStartObject(name);
-        indentLevel++;
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeStartArray() {
-        super.writeStartArray();
-        indentLevel++;
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeStartArray(String name) {
-        super.writeStartArray(name);
-        indentLevel++;
-        return this;
-    }
-
-    @Override
-    public JsonGenerator writeEnd() {
-        writeNewLine();
-        indentLevel--;
-        writeIndent();
-        super.writeEnd();
-        return this;
-    }
-
-    private void writeIndent() {
-        for(int i=0; i < indentLevel; i++) {
-            writeString(INDENT);
-        }
-    }
-
-    @Override
-    protected void writeComma() {
-        super.writeComma();
-        writeChar('\n');
-        writeIndent();
-    }
-
-    @Override
-    protected void writeColon() {
-        super.writeColon();
-        writeChar(' ');
-    }
-
-    private void writeNewLine() {
-        writeChar('\n');
-    }
-}
Index: trunk/src/org/glassfish/json/JsonProviderImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonProviderImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,296 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.*;
-import javax.json.stream.JsonGenerator;
-import javax.json.stream.JsonGeneratorFactory;
-import javax.json.stream.JsonParser;
-import javax.json.stream.JsonParserFactory;
-import javax.json.spi.JsonProvider;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.io.Writer;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * @author Jitendra Kotamraju
- * @author Kin-man Chung
- * @author Alex Soto
- */
-public class JsonProviderImpl extends JsonProvider {
-
-    private final BufferPool bufferPool = new BufferPoolImpl();
-
-    @Override
-    public JsonGenerator createGenerator(Writer writer) {
-        return new JsonGeneratorImpl(writer, bufferPool);
-    }
-
-    @Override
-    public JsonGenerator createGenerator(OutputStream out) {
-        return new JsonGeneratorImpl(out, bufferPool);
-    }
-
-    @Override
-    public JsonParser createParser(Reader reader) {
-        return new JsonParserImpl(reader, bufferPool);
-    }
-
-    @Override
-    public JsonParser createParser(InputStream in) {
-        return new JsonParserImpl(in, bufferPool);
-    }
-
-    @Override
-    public JsonParserFactory createParserFactory(Map<String, ?> config) {
-        BufferPool pool = null;
-        if (config != null && config.containsKey(BufferPool.class.getName())) {
-            pool = (BufferPool)config.get(BufferPool.class.getName());
-        }
-        if (pool == null) {
-            pool = bufferPool;
-        }
-        return new JsonParserFactoryImpl(pool);
-    }
-
-    @Override
-    public JsonGeneratorFactory createGeneratorFactory(Map<String, ?> config) {
-        Map<String, Object> providerConfig;
-        boolean prettyPrinting;
-        BufferPool pool;
-        if (config == null) {
-            providerConfig = Collections.emptyMap();
-            prettyPrinting = false;
-            pool = bufferPool;
-        } else {
-            providerConfig = new HashMap<>();
-            if (prettyPrinting=JsonProviderImpl.isPrettyPrintingEnabled(config)) {
-                providerConfig.put(JsonGenerator.PRETTY_PRINTING, true);
-            }
-            pool = (BufferPool)config.get(BufferPool.class.getName());
-            if (pool != null) {
-                providerConfig.put(BufferPool.class.getName(), pool);
-            } else {
-                pool = bufferPool;
-            }
-            providerConfig = Collections.unmodifiableMap(providerConfig);
-        }
-
-        return new JsonGeneratorFactoryImpl(providerConfig, prettyPrinting, pool);
-    }
-
-    @Override
-    public JsonReader createReader(Reader reader) {
-        return new JsonReaderImpl(reader, bufferPool);
-    }
-
-    @Override
-    public JsonReader createReader(InputStream in) {
-        return new JsonReaderImpl(in, bufferPool);
-    }
-
-    @Override
-    public JsonWriter createWriter(Writer writer) {
-        return new JsonWriterImpl(writer, bufferPool);
-    }
-
-    @Override
-    public JsonWriter createWriter(OutputStream out) {
-        return new JsonWriterImpl(out, bufferPool);
-    }
-
-    @Override
-    public JsonWriterFactory createWriterFactory(Map<String, ?> config) {
-        Map<String, Object> providerConfig;
-        boolean prettyPrinting;
-        BufferPool pool;
-        if (config == null) {
-            providerConfig = Collections.emptyMap();
-            prettyPrinting = false;
-            pool = bufferPool;
-        } else {
-            providerConfig = new HashMap<>();
-            if (prettyPrinting=JsonProviderImpl.isPrettyPrintingEnabled(config)) {
-                providerConfig.put(JsonGenerator.PRETTY_PRINTING, true);
-            }
-            pool = (BufferPool)config.get(BufferPool.class.getName());
-            if (pool != null) {
-                providerConfig.put(BufferPool.class.getName(), pool);
-            } else {
-                pool = bufferPool;
-            }
-            providerConfig = Collections.unmodifiableMap(providerConfig);
-        }
-        return new JsonWriterFactoryImpl(providerConfig, prettyPrinting, pool);
-    }
-
-    @Override
-    public JsonReaderFactory createReaderFactory(Map<String, ?> config) {
-        BufferPool pool = null;
-        if (config != null && config.containsKey(BufferPool.class.getName())) {
-            pool = (BufferPool)config.get(BufferPool.class.getName());
-        }
-        if (pool == null) {
-            pool = bufferPool;
-        }
-        return new JsonReaderFactoryImpl(pool);
-    }
-
-    @Override
-    public JsonObjectBuilder createObjectBuilder() {
-        return new JsonObjectBuilderImpl(bufferPool);
-    }
-
-    @Override
-    public JsonObjectBuilder createObjectBuilder(JsonObject object) {
-        return new JsonObjectBuilderImpl(object, bufferPool);
-    }
-
-    @Override
-    public JsonObjectBuilder createObjectBuilder(Map<String, Object> map) {
-        return new JsonObjectBuilderImpl(map, bufferPool);
-    }
-
-    @Override
-    public JsonArrayBuilder createArrayBuilder() {
-        return new JsonArrayBuilderImpl(bufferPool);
-    }
-
-    @Override
-    public JsonArrayBuilder createArrayBuilder(JsonArray array) {
-        return new JsonArrayBuilderImpl(array, bufferPool);
-    }
-
-    @Override
-    public JsonArrayBuilder createArrayBuilder(Collection<?> collection) {
-        return new JsonArrayBuilderImpl(collection, bufferPool);
-    }
-
-    @Override
-    public JsonPointer createPointer(String jsonPointer) {
-        return new JsonPointerImpl(jsonPointer);
-    }
-
-    @Override
-    public JsonPatchBuilder createPatchBuilder() {
-        return new JsonPatchBuilderImpl();
-    }
-
-    @Override
-    public JsonPatchBuilder createPatchBuilder(JsonArray array) {
-        return new JsonPatchBuilderImpl(array);
-    }
-
-    @Override
-    public JsonPatch createPatch(JsonArray array) {
-        return new JsonPatchImpl(array);
-    }
-
-    @Override
-    public JsonPatch createDiff(JsonStructure source, JsonStructure target) {
-        return new JsonPatchImpl(JsonPatchImpl.diff(source, target));
-    }
-
-    @Override
-    public JsonMergePatch createMergePatch(JsonValue patch) {
-        return new JsonMergePatchImpl(patch);
-    }
-
-    @Override
-    public JsonMergePatch createMergeDiff(JsonValue source, JsonValue target) {
-        return new JsonMergePatchImpl(JsonMergePatchImpl.diff(source, target));
-    }
-
-    @Override
-    public JsonString createValue(String value) {
-        return new JsonStringImpl(value);
-    }
-
-    @Override
-    public JsonNumber createValue(int value) {
-        return JsonNumberImpl.getJsonNumber(value);
-    }
-
-    @Override
-    public JsonNumber createValue(long value) {
-        return JsonNumberImpl.getJsonNumber(value);
-    }
-
-    @Override
-    public JsonNumber createValue(double value) {
-        return JsonNumberImpl.getJsonNumber(value);
-    }
-
-    @Override
-    public JsonNumber createValue(BigInteger value) {
-        return JsonNumberImpl.getJsonNumber(value);
-    }
-
-    @Override
-    public JsonNumber createValue(BigDecimal value) {
-        return JsonNumberImpl.getJsonNumber(value);
-    }
-
-    @Override
-    public JsonBuilderFactory createBuilderFactory(Map<String,?> config) {
-        BufferPool pool = null ;
-        if (config != null && config.containsKey(BufferPool.class.getName())) {
-            pool = (BufferPool)config.get(BufferPool.class.getName());
-        }
-        if (pool == null) {
-            pool = bufferPool;
-        }
-        return new JsonBuilderFactoryImpl(pool);
-    }
-
-    static boolean isPrettyPrintingEnabled(Map<String, ?> config) {
-        return config.containsKey(JsonGenerator.PRETTY_PRINTING);
-    }
-}
Index: trunk/src/org/glassfish/json/JsonReaderFactoryImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonReaderFactoryImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,83 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.JsonReader;
-import javax.json.JsonReaderFactory;
-import java.io.InputStream;
-import java.io.Reader;
-import java.nio.charset.Charset;
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonReaderFactoryImpl implements JsonReaderFactory {
-    private final Map<String, ?> config = Collections.emptyMap();
-    private final BufferPool bufferPool;
-
-    JsonReaderFactoryImpl(BufferPool bufferPool) {
-        this.bufferPool = bufferPool;
-    }
-
-    @Override
-    public JsonReader createReader(Reader reader) {
-        return new JsonReaderImpl(reader, bufferPool);
-    }
-
-    @Override
-    public JsonReader createReader(InputStream in) {
-        return new JsonReaderImpl(in, bufferPool);
-    }
-
-    @Override
-    public JsonReader createReader(InputStream in, Charset charset) {
-        return new JsonReaderImpl(in, charset, bufferPool);
-    }
-
-    @Override
-    public Map<String, ?> getConfigInUse() {
-        return config;
-    }
-}
Index: trunk/src/org/glassfish/json/JsonReaderImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonReaderImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,159 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import java.io.InputStream;
-import java.io.Reader;
-import java.nio.charset.Charset;
-import javax.json.JsonArray;
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonReader;
-import javax.json.JsonStructure;
-import javax.json.JsonValue;
-import javax.json.stream.JsonParser;
-import javax.json.stream.JsonParsingException;
-
-/**
- * JsonReader impl using parser and builders.
- *
- * @author Jitendra Kotamraju
- */
-class JsonReaderImpl implements JsonReader {
-    private final JsonParserImpl parser;
-    private boolean readDone;
-    private final BufferPool bufferPool;
-
-    JsonReaderImpl(Reader reader, BufferPool bufferPool) {
-        parser = new JsonParserImpl(reader, bufferPool);
-        this.bufferPool = bufferPool;
-    }
-
-    JsonReaderImpl(InputStream in, BufferPool bufferPool) {
-        parser = new JsonParserImpl(in, bufferPool);
-        this.bufferPool = bufferPool;
-    }
-
-    JsonReaderImpl(InputStream in, Charset charset, BufferPool bufferPool) {
-        parser = new JsonParserImpl(in, charset, bufferPool);
-        this.bufferPool = bufferPool;
-    }
-
-    @Override
-    public JsonStructure read() {
-        if (readDone) {
-            throw new IllegalStateException(JsonMessages.READER_READ_ALREADY_CALLED());
-        }
-        readDone = true;
-        if (parser.hasNext()) {
-            try {
-                JsonParser.Event e = parser.next();
-                if (e == JsonParser.Event.START_ARRAY) {
-                    return parser.getArray();
-                } else if (e == JsonParser.Event.START_OBJECT) {
-                    return parser.getObject();
-                }
-            } catch (IllegalStateException ise) {
-                throw new JsonParsingException(ise.getMessage(), ise, parser.getLastCharLocation());
-            }
-        }
-        throw new JsonException(JsonMessages.INTERNAL_ERROR());
-    }
-
-    @Override
-    public JsonObject readObject() {
-        if (readDone) {
-            throw new IllegalStateException(JsonMessages.READER_READ_ALREADY_CALLED());
-        }
-        readDone = true;
-        if (parser.hasNext()) {
-            try {
-                parser.next();
-                return parser.getObject();
-            } catch (IllegalStateException ise) {
-                throw new JsonParsingException(ise.getMessage(), ise, parser.getLastCharLocation());
-            }
-        }
-        throw new JsonException(JsonMessages.INTERNAL_ERROR());
-    }
-
-    @Override
-    public JsonArray readArray() {
-        if (readDone) {
-            throw new IllegalStateException(JsonMessages.READER_READ_ALREADY_CALLED());
-        }
-        readDone = true;
-        if (parser.hasNext()) {
-            try {
-                parser.next();
-                return parser.getArray();
-            } catch (IllegalStateException ise) {
-                throw new JsonParsingException(ise.getMessage(), ise, parser.getLastCharLocation());
-            }
-        }
-        throw new JsonException(JsonMessages.INTERNAL_ERROR());
-    }
-
-    @Override
-    public JsonValue readValue() {
-        if (readDone) {
-            throw new IllegalStateException(JsonMessages.READER_READ_ALREADY_CALLED());
-        }
-        readDone = true;
-        if (parser.hasNext()) {
-            try {
-                parser.next();
-                return parser.getValue();
-            } catch (IllegalStateException ise) {
-                throw new JsonParsingException(ise.getMessage(), ise, parser.getLastCharLocation());
-            }
-        }
-        throw new JsonException(JsonMessages.INTERNAL_ERROR());
-    }
-
-    @Override
-    public void close() {
-        readDone = true;
-        parser.close();
-    }
-}
Index: trunk/src/org/glassfish/json/JsonStringImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonStringImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,132 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import javax.json.JsonString;
-
-/**
- * JsonString impl
- *
- * @author Jitendra Kotamraju
- */
-final class JsonStringImpl implements JsonString {
-
-    private final String value;
-
-    JsonStringImpl(String value) {
-        this.value = value;
-    }
-
-    @Override
-    public String getString() {
-        return value;
-    }
-
-    @Override
-    public CharSequence getChars() {
-        return value;
-    }
-
-    @Override
-    public ValueType getValueType() {
-        return ValueType.STRING;
-    }
-
-    @Override
-    public int hashCode() {
-        return getString().hashCode();
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj){
-            return true;
-        }
-        if (!(obj instanceof JsonString)) {
-            return false;
-        }
-        JsonString other = (JsonString)obj;
-        return getString().equals(other.getString());
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append('"');
-
-        for(int i = 0; i < value.length(); i++) {
-            char c = value.charAt(i);
-            // unescaped = %x20-21 | %x23-5B | %x5D-10FFFF
-            if (c >= 0x20 && c <= 0x10ffff && c != 0x22 && c != 0x5c) {
-                sb.append(c);
-            } else {
-                switch (c) {
-                    case '"':
-                    case '\\':
-                        sb.append('\\'); sb.append(c);
-                        break;
-                    case '\b':
-                        sb.append('\\'); sb.append('b');
-                        break;
-                    case '\f':
-                        sb.append('\\'); sb.append('f');
-                        break;
-                    case '\n':
-                        sb.append('\\'); sb.append('n');
-                        break;
-                    case '\r':
-                        sb.append('\\'); sb.append('r');
-                        break;
-                    case '\t':
-                        sb.append('\\'); sb.append('t');
-                        break;
-                    default:
-                        String hex = "000" + Integer.toHexString(c);
-                        sb.append("\\u").append(hex.substring(hex.length() - 4));
-                }
-            }
-        }
-
-        sb.append('"');
-        return sb.toString();
-    }
-}
-
Index: trunk/src/org/glassfish/json/JsonStructureParser.java
===================================================================
--- trunk/src/org/glassfish/json/JsonStructureParser.java	(revision 16017)
+++ 	(revision )
@@ -1,335 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import javax.json.*;
-import javax.json.stream.JsonLocation;
-import javax.json.stream.JsonParser;
-import java.math.BigDecimal;
-import java.util.ArrayDeque;
-import java.util.Deque;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.NoSuchElementException;
-
-/**
- * {@link JsonParser} implementation on top of JsonArray/JsonObject
- *
- * @author Jitendra Kotamraju
- */
-class JsonStructureParser implements JsonParser {
-
-    private Scope current;
-    private Event state;
-    private final Deque<Scope> scopeStack = new ArrayDeque<>();
-
-    JsonStructureParser(JsonArray array) {
-        current = new ArrayScope(array);
-    }
-
-    JsonStructureParser(JsonObject object) {
-        current = new ObjectScope(object);
-    }
-
-    @Override
-    public String getString() {
-        switch (state) {
-            case KEY_NAME:
-                return ((ObjectScope)current).key;
-            case VALUE_STRING:
-                return ((JsonString)current.getJsonValue()).getString();
-            case VALUE_NUMBER:
-                return ((JsonNumber)current.getJsonValue()).toString();
-            default:
-                throw new IllegalStateException(JsonMessages.PARSER_GETSTRING_ERR(state));
-        }
-    }
-
-    @Override
-    public boolean isIntegralNumber() {
-        if (state == Event.VALUE_NUMBER) {
-            return ((JsonNumber)current.getJsonValue()).isIntegral();
-        }
-        throw new IllegalStateException(JsonMessages.PARSER_ISINTEGRALNUMBER_ERR(state));
-    }
-
-    @Override
-    public int getInt() {
-        if (state == Event.VALUE_NUMBER) {
-            return ((JsonNumber)current.getJsonValue()).intValue();
-        }
-        throw new IllegalStateException(JsonMessages.PARSER_GETINT_ERR(state));
-    }
-
-    @Override
-    public long getLong() {
-        if (state == Event.VALUE_NUMBER) {
-            return ((JsonNumber)current.getJsonValue()).longValue();
-        }
-        throw new IllegalStateException(JsonMessages.PARSER_GETLONG_ERR(state));
-    }
-
-    @Override
-    public BigDecimal getBigDecimal() {
-        if (state == Event.VALUE_NUMBER) {
-            return ((JsonNumber)current.getJsonValue()).bigDecimalValue();
-        }
-        throw new IllegalStateException(JsonMessages.PARSER_GETBIGDECIMAL_ERR(state));
-    }
-
-    @Override
-    public JsonLocation getLocation() {
-        return JsonLocationImpl.UNKNOWN;
-    }
-
-    @Override
-    public boolean hasNext() {
-        return !((state == Event.END_OBJECT || state == Event.END_ARRAY) && scopeStack.isEmpty());
-    }
-
-    @Override
-    public Event next() {
-        if (!hasNext()) {
-            throw new NoSuchElementException();
-        }
-        transition();
-        return state;
-    }
-
-    private void transition() {
-        if (state == null) {
-            state = current instanceof ArrayScope ? Event.START_ARRAY : Event.START_OBJECT;
-        } else {
-            if (state == Event.END_OBJECT || state == Event.END_ARRAY) {
-                current = scopeStack.pop();
-            }
-            if (current instanceof ArrayScope) {
-                if (current.hasNext()) {
-                    current.next();
-                    state = getState(current.getJsonValue());
-                    if (state == Event.START_ARRAY || state == Event.START_OBJECT) {
-                        scopeStack.push(current);
-                        current = Scope.createScope(current.getJsonValue());
-                    }
-                } else {
-                    state = Event.END_ARRAY;
-                }
-            } else {
-                // ObjectScope
-                if (state == Event.KEY_NAME) {
-                    state = getState(current.getJsonValue());
-                    if (state == Event.START_ARRAY || state == Event.START_OBJECT) {
-                        scopeStack.push(current);
-                        current = Scope.createScope(current.getJsonValue());
-                    }
-                } else {
-                    if (current.hasNext()) {
-                        current.next();
-                        state = Event.KEY_NAME;
-                    } else {
-                        state = Event.END_OBJECT;
-                    }
-                }
-            }
-        }
-    }
-
-    @Override
-    public void close() {
-        // no-op
-    }
-
-    @Override
-    public void skipObject() {
-        if (current instanceof ObjectScope) {
-            int depth = 1;
-            do {
-                if (state == Event.KEY_NAME) {
-                    state = getState(current.getJsonValue());
-                    switch (state) {
-                        case START_OBJECT:
-                            depth++;
-                            break;
-                        case END_OBJECT:
-                            depth--;
-                            break;
-                        default:
-                            //no-op
-                    }
-                } else {
-                    if (current.hasNext()) {
-                        current.next();
-                        state = Event.KEY_NAME;
-                    } else {
-                        state = Event.END_OBJECT;
-                        depth--;
-                    }
-                }
-            } while (state != Event.END_OBJECT && depth > 0);
-        }
-    }
-
-    @Override
-    public void skipArray() {
-        if (current instanceof ArrayScope) {
-            int depth = 1;
-            do {
-                if (current.hasNext()) {
-                    current.next();
-                    state = getState(current.getJsonValue());
-                    switch (state) {
-                        case START_ARRAY:
-                            depth++;
-                            break;
-                        case END_ARRAY:
-                            depth--;
-                            break;
-                        default:
-                            //no-op
-                    }
-                } else {
-                    state = Event.END_ARRAY;
-                    depth--;
-                }
-            } while (!(state == Event.END_ARRAY && depth == 0));
-        }
-    }
-
-    private static Event getState(JsonValue value) {
-        switch (value.getValueType()) {
-            case ARRAY:
-                return Event.START_ARRAY;
-            case OBJECT:
-                return Event.START_OBJECT;
-            case STRING:
-                return Event.VALUE_STRING;
-            case NUMBER:
-                return Event.VALUE_NUMBER;
-            case TRUE:
-                return Event.VALUE_TRUE;
-            case FALSE:
-                return Event.VALUE_FALSE;
-            case NULL:
-                return Event.VALUE_NULL;
-            default:
-                throw new JsonException(JsonMessages.PARSER_STATE_ERR(value.getValueType()));
-        }
-    }
-
-    private static abstract class Scope implements Iterator {
-        abstract JsonValue getJsonValue();
-
-        static Scope createScope(JsonValue value) {
-            if (value instanceof JsonArray) {
-                return new ArrayScope((JsonArray)value);
-            } else if (value instanceof JsonObject) {
-                return new ObjectScope((JsonObject)value);
-            }
-            throw new JsonException(JsonMessages.PARSER_SCOPE_ERR(value));
-        }
-    }
-
-    private static class ArrayScope extends Scope {
-        private final Iterator<JsonValue> it;
-        private JsonValue value;
-
-        ArrayScope(JsonArray array) {
-            this.it = array.iterator();
-        }
-
-        @Override
-        public boolean hasNext() {
-            return it.hasNext();
-        }
-
-        @Override
-        public JsonValue next() {
-            value = it.next();
-            return value;
-        }
-
-        @Override
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        JsonValue getJsonValue() {
-            return value;
-        }
-
-    }
-
-    private static class ObjectScope extends Scope {
-        private final Iterator<Map.Entry<String, JsonValue>> it;
-        private JsonValue value;
-        private String key;
-
-        ObjectScope(JsonObject object) {
-            this.it = object.entrySet().iterator();
-        }
-
-        @Override
-        public boolean hasNext() {
-            return it.hasNext();
-        }
-
-        @Override
-        public Map.Entry<String, JsonValue> next() {
-            Map.Entry<String, JsonValue> next = it.next();
-            this.key = next.getKey();
-            this.value = next.getValue();
-            return next;
-        }
-
-        @Override
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        JsonValue getJsonValue() {
-            return value;
-        }
-
-    }
-
-}
Index: trunk/src/org/glassfish/json/JsonTokenizer.java
===================================================================
--- trunk/src/org/glassfish/json/JsonTokenizer.java	(revision 16017)
+++ 	(revision )
@@ -1,610 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.JsonException;
-import javax.json.stream.JsonLocation;
-import javax.json.stream.JsonParser;
-import javax.json.stream.JsonParsingException;
-import java.io.*;
-import java.math.BigDecimal;
-import java.util.Arrays;
-
-import javax.json.stream.JsonParser.Event;
-
-/**
- * JSON Tokenizer
- *
- * @author Jitendra Kotamraju
- */
-final class JsonTokenizer implements Closeable {
-    // Table to look up hex ch -> value (for e.g HEX['F'] = 15, HEX['5'] = 5)
-    private final static int[] HEX = new int[128];
-    static {
-        Arrays.fill(HEX, -1);
-        for (int i='0'; i <= '9'; i++) {
-            HEX[i] = i-'0';
-        }
-        for (int i='A'; i <= 'F'; i++) {
-            HEX[i] = 10+i-'A';
-        }
-        for (int i='a'; i <= 'f'; i++) {
-            HEX[i] = 10+i-'a';
-        }
-    }
-    private final static int HEX_LENGTH = HEX.length;
-
-    private final BufferPool bufferPool;
-
-    private final Reader reader;
-
-    // Internal buffer that is used for parsing. It is also used
-    // for storing current string and number value token
-    private char[] buf;
-
-    // Indexes in buffer
-    //
-    // XXXssssssssssssXXXXXXXXXXXXXXXXXXXXXXrrrrrrrrrrrrrrXXXXXX
-    //    ^           ^                     ^             ^
-    //    |           |                     |             |
-    //   storeBegin  storeEnd            readBegin      readEnd
-    private int readBegin;
-    private int readEnd;
-    private int storeBegin;
-    private int storeEnd;
-
-    // line number of the current pointer of parsing char
-    private long lineNo = 1;
-
-    // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-    // ^
-    // |
-    // bufferOffset
-    //
-    // offset of the last \r\n or \n. will be used to calculate column number
-    // of a token or an error. This may be outside of the buffer.
-    private long lastLineOffset = 0;
-    // offset in the stream for the start of the buffer, will be used in
-    // calculating JsonLocation's stream offset, column no.
-    private long bufferOffset = 0;
-
-    private boolean minus;
-    private boolean fracOrExp;
-    private BigDecimal bd;
-
-    enum JsonToken {
-        CURLYOPEN(Event.START_OBJECT, false),
-        SQUAREOPEN(Event.START_ARRAY, false),
-        COLON(null, false),
-        COMMA(null, false),
-        STRING(Event.VALUE_STRING, true),
-        NUMBER(Event.VALUE_NUMBER, true),
-        TRUE(Event.VALUE_TRUE, true),
-        FALSE(Event.VALUE_FALSE, true),
-        NULL(Event.VALUE_NULL, true),
-        CURLYCLOSE(Event.END_OBJECT, false),
-        SQUARECLOSE(Event.END_ARRAY, false),
-        EOF(null, false);
-
-        private final JsonParser.Event event;
-        private final boolean value;
-
-        JsonToken(JsonParser.Event event, boolean value) {
-            this.event = event;
-            this.value = value;
-        }
-
-        JsonParser.Event getEvent() {
-            return event;
-        }
-
-        boolean isValue() {
-            return value;
-        }
-    }
-
-    JsonTokenizer(Reader reader, BufferPool bufferPool) {
-        this.reader = reader;
-        this.bufferPool = bufferPool;
-        buf = bufferPool.take();
-    }
-
-    private void readString() {
-        // when inPlace is true, no need to copy chars
-        boolean inPlace = true;
-        storeBegin = storeEnd = readBegin;
-
-        do {
-            // Write unescaped char block within the current buffer
-            if (inPlace) {
-                int ch;
-                while(readBegin < readEnd && ((ch=buf[readBegin]) >= 0x20) && ch != '\\') {
-                    if (ch == '"') {
-                        storeEnd = readBegin++; // ++ to consume quote char
-                        return;                 // Got the entire string
-                    }
-                    readBegin++;                // consume unescaped char
-                }
-                storeEnd = readBegin;
-            }
-
-            // string may be crossing buffer boundaries and may contain
-            // escaped characters.
-            int ch = read();
-            if (ch >= 0x20 && ch != 0x22 && ch != 0x5c) {
-                if (!inPlace) {
-                    buf[storeEnd] = (char)ch;
-                }
-                storeEnd++;
-                continue;
-            }
-            switch (ch) {
-                case '\\':
-                    inPlace = false;        // Now onwards need to copy chars
-                    unescape();
-                    break;
-                case '"':
-                    return;
-                default:
-                    throw unexpectedChar(ch);
-            }
-        } while (true);
-    }
-
-    private void unescape() {
-        int ch = read();
-        switch (ch) {
-            case 'b':
-                buf[storeEnd++] = '\b';
-                break;
-            case 't':
-                buf[storeEnd++] = '\t';
-                break;
-            case 'n':
-                buf[storeEnd++] = '\n';
-                break;
-            case 'f':
-                buf[storeEnd++] = '\f';
-                break;
-            case 'r':
-                buf[storeEnd++] = '\r';
-                break;
-            case '"':
-            case '\\':
-            case '/':
-                buf[storeEnd++] = (char)ch;
-                break;
-            case 'u': {
-                int unicode = 0;
-                for (int i = 0; i < 4; i++) {
-                    int ch3 = read();
-                    int digit = (ch3 >= 0 && ch3 < HEX_LENGTH) ? HEX[ch3] : -1;
-                    if (digit < 0) {
-                        throw unexpectedChar(ch3);
-                    }
-                    unicode = (unicode << 4)|digit;
-                }
-                buf[storeEnd++] = (char)unicode;
-                break;
-            }
-            default:
-                throw unexpectedChar(ch);
-        }
-    }
-
-    // Reads a number char. If the char is within the buffer, directly
-    // reads from the buffer. Otherwise, uses read() which takes care
-    // of resizing, filling up the buf, adjusting the pointers
-    private int readNumberChar() {
-        if (readBegin < readEnd) {
-            return buf[readBegin++];
-        } else {
-            storeEnd = readBegin;
-            return read();
-        }
-    }
-
-    private void readNumber(int ch)  {
-        storeBegin = storeEnd = readBegin-1;
-        // sign
-        if (ch == '-') {
-            this.minus = true;
-            ch = readNumberChar();
-            if (ch < '0' || ch >'9') {
-                throw unexpectedChar(ch);
-            }
-        }
-
-        // int
-        if (ch == '0') {
-            ch = readNumberChar();
-        } else {
-            do {
-                ch = readNumberChar();
-            } while (ch >= '0' && ch <= '9');
-        }
-
-        // frac
-        if (ch == '.') {
-            this.fracOrExp = true;
-            int count = 0;
-            do {
-                ch = readNumberChar();
-                count++;
-            } while (ch >= '0' && ch <= '9');
-            if (count == 1) {
-                throw unexpectedChar(ch);
-            }
-        }
-
-        // exp
-        if (ch == 'e' || ch == 'E') {
-            this.fracOrExp = true;
-            ch = readNumberChar();
-            if (ch == '+' || ch == '-') {
-                ch = readNumberChar();
-            }
-            int count;
-            for (count = 0; ch >= '0' && ch <= '9'; count++) {
-                ch = readNumberChar();
-            }
-            if (count == 0) {
-                throw unexpectedChar(ch);
-            }
-        }
-        if (ch != -1) {
-            // Only reset readBegin if eof has not been reached
-            readBegin--;
-            storeEnd = readBegin;
-        }
-    }
-
-    private void readTrue() {
-        int ch1 = read();
-        if (ch1 != 'r') {
-            throw expectedChar(ch1, 'r');
-        }
-        int ch2 = read();
-        if (ch2 != 'u') {
-            throw expectedChar(ch2, 'u');
-        }
-        int ch3 = read();
-        if (ch3 != 'e') {
-            throw expectedChar(ch3, 'e');
-        }
-    }
-
-    private void readFalse() {
-        int ch1 = read();
-        if (ch1 != 'a') {
-            throw expectedChar(ch1, 'a');
-        }
-        int ch2 = read();
-        if (ch2 != 'l') {
-            throw expectedChar(ch2, 'l');
-        }
-        int ch3 = read();
-        if (ch3 != 's') {
-            throw expectedChar(ch3, 's');
-        }
-        int ch4 = read();
-        if (ch4 != 'e') {
-            throw expectedChar(ch4, 'e');
-        }
-    }
-
-    private void readNull() {
-        int ch1 = read();
-        if (ch1 != 'u') {
-            throw expectedChar(ch1, 'u');
-        }
-        int ch2 = read();
-        if (ch2 != 'l') {
-            throw expectedChar(ch2, 'l');
-        }
-        int ch3 = read();
-        if (ch3 != 'l') {
-            throw expectedChar(ch3, 'l');
-        }
-    }
-
-    /*
-     * Could be optimized if the parser uses separate methods to match colon
-     * etc (that would avoid the switch statement cost in certain cases)
-     */
-    JsonToken nextToken() {
-        reset();
-        int ch = read();
-
-        // whitespace
-        while (ch == 0x20 || ch == 0x09 || ch == 0x0a || ch == 0x0d) {
-            if (ch == '\r') {
-                ++lineNo;
-                ch = read();
-                if (ch == '\n') {
-                    lastLineOffset = bufferOffset+readBegin;
-                } else {
-                    lastLineOffset = bufferOffset+readBegin-1;
-                    continue;
-                }
-            } else if (ch == '\n') {
-                ++lineNo;
-                lastLineOffset = bufferOffset+readBegin;
-            }
-            ch = read();
-        }
-
-        switch (ch) {
-            case '"':
-                readString();
-                return JsonToken.STRING;
-            case '{':
-                return JsonToken.CURLYOPEN;
-            case '[':
-                return JsonToken.SQUAREOPEN;
-            case ':':
-                return JsonToken.COLON;
-            case ',':
-                return JsonToken.COMMA;
-            case 't':
-                readTrue();
-                return JsonToken.TRUE;
-            case 'f':
-                readFalse();
-                return JsonToken.FALSE;
-            case 'n':
-                readNull();
-                return JsonToken.NULL;
-            case ']':
-                return JsonToken.SQUARECLOSE;
-            case '}':
-                return JsonToken.CURLYCLOSE;
-            case '0':
-            case '1':
-            case '2':
-            case '3':
-            case '4':
-            case '5':
-            case '6':
-            case '7':
-            case '8':
-            case '9':
-            case '-':
-                readNumber(ch);
-                return JsonToken.NUMBER;
-            case -1:
-                return JsonToken.EOF;
-            default:
-                throw unexpectedChar(ch);
-        }
-    }
-
-    boolean hasNextToken() {
-        reset();
-        int ch = peek();
-
-        // whitespace
-        while (ch == 0x20 || ch == 0x09 || ch == 0x0a || ch == 0x0d) {
-            if (ch == '\r') {
-                ++lineNo;
-                ++readBegin;
-                ch = peek();
-                if (ch == '\n') {
-                    lastLineOffset = bufferOffset+readBegin+1;
-                } else {
-                    lastLineOffset = bufferOffset+readBegin;
-                    continue;
-                }
-            } else if (ch == '\n') {
-                ++lineNo;
-                lastLineOffset = bufferOffset+readBegin+1;
-            }
-            ++readBegin;
-            ch = peek();
-        }
-        return ch != -1;
-    }
-
-    private int peek() {
-        try {
-            if (readBegin == readEnd) {     // need to fill the buffer
-                int len = fillBuf();
-                if (len == -1) {
-                    return -1;
-                }
-                assert len != 0;
-                readBegin = storeEnd;
-                readEnd = readBegin+len;
-            }
-            return buf[readBegin];
-        } catch (IOException ioe) {
-            throw new JsonException(JsonMessages.TOKENIZER_IO_ERR(), ioe);
-        }
-    }
-
-    // Gives the location of the last char. Used for
-    // JsonParsingException.getLocation
-    JsonLocation getLastCharLocation() {
-        // Already read the char, so subtracting -1
-        return new JsonLocationImpl(lineNo, bufferOffset +readBegin-lastLineOffset, bufferOffset +readBegin-1);
-    }
-
-    // Gives the parser location. Used for JsonParser.getLocation
-    JsonLocation getLocation() {
-        return new JsonLocationImpl(lineNo, bufferOffset +readBegin-lastLineOffset+1, bufferOffset +readBegin);
-    }
-
-    private int read() {
-        try {
-            if (readBegin == readEnd) {     // need to fill the buffer
-                int len = fillBuf();
-                if (len == -1) {
-                    return -1;
-                }
-                assert len != 0;
-                readBegin = storeEnd;
-                readEnd = readBegin+len;
-            }
-            return buf[readBegin++];
-        } catch (IOException ioe) {
-            throw new JsonException(JsonMessages.TOKENIZER_IO_ERR(), ioe);
-        }
-    }
-
-    private int fillBuf() throws IOException {
-        if (storeEnd != 0) {
-            int storeLen = storeEnd-storeBegin;
-            if (storeLen > 0) {
-                // there is some store data
-                if (storeLen == buf.length) {
-                    // buffer is full, double the capacity
-                    char[] doubleBuf = Arrays.copyOf(buf, 2 * buf.length);
-                    bufferPool.recycle(buf);
-                    buf = doubleBuf;
-                } else {
-                    // Left shift all the stored data to make space
-                    System.arraycopy(buf, storeBegin, buf, 0, storeLen);
-                    storeEnd = storeLen;
-                    storeBegin = 0;
-                    bufferOffset += readBegin-storeEnd;
-                }
-            } else {
-                storeBegin = storeEnd = 0;
-                bufferOffset += readBegin;
-            }
-        } else {
-            bufferOffset += readBegin;
-        }
-        // Fill the rest of the buf
-        return reader.read(buf, storeEnd, buf.length-storeEnd);
-    }
-
-    // state associated with the current token is no more valid
-    private void reset() {
-        if (storeEnd != 0) {
-            storeBegin = 0;
-            storeEnd = 0;
-            bd = null;
-            minus = false;
-            fracOrExp = false;
-        }
-    }
-
-    String getValue() {
-        return new String(buf, storeBegin, storeEnd-storeBegin);
-    }
-
-    BigDecimal getBigDecimal() {
-        if (bd == null) {
-            bd = new BigDecimal(buf, storeBegin, storeEnd-storeBegin);
-        }
-        return bd;
-    }
-
-    int getInt() {
-        // no need to create BigDecimal for common integer values (1-9 digits)
-        int storeLen = storeEnd-storeBegin;
-        if (!fracOrExp && (storeLen <= 9 || (minus && storeLen <= 10))) {
-            int num = 0;
-            int i = minus ? 1 : 0;
-            for(; i < storeLen; i++) {
-                num = num * 10 + (buf[storeBegin+i] - '0');
-            }
-            return minus ? -num : num;
-        } else {
-            return getBigDecimal().intValue();
-        }
-    }
-    
-    long getLong() {
-        // no need to create BigDecimal for common integer values (1-18 digits)
-        int storeLen = storeEnd-storeBegin;
-        if (!fracOrExp && (storeLen <= 18 || (minus && storeLen <= 19))) {
-            long num = 0;
-            int i = minus ? 1 : 0;
-            for(; i < storeLen; i++) {
-                num = num * 10 + (buf[storeBegin+i] - '0');
-            }
-            return minus ? -num : num;
-        } else {
-            return getBigDecimal().longValue();
-        }
-    }
-
-    // returns true for common integer values (1-9 digits).
-    // So there are cases it will return false even though the number is int
-    boolean isDefinitelyInt() {
-        int storeLen = storeEnd-storeBegin;
-        return !fracOrExp && (storeLen <= 9 || (minus && storeLen <= 10));
-    }
-    
-    // returns true for common long values (1-18 digits).
-    // So there are cases it will return false even though the number is long
-    boolean isDefinitelyLong() {
-    	int storeLen = storeEnd-storeBegin;
-    	return !fracOrExp && (storeLen <= 18 || (minus && storeLen <= 19));
-    }
-
-    boolean isIntegral() {
-        return !fracOrExp || getBigDecimal().scale() == 0;
-    }
-
-    @Override
-    public void close() throws IOException {
-        reader.close();
-        bufferPool.recycle(buf);
-    }
-
-    private JsonParsingException unexpectedChar(int ch) {
-        JsonLocation location = getLastCharLocation();
-        return new JsonParsingException(
-            JsonMessages.TOKENIZER_UNEXPECTED_CHAR(ch, location), location);
-    }
-
-    private JsonParsingException expectedChar(int unexpected, char expected) {
-        JsonLocation location = getLastCharLocation();
-        return new JsonParsingException(
-                JsonMessages.TOKENIZER_EXPECTED_CHAR(unexpected, location, expected), location);
-    }
-    
-}
Index: trunk/src/org/glassfish/json/JsonUtil.java
===================================================================
--- trunk/src/org/glassfish/json/JsonUtil.java	(revision 16017)
+++ 	(revision )
@@ -1,99 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import java.io.StringReader;
-import javax.json.Json;
-import javax.json.JsonReader;
-import javax.json.JsonValue;
-import javax.json.stream.JsonParsingException;
-
-/**
- * A utility class
- * 
- * @since 1.1
- */
-public final class JsonUtil {
-
-    private JsonUtil() {
-    }
-
-    /**
-     * Reads the input JSON text and returns a JsonValue.
-     * <p>For convenience, single quotes as well as double quotes
-     * are allowed to delimit JSON strings. If single quotes are
-     * used, any quotes, single or double, in the JSON string must be
-     * escaped (prepend with a '\').
-     *
-     * @param jsonString the input JSON data
-     * @return the object model for {@code jsonString}
-     * @throws JsonParsingException if the input is not legal JSON text
-     */
-    public static JsonValue toJson(String jsonString) {
-        StringBuilder builder = new StringBuilder();
-        boolean single_context = false;
-        for (int i = 0; i < jsonString.length(); i++) {
-            char ch = jsonString.charAt(i);
-            if (ch == '\\') {
-                i = i + 1;
-                if (i < jsonString.length()) {
-                    ch = jsonString.charAt(i);
-                    if (!(single_context && ch == '\'')) {
-                        // unescape ' inside single quotes
-                        builder.append('\\');
-                    }
-                }
-            } else if (ch == '\'') {
-                // Turn ' into ", for proper JSON string
-                ch = '"';
-                single_context = ! single_context;
-            }
-            builder.append(ch);
-        }
-                   
-        JsonReader reader = Json.createReader(
-                                new StringReader(builder.toString()));
-        JsonValue value = reader.readValue();
-        reader.close();
-        return value;
-    }
-}
-
Index: trunk/src/org/glassfish/json/JsonWriterFactoryImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonWriterFactoryImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,86 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.JsonWriter;
-import javax.json.JsonWriterFactory;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.util.Map;
-
-/**
- * @author Jitendra Kotamraju
- */
-class JsonWriterFactoryImpl implements JsonWriterFactory {
-    private final Map<String, ?> config;        // unmodifiable map
-    private final boolean prettyPrinting;
-    private final BufferPool bufferPool;
-
-    JsonWriterFactoryImpl(Map<String, ?> config, boolean prettyPrinting,
-            BufferPool bufferPool) {
-        this.config = config;
-        this.prettyPrinting = prettyPrinting;
-        this.bufferPool = bufferPool;
-    }
-
-    @Override
-    public JsonWriter createWriter(Writer writer) {
-        return new JsonWriterImpl(writer, prettyPrinting, bufferPool);
-    }
-
-    @Override
-    public JsonWriter createWriter(OutputStream out) {
-        return new JsonWriterImpl(out, prettyPrinting, bufferPool);
-    }
-
-    @Override
-    public JsonWriter createWriter(OutputStream out, Charset charset) {
-        return new JsonWriterImpl(out, charset, prettyPrinting, bufferPool);
-    }
-
-    @Override
-    public Map<String, ?> getConfigInUse() {
-        return config;
-    }
-}
Index: trunk/src/org/glassfish/json/JsonWriterImpl.java
===================================================================
--- trunk/src/org/glassfish/json/JsonWriterImpl.java	(revision 16017)
+++ 	(revision )
@@ -1,191 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.*;
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.Map;
-
-/**
- * JsonWriter impl using generator.
- *
- * @author Jitendra Kotamraju
- */
-class JsonWriterImpl implements JsonWriter {
-
-    private final JsonGeneratorImpl generator;
-    private boolean writeDone;
-    private final NoFlushOutputStream os;
-
-    JsonWriterImpl(Writer writer, BufferPool bufferPool) {
-        this(writer, false, bufferPool);
-    }
-
-    JsonWriterImpl(Writer writer, boolean prettyPrinting, BufferPool bufferPool) {
-        generator = prettyPrinting
-                ? new JsonPrettyGeneratorImpl(writer, bufferPool)
-                : new JsonGeneratorImpl(writer, bufferPool);
-        os = null;
-    }
-
-    JsonWriterImpl(OutputStream out, BufferPool bufferPool) {
-        this(out, StandardCharsets.UTF_8, false, bufferPool);
-    }
-
-    JsonWriterImpl(OutputStream out, boolean prettyPrinting, BufferPool bufferPool) {
-        this(out, StandardCharsets.UTF_8, prettyPrinting, bufferPool);
-    }
-
-    JsonWriterImpl(OutputStream out, Charset charset,
-                   boolean prettyPrinting, BufferPool bufferPool) {
-        // Decorating the given stream, so that buffered contents can be
-        // written without actually flushing the stream.
-        this.os = new NoFlushOutputStream(out);
-        generator = prettyPrinting
-                ? new JsonPrettyGeneratorImpl(os, charset, bufferPool)
-                : new JsonGeneratorImpl(os, charset, bufferPool);
-    }
-
-    @Override
-    public void writeArray(JsonArray array) {
-        if (writeDone) {
-            throw new IllegalStateException(JsonMessages.WRITER_WRITE_ALREADY_CALLED());
-        }
-        writeDone = true;
-        generator.writeStartArray();
-        for(JsonValue value : array) {
-            generator.write(value);
-        }
-        generator.writeEnd();
-        // Flush the generator's buffered contents. This won't work for byte
-        // streams as intermediary OutputStreamWriter buffers.
-        generator.flushBuffer();
-        // Flush buffered contents but not the byte stream. generator.flush()
-        // does OutputStreamWriter#flushBuffer (package private) and underlying
-        // byte stream#flush(). Here underlying stream's flush() is no-op.
-        if (os != null) {
-            generator.flush();
-        }
-    }
-
-    @Override
-    public void writeObject(JsonObject object) {
-        if (writeDone) {
-            throw new IllegalStateException(JsonMessages.WRITER_WRITE_ALREADY_CALLED());
-        }
-        writeDone = true;
-        generator.writeStartObject();
-        for(Map.Entry<String, JsonValue> e : object.entrySet()) {
-            generator.write(e.getKey(), e.getValue());
-        }
-        generator.writeEnd();
-        // Flush the generator's buffered contents. This won't work for byte
-        // streams as intermediary OutputStreamWriter buffers.
-        generator.flushBuffer();
-        // Flush buffered contents but not the byte stream. generator.flush()
-        // does OutputStreamWriter#flushBuffer (package private) and underlying
-        // byte stream#flush(). Here underlying stream's flush() is no-op.
-        if (os != null) {
-            generator.flush();
-        }
-    }
-
-    @Override
-    public void write(JsonStructure value) {
-        if (value instanceof JsonArray) {
-            writeArray((JsonArray)value);
-        } else {
-            writeObject((JsonObject)value);
-        }
-    }
-
-    @Override
-    public void write(JsonValue value) {
-        switch (value.getValueType()) {
-            case OBJECT:
-                writeObject((JsonObject) value);
-                return;
-            case ARRAY:
-                writeArray((JsonArray) value);
-                return;
-            default:
-                if (writeDone) {
-                    throw new IllegalStateException(JsonMessages.WRITER_WRITE_ALREADY_CALLED());
-                }
-                writeDone = true;
-                generator.write(value);
-                generator.flushBuffer();
-                if (os != null) {
-                    generator.flush();
-                }
-        }
-    }
-
-    @Override
-    public void close() {
-        writeDone = true;
-        generator.close();
-    }
-
-    private static final class NoFlushOutputStream extends FilterOutputStream {
-        public NoFlushOutputStream(OutputStream out) {
-            super(out);
-        }
-
-        @Override
-        public void write(byte b[], int off, int len) throws IOException {
-            out.write(b, off ,len);
-        }
-
-        @Override
-        public void flush() {
-            // no-op
-        }
-    }
-
-}
Index: trunk/src/org/glassfish/json/MapUtil.java
===================================================================
--- trunk/src/org/glassfish/json/MapUtil.java	(revision 16017)
+++ 	(revision )
@@ -1,115 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import org.glassfish.json.api.BufferPool;
-
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonValue;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Collection;
-import java.util.Map;
-
-/**
- * Util for transforming a Map to a Json objects.
- *
- * @author asotobu
- */
-public final class MapUtil {
-
-    private MapUtil() {
-        super();
-    }
-
-    static JsonValue handle(Object value, BufferPool bufferPool) {
-
-        if (value == null) {
-            return JsonValue.NULL;
-        }
-
-        if (value instanceof BigDecimal) {
-            return JsonNumberImpl.getJsonNumber((BigDecimal) value);
-        } else {
-            if (value instanceof BigInteger) {
-                return JsonNumberImpl.getJsonNumber((BigInteger) value);
-            } else {
-                if ( value instanceof Boolean) {
-                    Boolean b = (Boolean) value;
-                    return b ? JsonValue.TRUE : JsonValue.FALSE;
-                } else {
-                    if (value instanceof Double) {
-                        return JsonNumberImpl.getJsonNumber((Double) value);
-                    } else {
-                        if (value instanceof Integer) {
-                            return JsonNumberImpl.getJsonNumber((Integer) value);
-                        } else {
-                            if (value instanceof Long) {
-                                return JsonNumberImpl.getJsonNumber((Long) value);
-                            } else {
-                                if (value instanceof String) {
-                                    return new JsonStringImpl((String) value);
-                                } else {
-                                    if (value instanceof Collection) {
-                                        @SuppressWarnings("unchecked")
-                                        Collection<?> collection = (Collection<?>) value;
-                                        JsonArrayBuilder jsonArrayBuilder = new JsonArrayBuilderImpl(collection, bufferPool);
-                                        return jsonArrayBuilder.build();
-                                    } else {
-                                        if (value instanceof Map) {
-                                            @SuppressWarnings("unchecked")
-                                            JsonObjectBuilder object = new JsonObjectBuilderImpl((Map<String, Object>) value, bufferPool);
-                                            return object.build();
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        throw new IllegalArgumentException(String.format("Type %s is not supported.", value.getClass()));
-    }
-
-}
Index: trunk/src/org/glassfish/json/NodeReference.java
===================================================================
--- trunk/src/org/glassfish/json/NodeReference.java	(revision 16017)
+++ 	(revision )
@@ -1,307 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2015-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonStructure;
-import javax.json.JsonValue;
-
-/**
- * This class is a helper class for JsonPointer implementation,
- * and is not part of the API.
- *
- * This class encapsulates a reference to a JSON node.
- * There are three types of references.
- * <ol><li>a reference to the root of a JSON tree.</li>
- *     <li>a reference to a name/value (possibly non-existing) pair of a JSON object, identified by a name.</li>
- *     <li>a reference to a member value of a JSON array, identified by an index.</li>
- * </ol>
- * Static factory methods are provided for creating these references.
- *
- * <p>A referenced value can be retrieved or replaced.
- * The value of a JSON object or JSON array can be
- * removed.  A new value can be added to a JSON object or
- * inserted into a JSON array</p>
- *
- * <p>Since a {@code JsonObject} or {@code JsonArray} is immutable, these operations
- * must not modify the referenced JSON object or array. The methods {@link #add},
- * {@link #replace}, and {@link #remove} returns a new
- * JSON object or array after the execution of the operation.</p>
- */
-abstract class NodeReference {
-
-    /**
-     * Return {@code true} if a reference points to a valid value, {@code false} otherwise.
-     *
-     * @return {@code true} if a reference points to a value
-     */
-    abstract public boolean contains();
-
-    /**
-     * Get the value at the referenced location.
-     *
-     * @return the JSON value referenced
-     * @throws JsonException if the referenced value does not exist
-     */
-    abstract public JsonValue get();
-
-    /**
-     * Add or replace a value at the referenced location.
-     * If the reference is the root of a JSON tree, the added value must be
-     * a JSON object or array, which becomes the referenced JSON value.
-     * If the reference is an index of a JSON array, the value is inserted
-     * into the array at the index.  If the index is -1, the value is
-     * appended to the array.
-     * If the reference is a name of a JSON object, the name/value pair is added
-     * to the object, replacing any pair with the same name.
-     *
-     * @param value the value to be added
-     * @return the JsonStructure after the operation
-     * @throws JsonException if the index to the array is not -1 or is out of range
-     */
-    abstract public JsonStructure add(JsonValue value);
-
-    /**
-     * Remove the name/value pair from the JSON object, or the value in a JSON array, as specified by the reference
-     *
-     * @return the JsonStructure after the operation
-     * @throws JsonException if the name/value pair of the referenced JSON object
-     *    does not exist, or if the index of the referenced JSON array is
-     *    out of range, or if the reference is a root reference
-     */
-    abstract public JsonStructure remove();
-
-    /**
-     * Replace the referenced value with the specified value.
-     *
-     * @param value the JSON value to be stored at the referenced location
-     * @return the JsonStructure after the operation
-     * @throws JsonException if the name/value pair of the referenced JSON object
-     *    does not exist, or if the index of the referenced JSON array is
-     *    out of range, or if the reference is a root reference
-     */
-    abstract public JsonStructure replace(JsonValue value);
-
-    /**
-     * Returns a {@code NodeReference} for a {@code JsonStructure}.
-     *
-     * @param structure the {@code JsonStructure} referenced
-     * @return the {@code NodeReference}
-     */
-    public static NodeReference of(JsonStructure structure) {
-        return new RootReference(structure);
-    }
-
-    /**
-     * Returns a {@code NodeReference} for a name/value pair in a
-     * JSON object.
-     *
-     * @param object the referenced JSON object
-     * @param name the name of the name/pair
-     * @return the {@code NodeReference}
-     */
-    public static NodeReference of(JsonObject object, String name) {
-        return new ObjectReference(object, name);
-    }
-
-    /**
-     * Returns a {@code NodeReference} for a member value in a
-     * JSON array.
-     *
-     * @param array the referenced JSON array
-     * @param index the index of the member value in the JSON array
-     * @return the {@code NodeReference}
-     */
-    public static NodeReference of(JsonArray array, int index) {
-        return new ArrayReference(array, index);
-    }
-
-    static class RootReference extends NodeReference {
-
-        private JsonStructure root;
-
-        RootReference(JsonStructure root) {
-            this.root = root;
-        }
-
-        @Override
-        public boolean contains() {
-            return root != null;
-        }
-
-        @Override
-        public JsonValue get() {
-            return root;
-        }
-
-        @Override
-        public JsonStructure add(JsonValue value) {
-            switch (value.getValueType() ) {
-                case OBJECT:
-                case ARRAY:
-                    this.root = (JsonStructure) value;
-                    break;
-                default:
-                    throw new JsonException(JsonMessages.NODEREF_VALUE_ADD_ERR());
-            }
-            return root;
-        }
-
-        @Override
-        public JsonStructure remove() {
-            throw new JsonException(JsonMessages.NODEREF_VALUE_CANNOT_REMOVE());
-        }
-
-        @Override
-        public JsonStructure replace(JsonValue value) {
-            return add(value);
-        }
-    }
-
-    static class ObjectReference extends NodeReference {
-
-        private final JsonObject object;
-        private final String key;
-
-        ObjectReference(JsonObject object, String key) {
-            this.object = object;
-            this.key = key;
-        }
-
-        @Override
-        public boolean contains() {
-            return object != null && object.containsKey(key);
-        }
-
-        @Override
-        public JsonValue get() {
-            if (!contains()) {
-                throw new JsonException(JsonMessages.NODEREF_OBJECT_MISSING(key));
-            }
-            return object.get(key);
-        }
-
-        @Override
-        public JsonObject add(JsonValue value) {
-            return Json.createObjectBuilder(object).add(key, value).build();
-        }
-
-        @Override
-        public JsonObject remove() {
-            if (!contains()) {
-                throw new JsonException(JsonMessages.NODEREF_OBJECT_MISSING(key));
-            }
-            return Json.createObjectBuilder(object).remove(key).build();
-        }
-
-        @Override
-        public JsonObject replace(JsonValue value) {
-            if (!contains()) {
-                throw new JsonException(JsonMessages.NODEREF_OBJECT_MISSING(key));
-            }
-            return add(value);
-        }
-    }
-
-    static class ArrayReference extends NodeReference {
-
-        private final JsonArray array;
-        private final int index; // -1 means "-" in JSON Pointer
-
-        ArrayReference(JsonArray array, int index) {
-            this.array = array;
-            this.index = index;
-        }
-
-        @Override
-        public boolean contains() {
-            return array != null && index > -1 && index < array.size();
-        }
-
-        @Override
-        public JsonValue get() {
-            if (!contains()) {
-                throw new JsonException(JsonMessages.NODEREF_ARRAY_INDEX_ERR(index, array.size()));
-            }
-            return array.get(index);
-        }
-
-        @Override
-        public JsonArray add(JsonValue value) {
-            //TODO should we check for arrayoutofbounds?
-            // The spec seems to say index = array.size() is allowed. This is handled as append
-            JsonArrayBuilder builder = Json.createArrayBuilder(this.array);
-            if (index == -1 || index == array.size()) {
-                builder.add(value);
-            } else {
-                if(index < array.size()) {
-                    builder.add(index, value);
-                } else {
-                    throw new JsonException(JsonMessages.NODEREF_ARRAY_INDEX_ERR(index, array.size()));
-                }
-            }
-            return builder.build();
-        }
-
-        @Override
-        public JsonArray remove() {
-            if (!contains()) {
-                throw new JsonException(JsonMessages.NODEREF_ARRAY_INDEX_ERR(index, array.size()));
-            }
-            JsonArrayBuilder builder = Json.createArrayBuilder(this.array);
-            return builder.remove(index).build();
-        }
-
-        @Override
-        public JsonArray replace(JsonValue value) {
-            if (!contains()) {
-                throw new JsonException(JsonMessages.NODEREF_ARRAY_INDEX_ERR(index, array.size()));
-            }
-            JsonArrayBuilder builder = Json.createArrayBuilder(this.array);
-            return builder.set(index, value).build();
-        }
-    }
-}
-
Index: trunk/src/org/glassfish/json/UnicodeDetectingInputStream.java
===================================================================
--- trunk/src/org/glassfish/json/UnicodeDetectingInputStream.java	(revision 16017)
+++ 	(revision )
@@ -1,188 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json;
-
-import javax.json.JsonException;
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-
-/**
- * A filter stream that detects the unicode encoding for the original
- * stream
- *
- * @author Jitendra Kotamraju
- */
-class UnicodeDetectingInputStream extends FilterInputStream {
-
-    private static final Charset UTF_32LE = Charset.forName("UTF-32LE");
-    private static final Charset UTF_32BE = Charset.forName("UTF-32BE");
-
-    private static final byte FF = (byte)0xFF;
-    private static final byte FE = (byte)0xFE;
-    private static final byte EF = (byte)0xEF;
-    private static final byte BB = (byte)0xBB;
-    private static final byte BF = (byte)0xBF;
-    private static final byte NUL = (byte)0x00;
-
-    private final byte[] buf = new byte[4];
-    private int bufLen;
-    private int curIndex;
-    private final Charset charset;
-
-    UnicodeDetectingInputStream(InputStream is) {
-        super(is);
-        charset = detectEncoding();
-    }
-
-    Charset getCharset() {
-        return charset;
-    }
-
-    private void fillBuf() {
-        int b1;
-        int b2;
-        int b3;
-        int b4;
-
-        try {
-            b1 = in.read();
-            if (b1 == -1) {
-                return;
-            }
-
-            b2 = in.read();
-            if (b2 == -1) {
-                bufLen = 1;
-                buf[0] = (byte)b1;
-                return;
-            }
-
-            b3 = in.read();
-            if (b3 == -1) {
-                bufLen = 2;
-                buf[0] = (byte)b1;
-                buf[1] = (byte)b2;
-                return;
-            }
-
-            b4 = in.read();
-            if (b4 == -1) {
-                bufLen = 3;
-                buf[0] = (byte)b1;
-                buf[1] = (byte)b2;
-                buf[2] = (byte)b3;
-                return;
-            }
-            bufLen = 4;
-            buf[0] = (byte)b1;
-            buf[1] = (byte)b2;
-            buf[2] = (byte)b3;
-            buf[3] = (byte)b4;
-        } catch (IOException ioe) {
-            throw new JsonException(JsonMessages.PARSER_INPUT_ENC_DETECT_IOERR(), ioe);
-        }
-    }
-
-    private Charset detectEncoding() {
-        fillBuf();
-        if (bufLen < 2) {
-            throw new JsonException(JsonMessages.PARSER_INPUT_ENC_DETECT_FAILED());
-        } else if (bufLen == 4) {
-            // Use BOM to detect encoding
-            if (buf[0] == NUL && buf[1] == NUL && buf[2] == FE && buf[3] == FF) {
-                curIndex = 4;
-                return UTF_32BE;
-            } else if (buf[0] == FF && buf[1] == FE && buf[2] == NUL && buf[3] == NUL) {
-                curIndex = 4;
-                return UTF_32LE;
-            } else if (buf[0] == FE && buf[1] == FF) {
-                curIndex = 2;
-                return StandardCharsets.UTF_16BE;
-            } else if (buf[0] == FF && buf[1] == FE) {
-                curIndex = 2;
-                return StandardCharsets.UTF_16LE;
-            } else if (buf[0] == EF && buf[1] == BB && buf[2] == BF) {
-                curIndex = 3;
-                return StandardCharsets.UTF_8;
-            }
-            // No BOM, just use JSON RFC's encoding algo to auto-detect
-            if (buf[0] == NUL && buf[1] == NUL && buf[2] == NUL) {
-                return UTF_32BE;
-            } else if (buf[0] == NUL && buf[2] == NUL) {
-                return StandardCharsets.UTF_16BE;
-            } else if (buf[1] == NUL && buf[2] == NUL && buf[3] == NUL) {
-                return UTF_32LE;
-            } else if (buf[1] == NUL && buf[3] == NUL) {
-                return StandardCharsets.UTF_16LE;
-            }
-        }
-        return StandardCharsets.UTF_8;
-    }
-
-    @Override
-    public int read() throws IOException {
-        if (curIndex < bufLen) {
-            return buf[curIndex++];
-        }
-        return in.read();
-    }
-
-    @Override
-    public int read(byte b[], int off, int len) throws IOException {
-        if (curIndex < bufLen) {
-            if (len == 0) {
-                return 0;
-            }
-            if (off < 0 || len < 0 || len > b.length -off) {
-                throw new IndexOutOfBoundsException();
-            }
-            int min = Math.min(bufLen-curIndex, len);
-            System.arraycopy(buf, curIndex, b, off, min);
-            curIndex += min;
-            return min;
-        }
-        return in.read(b, off, len);
-    }
-
-}
Index: trunk/src/org/glassfish/json/api/BufferPool.java
===================================================================
--- trunk/src/org/glassfish/json/api/BufferPool.java	(revision 16017)
+++ 	(revision )
@@ -1,68 +1,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013-2017 Oracle and/or its affiliates. All rights reserved.
- *
- * The contents of this file are subject to the terms of either the GNU
- * General Public License Version 2 only ("GPL") or the Common Development
- * and Distribution License("CDDL") (collectively, the "License").  You
- * may not use this file except in compliance with the License.  You can
- * obtain a copy of the License at
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
- * or LICENSE.txt.  See the License for the specific
- * language governing permissions and limitations under the License.
- *
- * When distributing the software, include this License Header Notice in each
- * file and include the License file at LICENSE.txt.
- *
- * GPL Classpath Exception:
- * Oracle designates this particular file as subject to the "Classpath"
- * exception as provided by Oracle in the GPL Version 2 section of the License
- * file that accompanied this code.
- *
- * Modifications:
- * If applicable, add the following below the License Header, with the fields
- * enclosed by brackets [] replaced by your own identifying information:
- * "Portions Copyright [year] [name of copyright owner]"
- *
- * Contributor(s):
- * If you wish your version of this file to be governed by only the CDDL or
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
- * elects to include this software in this distribution under the [CDDL or GPL
- * Version 2] license."  If you don't indicate a single choice of license, a
- * recipient has the option to distribute your version of this file under
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
- * its licensees as provided above.  However, if you add GPL Version 2 code
- * and therefore, elected the GPL Version 2 license, then the option applies
- * only if the new code is made subject to such option by the copyright
- * holder.
- */
-
-package org.glassfish.json.api;
-
-/**
- * char[] pool that pool instances of char[] which are expensive to create.
- *
- * @author Jitendra Kotamraju
- */
-public interface BufferPool {
-
-    /**
-     * Gets a new char[] object from the pool.
-     *
-     * <p>
-     * If no object is available in the pool, this method creates a new one.
-     *
-     * @return
-     *      always non-null.
-     */
-    char[] take();
-
-    /**
-     * Returns an object back to the pool.
-     *
-     * @param buf object to return back to the pool
-     */
-    void recycle(char[] buf);
-
-}
