Example usage for com.google.gson.stream JsonReader nextBoolean

List of usage examples for com.google.gson.stream JsonReader nextBoolean

Introduction

In this page you can find the example usage for com.google.gson.stream JsonReader nextBoolean.

Prototype

public boolean nextBoolean() throws IOException 

Source Link

Document

Returns the com.google.gson.stream.JsonToken#BOOLEAN boolean value of the next token, consuming it.

Usage

From source file:org.mitre.openid.connect.service.impl.MITREidDataService_1_2.java

License:Apache License

/**
 * Read the list of system scopes from the reader and insert them into the
 * scope repository./*from  w w w. ja  v  a2 s .c  om*/
 *
 * @param reader
 * @throws IOException
 */
private void readSystemScopes(JsonReader reader) throws IOException {
    reader.beginArray();
    while (reader.hasNext()) {
        SystemScope scope = new SystemScope();
        reader.beginObject();
        while (reader.hasNext()) {
            switch (reader.peek()) {
            case END_OBJECT:
                continue;
            case NAME:
                String name = reader.nextName();
                if (reader.peek() == JsonToken.NULL) {
                    reader.skipValue();
                } else if (name.equals(VALUE)) {
                    scope.setValue(reader.nextString());
                } else if (name.equals(DESCRIPTION)) {
                    scope.setDescription(reader.nextString());
                } else if (name.equals(RESTRICTED)) {
                    scope.setRestricted(reader.nextBoolean());
                } else if (name.equals(DEFAULT_SCOPE)) {
                    scope.setDefaultScope(reader.nextBoolean());
                } else if (name.equals(ICON)) {
                    scope.setIcon(reader.nextString());
                } else if (name.equals(STRUCTURED)) {
                    logger.warn("Found a structured scope, ignoring structure");
                } else if (name.equals(STRUCTURED_PARAMETER)) {
                    logger.warn("Found a structured scope, ignoring structure");
                } else {
                    logger.debug("found unexpected entry");
                    reader.skipValue();
                }
                break;
            default:
                logger.debug("Found unexpected entry");
                reader.skipValue();
                continue;
            }
        }
        reader.endObject();
        sysScopeRepository.save(scope);
    }
    reader.endArray();
    logger.info("Done reading system scopes");
}

From source file:org.mitre.openid.connect.service.impl.MITREidDataService_1_3.java

License:Apache License

/**
 * @param reader/* w w  w  . ja  va 2 s . c om*/
 * @throws IOException
 */
