Example usage for com.fasterxml.jackson.core JsonParser nextToken

List of usage examples for com.fasterxml.jackson.core JsonParser nextToken

Introduction

In this page you can find the example usage for com.fasterxml.jackson.core JsonParser nextToken.

Prototype

public abstract JsonToken nextToken() throws IOException, JsonParseException;

Source Link

Document

Main iteration method, which will advance stream enough to determine type of the next token, if any.

Usage

From source file:org.debezium.core.doc.JacksonReader.java

private Array parseArray(JsonParser parser) throws IOException {
    // Iterate over the fields in the top-level document ...
    BasicArray array = new BasicArray();
    JsonToken token = parser.nextToken();
    while (token != JsonToken.END_ARRAY) {
        switch (token) {
        case START_OBJECT:
            array.add(parseDocument(parser, true));
            break;
        case START_ARRAY:
            array.add(parseArray(parser));
            break;
        case VALUE_STRING:
            array.add(parser.getValueAsString());
            break;
        case VALUE_TRUE:
            array.add(true);//from   w w  w.  j  ava 2s  .c om
            break;
        case VALUE_FALSE:
            array.add(false);
            break;
        case VALUE_NULL:
            array.addNull();
            break;
        case VALUE_NUMBER_FLOAT:
        case VALUE_NUMBER_INT:
            switch (parser.getNumberType()) {
            case FLOAT:
                array.add(parser.getFloatValue());
                break;
            case DOUBLE:
                array.add(parser.getDoubleValue());
                break;
            case BIG_DECIMAL:
                array.add(parser.getDecimalValue());
                break;
            case INT:
                array.add(parser.getIntValue());
                break;
            case LONG:
                array.add(parser.getLongValue());
                break;
            case BIG_INTEGER:
                array.add(parser.getBigIntegerValue());
                break;
            }
            break;
        case VALUE_EMBEDDED_OBJECT:
            // disregard this, since it's an extension ...
            break;
        case NOT_AVAILABLE:
            throw new JsonParseException("Non-blocking parsers are not supported", parser.getCurrentLocation());
        case FIELD_NAME:
            throw new JsonParseException("Not expecting a FIELD_NAME token", parser.getCurrentLocation());
        case END_ARRAY:
            throw new JsonParseException("Not expecting an END_ARRAY token", parser.getCurrentLocation());
        case END_OBJECT:
            throw new JsonParseException("Not expecting an END_OBJECT token", parser.getCurrentLocation());
        }
        token = parser.nextToken();
    }
    return array;
}

From source file:org.apache.lucene.server.handlers.BulkUpdateDocumentsHandler.java