private void readClients(JsonReader reader) throws IOException {
    reader.beginArray();
    while (reader.hasNext()) {
        ClientDetailsEntity client = new ClientDetailsEntity();
        reader.beginObject();
        while (reader.hasNext()) {
            switch (reader.peek()) {
            case END_OBJECT:
                continue;
            case NAME:
                String name = reader.nextName();
                if (reader.peek() == JsonToken.NULL) {
                    reader.skipValue();
                } else if (name.equals(CLIENT_ID)) {
                    client.setClientId(reader.nextString());
                } else if (name.equals(RESOURCE_IDS)) {
                    Set<String> resourceIds = readSet(reader);
                    client.setResourceIds(resourceIds);
                } else if (name.equals(SECRET)) {
                    client.setClientSecret(reader.nextString());
                } else if (name.equals(SCOPE)) {
                    Set<String> scope = readSet(reader);
                    client.setScope(scope);
                } else if (name.equals(AUTHORITIES)) {
                    Set<String> authorityStrs = readSet(reader);
                    Set<GrantedAuthority> authorities = new HashSet<GrantedAuthority>();
                    for (String s : authorityStrs) {
                        GrantedAuthority ga = new SimpleGrantedAuthority(s);
                        authorities.add(ga);
                    }
                    client.setAuthorities(authorities);
                } else if (name.equals(ACCESS_TOKEN_VALIDITY_SECONDS)) {
                    client.setAccessTokenValiditySeconds(reader.nextInt());
                } else if (name.equals(REFRESH_TOKEN_VALIDITY_SECONDS)) {
                    client.setRefreshTokenValiditySeconds(reader.nextInt());
                } else if (name.equals(ID_TOKEN_VALIDITY_SECONDS)) {
                    client.setIdTokenValiditySeconds(reader.nextInt());
                } else if (name.equals(DEVICE_CODE_VALIDITY_SECONDS)) {
                    client.setDeviceCodeValiditySeconds(reader.nextInt());
                } else if (name.equals(REDIRECT_URIS)) {
                    Set<String> redirectUris = readSet(reader);
                    client.setRedirectUris(redirectUris);
                } else if (name.equals(CLAIMS_REDIRECT_URIS)) {
                    Set<String> claimsRedirectUris = readSet(reader);
                    client.setClaimsRedirectUris(claimsRedirectUris);
                } else if (name.equals(NAME)) {
                    client.setClientName(reader.nextString());
                } else if (name.equals(URI)) {
                    client.setClientUri(reader.nextString());
                } else if (name.equals(LOGO_URI)) {
                    client.setLogoUri(reader.nextString());
                } else if (name.equals(CONTACTS)) {
                    Set<String> contacts = readSet(reader);
                    client.setContacts(contacts);
                } else if (name.equals(TOS_URI)) {
                    client.setTosUri(reader.nextString());
                } else if (name.equals(TOKEN_ENDPOINT_AUTH_METHOD)) {
                    AuthMethod am = AuthMethod.getByValue(reader.nextString());
                    client.setTokenEndpointAuthMethod(am);
                } else if (name.equals(GRANT_TYPES)) {
                    Set<String> grantTypes = readSet(reader);
                    client.setGrantTypes(grantTypes);
                } else if (name.equals(RESPONSE_TYPES)) {
                    Set<String> responseTypes = readSet(reader);
                    client.setResponseTypes(responseTypes);
                } else if (name.equals(POLICY_URI)) {
                    client.setPolicyUri(reader.nextString());
                } else if (name.equals(APPLICATION_TYPE)) {
                    AppType appType = AppType.getByValue(reader.nextString());
                    client.setApplicationType(appType);
                } else if (name.equals(SECTOR_IDENTIFIER_URI)) {
                    client.setSectorIdentifierUri(reader.nextString());
                } else if (name.equals(SUBJECT_TYPE)) {
                    SubjectType st = SubjectType.getByValue(reader.nextString());
                    client.setSubjectType(st);
                } else if (name.equals(JWKS_URI)) {
                    client.setJwksUri(reader.nextString());
                } else if (name.equals(JWKS)) {
                    try {
                        client.setJwks(JWKSet.parse(reader.nextString()));
                    } catch (ParseException e) {
                        logger.error("Couldn't parse JWK Set", e);
                    }
                } else if (name.equals(REQUEST_OBJECT_SIGNING_ALG)) {
                    JWSAlgorithm alg = JWSAlgorithm.parse(reader.nextString());
                    client.setRequestObjectSigningAlg(alg);
                } else if (name.equals(USER_INFO_ENCRYPTED_RESPONSE_ALG)) {
                    JWEAlgorithm alg = JWEAlgorithm.parse(reader.nextString());
                    client.setUserInfoEncryptedResponseAlg(alg);
                } else if (name.equals(USER_INFO_ENCRYPTED_RESPONSE_ENC)) {
                    EncryptionMethod alg = EncryptionMethod.parse(reader.nextString());
                    client.setUserInfoEncryptedResponseEnc(alg);
                } else if (name.equals(USER_INFO_SIGNED_RESPONSE_ALG)) {
                    JWSAlgorithm alg = JWSAlgorithm.parse(reader.nextString());
                    client.setUserInfoSignedResponseAlg(alg);
                } else if (name.equals(ID_TOKEN_SIGNED_RESPONSE_ALG)) {
                    JWSAlgorithm alg = JWSAlgorithm.parse(reader.nextString());
                    client.setIdTokenSignedResponseAlg(alg);
                } else if (name.equals(ID_TOKEN_ENCRYPTED_RESPONSE_ALG)) {
                    JWEAlgorithm alg = JWEAlgorithm.parse(reader.nextString());
                    client.setIdTokenEncryptedResponseAlg(alg);
                } else if (name.equals(ID_TOKEN_ENCRYPTED_RESPONSE_ENC)) {
                    EncryptionMethod alg = EncryptionMethod.parse(reader.nextString());
                    client.setIdTokenEncryptedResponseEnc(alg);
                } else if (name.equals(TOKEN_ENDPOINT_AUTH_SIGNING_ALG)) {
                    JWSAlgorithm alg = JWSAlgorithm.parse(reader.nextString());
                    client.setTokenEndpointAuthSigningAlg(alg);
                } else if (name.equals(DEFAULT_MAX_AGE)) {
                    client.setDefaultMaxAge(reader.nextInt());
                } else if (name.equals(REQUIRE_AUTH_TIME)) {
                    client.setRequireAuthTime(reader.nextBoolean());
                } else if (name.equals(DEFAULT_ACR_VALUES)) {
                    Set<String> defaultACRvalues = readSet(reader);
                    client.setDefaultACRvalues(defaultACRvalues);
                } else if (name.equals("initiateLoginUri")) {
                    client.setInitiateLoginUri(reader.nextString());
                } else if (name.equals(POST_LOGOUT_REDIRECT_URI)) {
                    Set<String> postLogoutUris = readSet(reader);
                    client.setPostLogoutRedirectUris(postLogoutUris);
                } else if (name.equals(REQUEST_URIS)) {
                    Set<String> requestUris = readSet(reader);
                    client.setRequestUris(requestUris);
                } else if (name.equals(DESCRIPTION)) {
                    client.setClientDescription(reader.nextString());
                } else if (name.equals(ALLOW_INTROSPECTION)) {
                    client.setAllowIntrospection(reader.nextBoolean());
                } else if (name.equals(REUSE_REFRESH_TOKEN)) {
                    client.setReuseRefreshToken(reader.nextBoolean());
                } else if (name.equals(CLEAR_ACCESS_TOKENS_ON_REFRESH)) {
                    client.setClearAccessTokensOnRefresh(reader.nextBoolean());
                } else if (name.equals(DYNAMICALLY_REGISTERED)) {
                    client.setDynamicallyRegistered(reader.nextBoolean());
                } else if (name.equals(CODE_CHALLENGE_METHOD)) {
                    client.setCodeChallengeMethod(PKCEAlgorithm.parse(reader.nextString()));
                } else if (name.equals(SOFTWARE_ID)) {
                    client.setSoftwareId(reader.nextString());
                } else if (name.equals(SOFTWARE_VERSION)) {
                    client.setSoftwareVersion(reader.nextString());
                } else if (name.equals(SOFTWARE_STATEMENT)) {
                    try {
                        client.setSoftwareStatement(JWTParser.parse(reader.nextString()));
                    } catch (ParseException e) {
                        logger.error("Couldn't parse software statement", e);
                    }
                } else if (name.equals(CREATION_DATE)) {
                    Date date = utcToDate(reader.nextString());
                    client.setCreatedAt(date);
                } else {
                    logger.debug("Found unexpected entry");
                    reader.skipValue();
                }
                break;
            default:
                logger.debug("Found unexpected entry");
                reader.skipValue();
                continue;
            }
        }
        reader.endObject();
        clientRepository.saveClient(client);
    }
    reader.endArray();
    logger.info("Done reading clients");
}

From source file:org.mitre.openid.connect.service.impl.MITREidDataService_1_3.java

License:Apache License

/**
 * Read the list of system scopes from the reader and insert them into the
 * scope repository.//  www . j  a  v  a2 s .c om
 *
 * @param reader
 * @throws IOException
 */
private void readSystemScopes(JsonReader reader) throws IOException {
    reader.beginArray();
    while (reader.hasNext()) {
        SystemScope scope = new SystemScope();
        reader.beginObject();
        while (reader.hasNext()) {
            switch (reader.peek()) {
            case END_OBJECT:
                continue;
            case NAME:
                String name = reader.nextName();
                if (reader.peek() == JsonToken.NULL) {
                    reader.skipValue();
                } else if (name.equals(VALUE)) {
                    scope.setValue(reader.nextString());
                } else if (name.equals(DESCRIPTION)) {
                    scope.setDescription(reader.nextString());
                } else if (name.equals(RESTRICTED)) {
                    scope.setRestricted(reader.nextBoolean());
                } else if (name.equals(DEFAULT_SCOPE)) {
                    scope.setDefaultScope(reader.nextBoolean());
                } else if (name.equals(ICON)) {
                    scope.setIcon(reader.nextString());
                } else {
                    logger.debug("found unexpected entry");
                    reader.skipValue();
                }
                break;
            default:
                logger.debug("Found unexpected entry");
                reader.skipValue();
                continue;
            }
        }
        reader.endObject();
        sysScopeRepository.save(scope);
    }
    reader.endArray();
    logger.info("Done reading system scopes");
}

From source file:org.mitre.util.JsonUtils.java

License:Apache License