@Override
public String handleStreamed(Reader reader, Map<String, List<String>> params) throws Exception {

    JsonFactory jfactory = new JsonFactory();

    JsonParser parser = jfactory.createJsonParser(reader);

    if (parser.nextToken() != JsonToken.START_OBJECT) {
        throw new IllegalArgumentException("expected JSON object");
    }// w w w.  j  av  a  2s  . com
    if (parser.nextToken() != JsonToken.FIELD_NAME) {
        throw new IllegalArgumentException("expected indexName first");
    }
    if (!parser.getText().equals("indexName")) {
        throw new IllegalArgumentException("expected indexName first");
    }
    if (parser.nextToken() != JsonToken.VALUE_STRING) {
        throw new IllegalArgumentException("indexName should be string");
    }

    IndexState indexState = globalState.get(parser.getText());
    indexState.verifyStarted(null);
    if (parser.nextToken() != JsonToken.FIELD_NAME) {
        throw new IllegalArgumentException("expected documents next");
    }
    if (!parser.getText().equals("documents")) {
        throw new IllegalArgumentException("expected documents after indexName");
    }

    if (parser.nextToken() != JsonToken.START_ARRAY) {
        throw new IllegalArgumentException("documents should be a list");
    }
    ShardState shardState = indexState.getShard(0);

    int count = 0;
    IndexingContext ctx = new IndexingContext();

    AddDocumentHandler addDocHandler = (AddDocumentHandler) globalState.getHandler("addDocument");

    // Parse as many doc blocks as there are:
    while (true) {

        List<Document> children = null;
        Document parent = null;
        Term updateTerm = null;

        JsonToken token = parser.nextToken();
        if (token == JsonToken.END_ARRAY) {
            break;
        }
        if (token != JsonToken.START_OBJECT) {
            throw new IllegalArgumentException("expected object");
        }

        // Parse term + parent + children for this one doc block:
        while (true) {
            token = parser.nextToken();
            if (token == JsonToken.END_OBJECT) {
                // Done with parent + child in this block
                break;
            }
            if (token != JsonToken.FIELD_NAME) {
                throw new IllegalArgumentException("missing field name: " + token);
            }
            String f = parser.getText();
            if (f.equals("term")) {
                if (parser.nextToken() != JsonToken.START_OBJECT) {
                    throw new IllegalArgumentException("missing object");
                }

                // TODO: allow field to be specified only once, then
                // only text per document

                String field = null, term = null;

                while (parser.nextToken() != JsonToken.END_OBJECT) {
                    String f2 = parser.getText();
                    if (f2.equals("field")) {
                        if (parser.nextToken() != JsonToken.VALUE_STRING) {
                            throw new IllegalArgumentException("missing string value");
                        }
                        field = parser.getText();
                        // Ensure field is valid:
                        indexState.getField(field);
                    } else if (f2.equals("term")) {
                        if (parser.nextToken() != JsonToken.VALUE_STRING) {
                            throw new IllegalArgumentException("missing string value");
                        }
                        term = parser.getText();
                    } else {
                        throw new IllegalArgumentException("unexpected field " + f);
                    }
                }
                updateTerm = new Term(field, term);
            } else if (f.equals("children")) {
                token = parser.nextToken();
                if (token != JsonToken.START_ARRAY) {
                    throw new IllegalArgumentException("expected array for children");
                }

                children = new ArrayList<Document>();

                // Parse each child:
                while (true) {
                    Document doc = addDocHandler.parseDocument(indexState, parser);
                    if (doc == null) {
                        break;
                    }
                    children.add(doc);
                }
            } else if (f.equals("parent")) {
                parent = addDocHandler.parseDocument(indexState, parser);
            } else {
                throw new IllegalArgumentException("unrecognized field name \"" + f + "\"");
            }
        }

        if (parent == null) {
            throw new IllegalArgumentException("missing parent");
        }
        if (children == null) {
            throw new IllegalArgumentException("missing children");
        }

        // Parent is last:
        children.add(parent);

        globalState.submitIndexingTask(shardState.getAddDocumentsJob(count, updateTerm, children, ctx));
        count++;
    }

    // nocommit this is ... lameish:
    while (true) {
        if (ctx.addCount.get() == count) {
            break;
        }
        Thread.sleep(1);
    }

    Throwable t = ctx.getError();
    if (t != null) {
        IOUtils.reThrow(t);
    }

    JSONObject o = new JSONObject();
    o.put("indexGen", shardState.writer.getMaxCompletedSequenceNumber());
    o.put("indexedDocumentBlockCount", count);

    return o.toString();
}

From source file:org.apache.ode.jacob.soup.jackson.MessageDeserializer.java

@Override
public Message deserialize(JsonParser jp, DeserializationContext ctxt)
        throws IOException, JsonProcessingException {

    long id = 0;//from w  ww .  j ava  2s .c  o m
    String action = null;
    ChannelRef to = null;
    ChannelRef replyTo = null;
    Map<String, Object> headers = null;
    Object body = null;

    while (jp.nextToken() != JsonToken.END_OBJECT) {
        String fieldname = jp.getCurrentName();
        if (jp.getCurrentToken() == JsonToken.FIELD_NAME) {
            // if we're not already on the field, advance by one.
            jp.nextToken();
        }

        if ("id".equals(fieldname)) {
            id = jp.getLongValue();
        } else if ("action".equals(fieldname)) {
            action = jp.getText();
        } else if ("to".equals(fieldname)) {
            to = jp.readValueAs(ChannelRef.class);
        } else if ("replyTo".equals(fieldname)) {
            replyTo = jp.readValueAs(ChannelRef.class);
        } else if ("headers".equals(fieldname)) {
            headers = jp.readValueAs(mapTypeRef);
        } else if ("body".equals(fieldname)) {
            body = jp.readValueAs(Object.class);
        }
    }

    if (action == null) {
        throw ctxt.mappingException(Message.class);
    }

    if (to == null) {
        throw ctxt.mappingException(Message.class);
    }

    Message msg = new Message(to, replyTo, action);
    msg.setHeaders(headers);
    msg.setBody(body);
    msg.setId(id);

    return msg;
}