public static Map readMap(JsonReader reader) throws IOException {
    Map map = new HashMap<>();
    reader.beginObject();/*  w  w w.jav a2s  . co m*/
    while (reader.hasNext()) {
        String name = reader.nextName();
        Object value = null;
        switch (reader.peek()) {
        case STRING:
            value = reader.nextString();
            break;
        case BOOLEAN:
            value = reader.nextBoolean();
            break;
        case NUMBER:
            value = reader.nextLong();
            break;
        default:
            logger.debug("Found unexpected entry");
            reader.skipValue();
            continue;
        }
        map.put(name, value);
    }
    reader.endObject();
    return map;
}

From source file:org.onos.yangtools.yang.data.codec.gson.JsonParserStream.java

License:Open Source License

public void read(final JsonReader in, AbstractNodeDataWithSchema parent) throws IOException {
    switch (in.peek()) {
    case STRING:/*  w  ww  . jav  a 2 s  .  c om*/
    case NUMBER:
        setValue(parent, in.nextString());
        break;
    case BOOLEAN:
        setValue(parent, Boolean.toString(in.nextBoolean()));
        break;
    case NULL:
        in.nextNull();
        setValue(parent, null);
        break;
    case BEGIN_ARRAY:
        in.beginArray();
        while (in.hasNext()) {
            if (parent instanceof LeafNodeDataWithSchema) {
                read(in, parent);
            } else {
                final AbstractNodeDataWithSchema newChild = newArrayEntry(parent);
                read(in, newChild);
            }
        }
        in.endArray();
        return;
    case BEGIN_OBJECT:
        final Set<String> namesakes = new HashSet<>();
        in.beginObject();
        /*
         * This allows parsing of incorrectly /as showcased/
         * in testconf nesting of list items - eg.
         * lists with one value are sometimes serialized
         * without wrapping array.
         *
         */
        if (isArray(parent)) {
            parent = newArrayEntry(parent);
        }
        while (in.hasNext()) {
            final String jsonElementName = in.nextName();
            final NamespaceAndName namespaceAndName = resolveNamespace(jsonElementName, parent.getSchema());
            final String localName = namespaceAndName.getName();
            addNamespace(namespaceAndName.getUri());
            if (namesakes.contains(jsonElementName)) {
                throw new JsonSyntaxException("Duplicate name " + jsonElementName + " in JSON input.");
            }
            namesakes.add(jsonElementName);
            final Deque<DataSchemaNode> childDataSchemaNodes = findSchemaNodeByNameAndNamespace(
                    parent.getSchema(), localName, getCurrentNamespace());
            if (childDataSchemaNodes.isEmpty()) {
                throw new IllegalStateException("Schema for node with name " + localName + " and namespace "
                        + getCurrentNamespace() + " doesn't exist.");
            }

            final AbstractNodeDataWithSchema newChild = ((CompositeNodeDataWithSchema) parent)
                    .addChild(childDataSchemaNodes);
            /*
             * FIXME:anyxml data shouldn't be skipped but should be loaded somehow.
             * will be able to load anyxml which conforms to YANG data using these
             * parser, for other anyxml will be harder.
             */
            if (newChild instanceof AnyXmlNodeDataWithSchema) {
                in.skipValue();
            } else {
                read(in, newChild);
            }
            removeNamespace();
        }
        in.endObject();
        return;
    case END_DOCUMENT:
    case NAME:
    case END_OBJECT:
    case END_ARRAY:
        break;
    }
}

From source file:org.opendaylight.controller.sal.rest.gson.JsonParser.java

License:Open Source License

public JsonElement read(JsonReader in) throws IOException {
    switch (in.peek()) {
    case STRING:/*from w  w  w  . j a  va  2 s .  c om*/
        return new JsonPrimitive(in.nextString());
    case NUMBER:
        String number = in.nextString();
        return new JsonPrimitive(new LazilyParsedNumber(number));
    case BOOLEAN:
        return new JsonPrimitive(in.nextBoolean());
    case NULL:
        in.nextNull();
        return JsonNull.INSTANCE;
    case BEGIN_ARRAY:
        JsonArray array = new JsonArray();
        in.beginArray();
        while (in.hasNext()) {
            array.add(read(in));
        }
        in.endArray();
        return array;
    case BEGIN_OBJECT:
        JsonObject object = new JsonObject();
        in.beginObject();
        while (in.hasNext()) {
            final String childName = in.nextName();
            if (object.has(childName)) {
                throw new JsonSyntaxException("Duplicate name " + childName + " in JSON input.");
            }
            object.add(childName, read(in));
        }
        in.endObject();
        return object;
    case END_DOCUMENT:
    case NAME:
    case END_OBJECT:
    case END_ARRAY:
    default:
        throw new IllegalArgumentException();
    }
}

From source file:org.opendaylight.netconf.sal.rest.impl.JsonToPATCHBodyReader.java

License:Open Source License

private List<PATCHEntity> read(final JsonReader in, InstanceIdentifierContext path) throws IOException {

    boolean inEdit = false;
    boolean inValue = false;
    String operation = null;/*from w  ww . ja  v a  2s .c o m*/
    String target = null;
    String editId = null;
    List<PATCHEntity> resultCollection = new ArrayList<>();

    while (in.hasNext()) {
        switch (in.peek()) {
        case STRING:
        case NUMBER:
            in.nextString();
            break;
        case BOOLEAN:
            Boolean.toString(in.nextBoolean());
            break;
        case NULL:
            in.nextNull();
            break;
        case BEGIN_ARRAY:
            in.beginArray();
            break;
        case BEGIN_OBJECT:
            if (inEdit && operation != null & target != null & inValue) {
                //let's do the stuff - find out target node
                //                      StringInstanceIdentifierCodec codec = new StringInstanceIdentifierCodec(path
                //                               .getSchemaContext());
                //                        if (path.getInstanceIdentifier().toString().equals("/")) {
                //                        final YangInstanceIdentifier deserialized = codec.deserialize(target);
                //                        }
                DataSchemaNode targetNode = ((DataNodeContainer) (path.getSchemaNode()))
                        .getDataChildByName(target.replace("/", ""));
                if (targetNode == null) {
                    LOG.debug("Target node {} not found in path {} ", target, path.getSchemaNode());
                    throw new RestconfDocumentedException("Error parsing input", ErrorType.PROTOCOL,
                            ErrorTag.MALFORMED_MESSAGE);
                } else {

                    final NormalizedNodeResult resultHolder = new NormalizedNodeResult();
                    final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter
                            .from(resultHolder);

                    //keep on parsing json from place where target points
                    final JsonParserStream jsonParser = JsonParserStream.create(writer, path.getSchemaContext(),
                            path.getSchemaNode());
                    jsonParser.parse(in);

                    final YangInstanceIdentifier targetII = path.getInstanceIdentifier()
                            .node(targetNode.getQName());
                    resultCollection
                            .add(new PATCHEntity(editId, operation, targetII, resultHolder.getResult()));
                    inValue = false;

                    operation = null;
                    target = null;
                }
                in.endObject();
            } else {
                in.beginObject();
            }
            break;
        case END_DOCUMENT:
            break;
        case NAME:
            final String name = in.nextName();

            switch (name) {
            case "edit":
                inEdit = true;
                break;
            case "operation":
                operation = in.nextString();
                break;
            case "target":
                target = in.nextString();
                break;
            case "value":
                inValue = true;
                break;
            case "patch-id":
                patchId = in.nextString();
                break;
            case "edit-id":
                editId = in.nextString();
                break;
            }
            break;
        case END_OBJECT:
            in.endObject();
            break;
        case END_ARRAY:
            in.endArray();
            break;

        default:
            break;
        }
    }

    return ImmutableList.copyOf(resultCollection);
}

From source file:org.opendaylight.restconf.jersey.providers.JsonToPATCHBodyReader.java

License:Open Source License

private List<PATCHEntity> read(final JsonReader in, final InstanceIdentifierContext path) throws IOException {
    final List<PATCHEntity> resultCollection = new ArrayList<>();
    final StringModuleInstanceIdentifierCodec codec = new StringModuleInstanceIdentifierCodec(
            path.getSchemaContext());//  w  w w .j av  a2s  . com
    final JsonToPATCHBodyReader.PatchEdit edit = new JsonToPATCHBodyReader.PatchEdit();

    while (in.hasNext()) {
        switch (in.peek()) {
        case STRING:
        case NUMBER:
            in.nextString();
            break;
        case BOOLEAN:
            Boolean.toString(in.nextBoolean());
            break;
        case NULL:
            in.nextNull();
            break;
        case BEGIN_ARRAY:
            in.beginArray();
            break;
        case BEGIN_OBJECT:
            in.beginObject();
            break;
        case END_DOCUMENT:
            break;
        case NAME:
            parseByName(in.nextName(), edit, in, path, codec, resultCollection);
            break;
        case END_OBJECT:
            in.endObject();
            break;
        case END_ARRAY:
            in.endArray();
            break;

        default:
            break;
        }
    }

    return ImmutableList.copyOf(resultCollection);
}