From source file:org.messic.server.api.tagwizard.discogs.DiscogsTAGWizardPlugin.java

private Album getAlbum(String id) {
    String baseURL = "http://api.discogs.com/releases/" + id;
    try {/*ww w . j  a v a 2s  .  c om*/
        URL url = new URL(baseURL);
        Proxy proxy = getProxy();
        URLConnection uc = (proxy != null ? url.openConnection(proxy) : url.openConnection());
        uc.setRequestProperty("User-Agent", "Messic/1.0 +http://spheras.github.io/messic/");

        Album album = new Album();

        album.name = "";
        album.author = "";
        album.comments = "Info obtained by Discogs provider (http://www.discogs.com/)";
        album.year = 1900;
        album.genre = "";

        JsonFactory jsonFactory = new JsonFactory(); // or, for data binding,
        JsonParser jParser = jsonFactory.createParser(uc.getInputStream());
        while (jParser.nextToken() != null) {
            String fieldname = jParser.getCurrentName();
            if ("title".equals(fieldname)) {
                jParser.nextToken();
                album.name = jParser.getText();
            }
            if ("year".equals(fieldname)) {
                jParser.nextToken();
                try {
                    album.year = Integer.valueOf(jParser.getText());
                } catch (Exception e) {
                    album.year = 0;
                }
            }
            if ("notes".equals(fieldname)) {
                jParser.nextToken();
                album.comments = jParser.getText();
            }
            if ("genres".equals(fieldname)) {
                jParser.nextToken();
                jParser.nextToken();
                album.genre = jParser.getText();
                do {
                    jParser.nextToken();
                } while (!"genres".equals(jParser.getCurrentName()));
            }
            if ("artists".equals(fieldname)) {
                jParser.nextToken();
                while (!"name".equals(jParser.getCurrentName())) {
                    jParser.nextToken();
                }
                jParser.nextToken();
                album.author = jParser.getText();
                do {
                    jParser.nextToken();
                } while (!"artists".equals(jParser.getCurrentName()));
            }

            if ("tracklist".equals(fieldname)) {
                album.songs = new ArrayList<Song>();
                do {
                    Song newsong = new Song();
                    int tracknumber = 1;
                    while (jParser.nextToken() != JsonToken.END_OBJECT) {
                        String trackfieldname = jParser.getCurrentName();

                        if ("extraartists".equals(trackfieldname)) {
                            do {
                                while (jParser.nextToken() != JsonToken.END_OBJECT) {

                                }
                                jParser.nextToken();
                            } while (!"extraartists".equals(jParser.getCurrentName()));
                        }
                        if ("position".equals(trackfieldname)) {
                            jParser.nextToken();
                            try {
                                newsong.track = Integer.valueOf(jParser.getText());
                            } catch (Exception e) {
                                newsong.track = tracknumber;
                            }
                            tracknumber++;
                        }
                        if ("title".equals(trackfieldname)) {
                            jParser.nextToken();
                            newsong.name = jParser.getText();
                        }
                    }
                    album.songs.add(newsong);
                    jParser.nextToken();
                } while (!"tracklist".equals(jParser.getCurrentName()));
                jParser.nextToken();
            }
        }

        return album;
    } catch (Exception e) {
        log.error("failed!", e);
    }

    return null;
}

From source file:org.onosproject.north.aaa.api.parser.impl.UserParser.java

@Override
public Set<User> parseJson(InputStream stream) throws IOException, ParseException {
    // begin parsing JSON to Application class
    ObjectMapper mapper = new ObjectMapper();
    JsonNode jsonNode = mapper.readTree(stream);
    JsonParser jp = jsonNode.traverse();
    Set<User> userSet = new HashSet<>();

    // continue parsing the token till the end of input is reached
    while (!jp.isClosed()) {
        // get the token
        JsonToken token = jp.nextToken();
        // if its the last token then we are done
        if (token == null) {
            break;
        }/*w w w.  j a v  a 2s. co m*/
        if (JsonToken.FIELD_NAME.equals(token) && "users".equals(jp.getCurrentName())) {
            token = jp.nextToken();
            if (!JsonToken.START_ARRAY.equals(token)) {
                // bail out
                throw new ParseException("expected ARRAY after users");
            }

            while (true) {
                token = jp.nextToken();
                if (JsonToken.END_ARRAY.equals(token)) {
                    // bail out
                    break;
                }
                if (JsonToken.START_OBJECT.equals(token)) {
                    User user = jsonToUser(jp);
                    userSet.add(user);
                }
            }
        }
    }
    return userSet;
}