From source file:org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream.java

License:Open Source License

private void traverseAnyXmlValue(final JsonReader in, final Document doc, final Element parentElement)
        throws IOException {
    switch (in.peek()) {
    case STRING:// ww w.  j  a  va  2s . c  o m
    case NUMBER:
        Text textNode = doc.createTextNode(in.nextString());
        parentElement.appendChild(textNode);
        break;
    case BOOLEAN:
        textNode = doc.createTextNode(Boolean.toString(in.nextBoolean()));
        parentElement.appendChild(textNode);
        break;
    case NULL:
        in.nextNull();
        textNode = doc.createTextNode("null");
        parentElement.appendChild(textNode);
        break;
    case BEGIN_ARRAY:
        in.beginArray();
        while (in.hasNext()) {
            final Element childElement = doc.createElement(ANYXML_ARRAY_ELEMENT_ID);
            parentElement.appendChild(childElement);
            traverseAnyXmlValue(in, doc, childElement);
        }
        in.endArray();
        break;
    case BEGIN_OBJECT:
        in.beginObject();
        while (in.hasNext()) {
            final Element childElement = doc.createElement(in.nextName());
            parentElement.appendChild(childElement);
            traverseAnyXmlValue(in, doc, childElement);
        }
        in.endObject();
    case END_DOCUMENT:
    case NAME:
    case END_OBJECT:
    case END_ARRAY:
        break;
    }
}

From source file:org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream.java

License:Open Source License

public void read(final JsonReader in, AbstractNodeDataWithSchema parent) throws IOException {
    switch (in.peek()) {
    case STRING:/*from   w ww.  ja va  2  s.  c  o  m*/
    case NUMBER:
        setValue(parent, in.nextString());
        break;
    case BOOLEAN:
        setValue(parent, Boolean.toString(in.nextBoolean()));
        break;
    case NULL:
        in.nextNull();
        setValue(parent, null);
        break;
    case BEGIN_ARRAY:
        in.beginArray();
        while (in.hasNext()) {
            if (parent instanceof LeafNodeDataWithSchema) {
                read(in, parent);
            } else {
                final AbstractNodeDataWithSchema newChild = newArrayEntry(parent);
                read(in, newChild);
            }
        }
        in.endArray();
        return;
    case BEGIN_OBJECT:
        final Set<String> namesakes = new HashSet<>();
        in.beginObject();
        /*
         * This allows parsing of incorrectly /as showcased/
         * in testconf nesting of list items - eg.
         * lists with one value are sometimes serialized
         * without wrapping array.
         *
         */
        if (isArray(parent)) {
            parent = newArrayEntry(parent);
        }
        while (in.hasNext()) {
            final String jsonElementName = in.nextName();
            DataSchemaNode parentSchema = parent.getSchema();
            if (parentSchema instanceof YangModeledAnyXmlSchemaNode) {
                parentSchema = ((YangModeledAnyXmlSchemaNode) parentSchema).getSchemaOfAnyXmlData();
            }
            final NamespaceAndName namespaceAndName = resolveNamespace(jsonElementName, parentSchema);
            final String localName = namespaceAndName.getName();
            addNamespace(namespaceAndName.getUri());
            if (namesakes.contains(jsonElementName)) {
                throw new JsonSyntaxException("Duplicate name " + jsonElementName + " in JSON input.");
            }
            namesakes.add(jsonElementName);

            final Deque<DataSchemaNode> childDataSchemaNodes = ParserStreamUtils
                    .findSchemaNodeByNameAndNamespace(parentSchema, localName, getCurrentNamespace());
            if (childDataSchemaNodes.isEmpty()) {
                throw new IllegalStateException("Schema for node with name " + localName + " and namespace "
                        + getCurrentNamespace() + " doesn't exist.");
            }

            final AbstractNodeDataWithSchema newChild = ((CompositeNodeDataWithSchema) parent)
                    .addChild(childDataSchemaNodes);
            if (newChild instanceof AnyXmlNodeDataWithSchema) {
                readAnyXmlValue(in, (AnyXmlNodeDataWithSchema) newChild, jsonElementName);
            } else {
                read(in, newChild);
            }
            removeNamespace();
        }
        in.endObject();
        return;
    case END_DOCUMENT:
    case NAME:
    case END_OBJECT:
    case END_ARRAY:
        break;
    }
}