From source file:com.sdl.odata.unmarshaller.json.core.JsonProcessor.java

/**
 * Parse the complex values./*from  w w w.  j a  v a  2  s.  c o  m*/
 *
 * @param jsonParser the parser
 * @return list of parsed result objects
 * @throws IOException If unable to read input parser
 */
private List<Object> getCollectionValue(JsonParser jsonParser) throws IOException {
    LOG.info("Start parsing {} array", jsonParser.getCurrentName());
    List<Object> list = new ArrayList<>();
    while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
        if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
            Object embedded = getEmbeddedObject(jsonParser);
            list.add(embedded);
        }
        if (!"}".equals(jsonParser.getText())) {
            list.add(jsonParser.getText());
        } else {
            LOG.info("Array is over.");
        }
    }
    return list;
}

From source file:com.cedarsoft.couchdb.test.utils.AttachmentsTest.java

License:asdf

@Test
public void testInlined() throws Exception {
    CouchDoc<String> doc = new CouchDoc<String>(new DocId("asdf"), "the object");
    doc.addAttachment(new CouchDoc.InlineAttachment(new AttachmentId("daid"), MediaType.TEXT_XML_TYPE,
            "<x/>".getBytes()));
    doc.addAttachment(new CouchDoc.InlineAttachment(new AttachmentId("hehe"), MediaType.APPLICATION_XML_TYPE,
            "<x2/>".getBytes()));

    AbstractJacksonSerializer<String> serializer = new AbstractJacksonSerializer<String>("daString",
            VersionRange.single(1, 0, 0)) {
        @Override/*from w w w .  j a  va2 s  .  co  m*/
        public void serialize(@Nonnull JsonGenerator serializeTo, @Nonnull String object,
                @Nonnull Version formatVersion) throws IOException, VersionException, JsonProcessingException {
            serializeTo.writeStringField("daString", object);
        }

        @Nonnull
        @Override
        public String deserialize(@Nonnull JsonParser deserializeFrom, @Nonnull Version formatVersion)
                throws IOException, VersionException, JsonProcessingException {
            deserializeFrom.nextToken();
            deserializeFrom.nextValue();

            try {
                return deserializeFrom.getText();
            } finally {
                deserializeFrom.nextToken();
            }
        }
    };
    assertEquals(201, db().put(doc, serializer).getStatus());

    JsonUtils.assertJsonEquals(getClass().getResource("doc_with_2_attachments.json"),
            new String(ByteStreams.toByteArray(db().get(doc.getId()))));

    CouchDoc<String> resolvedDoc = db().get(doc.getId(), serializer);
    assertEquals("the object", resolvedDoc.getObject());
    assertEquals(2, resolvedDoc.getAttachments().size());
    assertEquals("daid", resolvedDoc.getAttachments().get(0).getId().asString());
    assertEquals("text/xml", resolvedDoc.getAttachments().get(0).getContentType().toString());
    assertEquals("hehe", resolvedDoc.getAttachments().get(1).getId().asString());
    assertEquals("application/xml", resolvedDoc.getAttachments().get(1).getContentType().toString());
}

From source file:com.sdl.odata.unmarshaller.json.core.JsonProcessor.java

/**
 * Process an embedded object.//from  ww  w.  ja  v a2 s .  com
 *
 * @param jsonParser the parser
 * @return map with embedded object key:values
 * @throws IOException If unable to read input parser
 */
private Object getEmbeddedObject(JsonParser jsonParser) throws IOException {
    LOG.info("Start parsing an embedded object.");
    Map<String, Object> embeddedMap = new HashMap<>();
    while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
        String key = jsonParser.getText();
        jsonParser.nextToken();
        JsonToken token = jsonParser.getCurrentToken();
        if (token == JsonToken.START_ARRAY) {
            Object embeddedArray = getCollectionValue(jsonParser);
            embeddedMap.put(key, embeddedArray);
        } else if (token == JsonToken.START_OBJECT) {
            Object embeddedObject = getEmbeddedObject(jsonParser);
            embeddedMap.put(key, embeddedObject);
        } else {
            if (token.equals(JsonToken.VALUE_NULL)) {
                embeddedMap.put(key, null);
            } else {
                embeddedMap.put(key, jsonParser.getText());
            }
        }
    }
    return embeddedMap;
}

From source file:com.adobe.communities.ugc.migration.importer.GenericUGCImporter.java

protected void doPost(final SlingHttpServletRequest request, final SlingHttpServletResponse response)
        throws ServletException, IOException {

    UGCImportHelper.checkUserPrivileges(request.getResourceResolver(), rrf);

    ResourceResolver resolver;//  ww  w .  j  a v a2  s . c om
    try {
        resolver = serviceUserWrapper.getServiceResourceResolver(rrf,
                Collections.<String, Object>singletonMap(ResourceResolverFactory.SUBSERVICE, UGC_WRITER));
    } catch (final LoginException e) {
        throw new ServletException("Not able to invoke service user");
    }

    // finally get the uploaded file
    final RequestParameter[] fileRequestParameters = request.getRequestParameters("file");
    if (fileRequestParameters != null && fileRequestParameters.length > 0
            && !fileRequestParameters[0].isFormField()) {

        if (fileRequestParameters[0].getFileName().endsWith(".json")) {
            // if upload is a single json file...

            // get the resource we'll be adding new content to
            final String path = request.getRequestParameter("path").getString();
            final Resource resource = resolver.getResource(path);
            if (resource == null) {
                resolver.close();
                throw new ServletException("Could not find a valid resource for import");
            }
            final InputStream inputStream = fileRequestParameters[0].getInputStream();
            final JsonParser jsonParser = new JsonFactory().createParser(inputStream);
            jsonParser.nextToken(); // get the first token

            importFile(jsonParser, resource, resolver);
        } else if (fileRequestParameters[0].getFileName().endsWith(".zip")) {
            ZipInputStream zipInputStream;
            try {
                zipInputStream = new ZipInputStream(fileRequestParameters[0].getInputStream());
            } catch (IOException e) {
                resolver.close();
                throw new ServletException("Could not open zip archive");
            }

            try {
                final RequestParameter[] paths = request.getRequestParameters("path");
                int counter = 0;
                ZipEntry zipEntry = zipInputStream.getNextEntry();
                while (zipEntry != null && paths.length > counter) {
                    final String path = paths[counter].getString();
                    final Resource resource = resolver.getResource(path);
                    if (resource == null) {
                        resolver.close();
                        throw new ServletException("Could not find a valid resource for import");
                    }

                    final JsonParser jsonParser = new JsonFactory().createParser(zipInputStream);
                    jsonParser.nextToken(); // get the first token
                    importFile(jsonParser, resource, resolver);
                    zipInputStream.closeEntry();
                    zipEntry = zipInputStream.getNextEntry();
                    counter++;
                }
            } finally {
                zipInputStream.close();
            }
        } else {
            resolver.close();
            throw new ServletException("Unrecognized file input type");
        }
    } else {
        resolver.close();
        throw new ServletException("No file provided for UGC data");
    }
    resolver.close();
}

From source file:de.upb.wdqa.wdvd.datamodel.oldjson.jackson.deserializers.OldSitelinksDeserializer.java

@Override
public LinkedHashMap<String, OldJacksonSiteLink> deserialize(JsonParser jp, DeserializationContext ctxt)
        throws IOException, JsonProcessingException {

    LinkedHashMap<String, OldJacksonSiteLink> result = null;

    // Is the alias broken, i.e., it starts with '['
    if (jp.getCurrentToken().equals(JsonToken.START_ARRAY)) {
        result = new LinkedHashMap<String, OldJacksonSiteLink>();
        jp.nextToken();
        if (!jp.getCurrentToken().equals(JsonToken.END_ARRAY)) {
            logger.warn("Token " + JsonToken.END_ARRAY + " expected");
        }//  www . j  a  v a2 s .  c o m
    } else {
        ObjectCodec mapper = jp.getCodec();
        result = mapper.readValue(jp, new TypeReference<LinkedHashMap<String, OldJacksonSiteLink>>() {
        });
    }

    return result;
}