Example usage for com.fasterxml.jackson.core JsonFactory createParser

List of usage examples for com.fasterxml.jackson.core JsonFactory createParser

Introduction

In this page you can find the example usage for com.fasterxml.jackson.core JsonFactory createParser.

Prototype

public JsonParser createParser(String content) throws IOException, JsonParseException 

Source Link

Document

Method for constructing parser for parsing contents of given String.

Usage

From source file:com.couchbase.lite.replicator.ChangeTracker.java

protected void runLoop() {
    paused = false;//from w w  w .ja  v a2s  . co  m

    if (client == null) {
        // This is a race condition that can be reproduced by calling cbpuller.start() and cbpuller.stop()
        // directly afterwards.  What happens is that by the time the Changetracker thread fires up,
        // the cbpuller has already set this.client to null.  See issue #109
        Log.w(Log.TAG_CHANGE_TRACKER, "%s: ChangeTracker run() loop aborting because client == null", this);
        return;
    }

    if (mode == ChangeTrackerMode.Continuous) {
        // there is a failing unit test for this, and from looking at the code the Replication
        // object will never use Continuous mode anyway.  Explicitly prevent its use until
        // it is demonstrated to actually work.
        throw new RuntimeException("ChangeTracker does not correctly support continuous mode");
    }

    OkHttpClient httpClient = client.getOkHttpClient();

    backoff = new ChangeTrackerBackoff();

    while (running) {
        startTime = System.currentTimeMillis();

        Request.Builder builder = new Request.Builder();
        URL url = getChangesFeedURL();
        builder.url(url);
        if (usePOST) {
            builder.header("Content-Type", "application/json").addHeader("User-Agent", Manager.getUserAgent())
                    .addHeader("Accept-Encoding", "gzip").post(RequestBody.create(JSON, changesFeedPOSTBody()));
        }
        addRequestHeaders(builder);

        // Perform BASIC Authentication if needed
        builder = RequestUtils.preemptivelySetAuthCredentials(builder, url, authenticator);
        request = builder.build();

        try {
            String maskedRemoteWithoutCredentials = getChangesFeedURL().toString();
            maskedRemoteWithoutCredentials = maskedRemoteWithoutCredentials.replaceAll("://.*:.*@",
                    "://---:---@");
            Log.v(Log.TAG_CHANGE_TRACKER, "%s: Making request to %s", this, maskedRemoteWithoutCredentials);
            call = httpClient.newCall(request);
            Response response = call.execute();
            try {
                // In case response status is Error, ChangeTracker stops here
                if (isResponseFailed(response)) {
                    RequestUtils.closeResponseBody(response);
                    if (retryIfFailedPost(response))
                        continue;
                    break;
                }

                // Parse response body
                ResponseBody responseBody = response.body();

                Log.v(Log.TAG_CHANGE_TRACKER, "%s: got response. status: %s mode: %s", this, response.message(),
                        mode);
                if (responseBody != null) {
                    try {
                        Log.v(Log.TAG_CHANGE_TRACKER, "%s: /entity.getContent().  mode: %s", this, mode);
                        //inputStream = entity.getContent();
                        inputStream = responseBody.byteStream();
                        // decompress if contentEncoding is gzip
                        if (Utils.isGzip(response))
                            inputStream = new GZIPInputStream(inputStream);

                        if (mode == ChangeTrackerMode.LongPoll) { // continuous replications
                            // NOTE: 1. check content length, ObjectMapper().readValue() throws Exception if size is 0.
                            // NOTE: 2. HttpEntity.getContentLength() returns the number of bytes of the content, or a negative number if unknown.
                            // NOTE: 3. If Http Status is error, not parse response body
                            boolean responseOK = false; // default value
                            if (responseBody.contentLength() != 0 && response.code() < 300) {
                                try {
                                    Log.v(Log.TAG_CHANGE_TRACKER, "%s: readValue", this);
                                    Map<String, Object> fullBody = Manager.getObjectMapper()
                                            .readValue(inputStream, Map.class);
                                    Log.v(Log.TAG_CHANGE_TRACKER, "%s: /readValue.  fullBody: %s", this,
                                            fullBody);
                                    responseOK = receivedPollResponse(fullBody);
                                } catch (JsonParseException jpe) {
                                    Log.w(Log.TAG_CHANGE_TRACKER, "%s: json parsing error; %s", this,
                                            jpe.toString());
                                } catch (JsonMappingException jme) {
                                    Log.w(Log.TAG_CHANGE_TRACKER, "%s: json mapping error; %s", this,
                                            jme.toString());
                                }
                            }
                            Log.v(Log.TAG_CHANGE_TRACKER, "%s: responseOK: %s", this, responseOK);

                            if (responseOK) {
                                // TODO: this logic is questionable, there's lots
                                // TODO: of differences in the iOS changetracker code,
                                if (!caughtUp) {
                                    caughtUp = true;
                                    client.changeTrackerCaughtUp();
                                }
                                Log.v(Log.TAG_CHANGE_TRACKER, "%s: Starting new longpoll", this);
                                backoff.resetBackoff();
                                continue;
                            } else {
                                long elapsed = (System.currentTimeMillis() - startTime) / 1000;
                                Log.w(Log.TAG_CHANGE_TRACKER,
                                        "%s: Longpoll connection closed (by proxy?) after %d sec", this,
                                        elapsed);
                                if (elapsed >= 30) {
                                    // Looks like the connection got closed by a proxy (like AWS' load balancer) while the
                                    // server was waiting for a change to send, due to lack of activity.
                                    // Lower the heartbeat time to work around this, and reconnect:
                                    this.heartBeatSeconds = Math.min(this.heartBeatSeconds,
                                            (int) (elapsed * 0.75));
                                    Log.v(Log.TAG_CHANGE_TRACKER, "%s: Starting new longpoll", this);
                                    backoff.resetBackoff();
                                    continue;
                                } else {
                                    Log.d(Log.TAG_CHANGE_TRACKER, "%s: Change tracker calling stop (LongPoll)",
                                            this);
                                    client.changeTrackerFinished(this);
                                    break;
                                }
                            }
                        } else { // one-shot replications
                            Log.v(Log.TAG_CHANGE_TRACKER, "%s: readValue (oneshot)", this);
                            JsonFactory factory = new JsonFactory();
                            JsonParser jp = factory.createParser(inputStream);
                            JsonToken token;
                            // nextToken() is null => no more token
                            while (((token = jp.nextToken()) != JsonToken.START_ARRAY) && (token != null)) {
                                // ignore these tokens
                            }
                            while (jp.nextToken() == JsonToken.START_OBJECT) {
                                Map<String, Object> change = (Map) Manager.getObjectMapper().readValue(jp,
                                        Map.class);
                                if (!receivedChange(change)) {
                                    Log.w(Log.TAG_CHANGE_TRACKER,
                                            "Received unparseable change line from server: %s", change);
                                }
                                // if not running state anymore, exit from loop.
                                if (!running)
                                    break;
                            }
                            if (jp != null)
                                jp.close();

                            Log.v(Log.TAG_CHANGE_TRACKER, "%s: /readValue (oneshot)", this);
                            client.changeTrackerCaughtUp();
                            if (isContinuous()) { // if enclosing replication is continuous
                                mode = ChangeTrackerMode.LongPoll;
                            } else {
                                Log.d(Log.TAG_CHANGE_TRACKER, "%s: Change tracker calling stop (OneShot)",
                                        this);
                                client.changeTrackerFinished(this);
                                break;
                            }
                        }
                        backoff.resetBackoff();
                    } finally {
                        try {
                            if (inputStream != null) {
                                inputStream.close();
                                inputStream = null;
                            }
                        } catch (IOException e) {
                        }
                    }
                }
            } finally {
                RequestUtils.closeResponseBody(response);
            }
        } catch (Exception e) {
            if (!running && e instanceof IOException) {
                // in this case, just silently absorb the exception because it
                // frequently happens when we're shutting down and have to
                // close the socket underneath our read.
            } else {
                Log.w(Log.TAG_CHANGE_TRACKER, this + ": Exception in change tracker", e);
                this.error = e;
            }
            backoff.sleepAppropriateAmountOfTime();
        }
    }
    Log.v(Log.TAG_CHANGE_TRACKER, "%s: Change tracker run loop exiting", this);
}

From source file:com.marklogic.client.functionaltest.TestBulkReadWriteWithJacksonParserHandle.java

@Test
public void testWriteMultiJSONFilesDefaultMetadata() throws Exception {
    String docId[] = { "/original.json", "/updated.json", "/constraint1.json" };
    String jsonFilename1 = "json-original.json";
    String jsonFilename2 = "json-updated.json";
    String jsonFilename3 = "constraint1.json";

    File jsonFile1 = new File("src/test/java/com/marklogic/client/functionaltest/data/" + jsonFilename1);
    File jsonFile2 = new File("src/test/java/com/marklogic/client/functionaltest/data/" + jsonFilename2);
    File jsonFile3 = new File("src/test/java/com/marklogic/client/functionaltest/data/" + jsonFilename3);

    JSONDocumentManager docMgr = client.newJSONDocumentManager();
    docMgr.setMetadataCategories(Metadata.ALL);
    DocumentWriteSet writeset = docMgr.newWriteSet();
    // put meta-data
    DocumentMetadataHandle mh = setMetadata();
    DocumentMetadataHandle mhRead = new DocumentMetadataHandle();

    JsonFactory f = new JsonFactory();

    JacksonParserHandle jacksonParserHandle1 = new JacksonParserHandle();
    JacksonParserHandle jacksonParserHandle2 = new JacksonParserHandle();
    JacksonParserHandle jacksonParserHandle3 = new JacksonParserHandle();

    jacksonParserHandle1.set(f.createParser(jsonFile1));
    jacksonParserHandle2.set(f.createParser(jsonFile2));
    jacksonParserHandle3.set(f.createParser(jsonFile3));

    writeset.addDefault(mh);/*from   w w  w  . j  a  v  a  2 s .c  om*/
    writeset.add(docId[0], jacksonParserHandle1);
    writeset.add(docId[1], jacksonParserHandle2);
    writeset.add(docId[2], jacksonParserHandle3);

    docMgr.write(writeset);

    DocumentPage page = docMgr.read(docId);

    while (page.hasNext()) {
        DocumentRecord rec = page.next();
        docMgr.readMetadata(rec.getUri(), mhRead);
        System.out.println(rec.getUri());
        validateMetadata(mhRead);
    }
    validateMetadata(mhRead);
    mhRead = null;
    // Close handles.
    jacksonParserHandle1.close();
    jacksonParserHandle2.close();
    jacksonParserHandle3.close();
}

From source file:com.cedarsoft.serialization.test.performance.XmlParserPerformance.java

private void benchParse(@Nonnull JsonFactory factory, @Nonnull String contentSample)
        throws XMLStreamException, IOException {
    for (int i = 0; i < BIG; i++) {
        JsonParser parser = factory.createParser(new StringReader(contentSample));

        assertEquals(JsonToken.START_OBJECT, parser.nextToken());

        assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
        assertEquals("dependent", parser.getCurrentName());
        assertEquals(JsonToken.VALUE_FALSE, parser.nextToken());
        boolean dependent = parser.getBooleanValue();
        assertFalse(dependent);//from  w  w  w  .java  2  s.c o m

        assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
        assertEquals("id", parser.getCurrentName());
        assertEquals(JsonToken.VALUE_STRING, parser.nextToken());
        String id = parser.getText();
        assertEquals("Canon Raw", id);

        assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
        assertEquals("extension", parser.getCurrentName());
        assertEquals(JsonToken.START_OBJECT, parser.nextToken());

        assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
        assertEquals("isDefault", parser.getCurrentName());
        assertEquals(JsonToken.VALUE_TRUE, parser.nextToken());
        boolean isDefault = parser.getBooleanValue();
        assertTrue(isDefault);

        assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
        assertEquals("delimiter", parser.getCurrentName());
        assertEquals(JsonToken.VALUE_STRING, parser.nextToken());
        String delimiter = parser.getText();
        assertEquals(".", delimiter);

        assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
        assertEquals("extension", parser.getCurrentName());
        assertEquals(JsonToken.VALUE_STRING, parser.nextToken());
        String extension = parser.getText();
        assertEquals("cr2", extension);

        assertEquals(JsonToken.END_OBJECT, parser.nextToken());
        assertEquals(JsonToken.END_OBJECT, parser.nextToken());
        assertNull(parser.nextToken());

        parser.close();

        FileType type = new FileType(id, new Extension(delimiter, extension, isDefault), dependent);
        assertNotNull(type);
    }
}

From source file:com.cedarsoft.serialization.test.performance.XmlParserPerformance.java

private void benchParse(@Nonnull JsonFactory factory, @Nonnull byte[] contentSample)
        throws XMLStreamException, IOException {
    for (int i = 0; i < BIG; i++) {
        JsonParser parser = factory.createParser(contentSample);

        assertEquals(JsonToken.START_OBJECT, parser.nextToken());

        assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
        assertEquals("id", parser.getCurrentName());
        assertEquals(JsonToken.VALUE_STRING, parser.nextToken());
        String id = parser.getText();
        assertEquals("Canon Raw", id);

        assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
        assertEquals("dependent", parser.getCurrentName());
        assertEquals(JsonToken.VALUE_FALSE, parser.nextToken());
        boolean dependent = parser.getBooleanValue();
        assertFalse(dependent);/*from www. ja va 2s .  co m*/

        assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
        assertEquals("extension", parser.getCurrentName());
        assertEquals(JsonToken.START_OBJECT, parser.nextToken());

        assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
        assertEquals("extension", parser.getCurrentName());
        assertEquals(JsonToken.VALUE_STRING, parser.nextToken());
        String extension = parser.getText();
        assertEquals("cr2", extension);

        assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
        assertEquals("default", parser.getCurrentName());
        assertEquals(JsonToken.VALUE_TRUE, parser.nextToken());
        boolean isDefault = parser.getBooleanValue();
        assertTrue(isDefault);

        assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
        assertEquals("delimiter", parser.getCurrentName());
        assertEquals(JsonToken.VALUE_STRING, parser.nextToken());
        String delimiter = parser.getText();
        assertEquals(".", delimiter);

        assertEquals(JsonToken.END_OBJECT, parser.nextToken());
        assertEquals(JsonToken.END_OBJECT, parser.nextToken());
        assertNull(parser.nextToken());

        parser.close();

        FileType type = new FileType(id, new Extension(delimiter, extension, isDefault), dependent);
        assertNotNull(type);
    }
}

From source file:com.cedarsoft.serialization.test.performance.XmlParserPerformance.java

private void benchParseMapper(@Nonnull JsonFactory factory, @Nonnull String contentSample)
        throws XMLStreamException, IOException {
    ObjectMapper mapper = new ObjectMapper();
    for (int i = 0; i < BIG; i++) {
        JsonParser parser = factory.createParser(new StringReader(contentSample));
        assertNotNull(/*from w  w w . j ava 2 s  .  c o m*/
                mapper.readValue(parser, com.cedarsoft.serialization.test.performance.jaxb.FileType.class));
    }
}

From source file:com.tage.calcite.adapter.druid.DruidConnectionImpl.java

/** Parses the output of a {@code topN} query, sending the results to a
 * {@link Sink}. *//*  w  w w.j  a v a2  s . c  om*/
private void parse(com.tage.calcite.adapter.druid.QueryType queryType, InputStream in, Sink sink,
        List<String> fieldNames, List<Primitive> fieldTypes, Page page) {
    final JsonFactory factory = new JsonFactory();
    final Row.RowBuilder rowBuilder = Row.newBuilder(fieldNames.size());

    if (CalcitePrepareImpl.DEBUG) {
        try {
            final byte[] bytes = AvaticaUtils.readFullyToBytes(in);
            System.out.println("Response: " + new String(bytes));
            in = new ByteArrayInputStream(bytes);
        } catch (IOException e) {
            throw Throwables.propagate(e);
        }
    }

    try (final JsonParser parser = factory.createParser(in)) {
        switch (queryType) {
        case TOP_N:
            if (parser.nextToken() == JsonToken.START_ARRAY && parser.nextToken() == JsonToken.START_OBJECT) {
                expectScalarField(parser, "timestamp");
                if (parser.nextToken() == JsonToken.FIELD_NAME && parser.getCurrentName().equals("result")
                        && parser.nextToken() == JsonToken.START_ARRAY) {
                    while (parser.nextToken() == JsonToken.START_OBJECT) {
                        // loop until token equal to "}"
                        parseFields(fieldNames, fieldTypes, rowBuilder, parser);
                        sink.send(rowBuilder.build());
                        rowBuilder.reset();
                    }
                }
            }
            break;

        case SELECT:
            if (parser.nextToken() == JsonToken.START_ARRAY && parser.nextToken() == JsonToken.START_OBJECT) {
                page.pagingIdentifier = null;
                page.offset = -1;
                expectScalarField(parser, "timestamp");
                if (parser.nextToken() == JsonToken.FIELD_NAME && parser.getCurrentName().equals("result")
                        && parser.nextToken() == JsonToken.START_OBJECT) {
                    if (parser.nextToken() == JsonToken.FIELD_NAME
                            && parser.getCurrentName().equals("pagingIdentifiers")
                            && parser.nextToken() == JsonToken.START_OBJECT) {
                        switch (parser.nextToken()) {
                        case FIELD_NAME:
                            page.pagingIdentifier = parser.getCurrentName();
                            if (parser.nextToken() == JsonToken.VALUE_NUMBER_INT) {
                                page.offset = parser.getIntValue();
                            }
                            expect(parser, JsonToken.END_OBJECT);
                            break;
                        case END_OBJECT:
                        }
                    }
                    if (parser.nextToken() == JsonToken.FIELD_NAME && parser.getCurrentName().equals("events")
                            && parser.nextToken() == JsonToken.START_ARRAY) {
                        while (parser.nextToken() == JsonToken.START_OBJECT) {
                            expectScalarField(parser, "segmentId");
                            expectScalarField(parser, "offset");
                            if (parser.nextToken() == JsonToken.FIELD_NAME
                                    && parser.getCurrentName().equals("event")
                                    && parser.nextToken() == JsonToken.START_OBJECT) {
                                parseFields(fieldNames, fieldTypes, rowBuilder, parser);
                                sink.send(rowBuilder.build());
                                rowBuilder.reset();
                            }
                            expect(parser, JsonToken.END_OBJECT);
                        }
                        parser.nextToken();
                    }
                }
            }
            break;

        case GROUP_BY:
            if (parser.nextToken() == JsonToken.START_ARRAY) {
                while (parser.nextToken() == JsonToken.START_OBJECT) {
                    expectScalarField(parser, "version");
                    expectScalarField(parser, "timestamp");
                    if (parser.nextToken() == JsonToken.FIELD_NAME && parser.getCurrentName().equals("event")
                            && parser.nextToken() == JsonToken.START_OBJECT) {
                        parseFields(fieldNames, fieldTypes, rowBuilder, parser);
                        sink.send(rowBuilder.build());
                        rowBuilder.reset();
                    }
                    expect(parser, JsonToken.END_OBJECT);
                }
            }
        }
    } catch (IOException | InterruptedException e) {
        throw Throwables.propagate(e);
    }
}

From source file:com.marklogic.client.functionaltest.TestBulkReadWriteWithJacksonParserHandle.java

@Test
public void testWriteMultipleJSONDocs() throws Exception {
    String docId[] = { "/a.json", "/b.json", "/c.json" };
    String json1 = new String("{\"animal\":\"dog\", \"says\":\"woof\"}");
    String json2 = new String("{\"animal\":\"cat\", \"says\":\"meow\"}");
    String json3 = new String("{\"animal\":\"rat\", \"says\":\"keek\"}");

    JsonFactory f = new JsonFactory();

    JSONDocumentManager docMgr = client.newJSONDocumentManager();
    docMgr.setMetadataCategories(Metadata.ALL);
    DocumentWriteSet writeset = docMgr.newWriteSet();

    JacksonParserHandle jacksonParserHandle1 = new JacksonParserHandle();
    JacksonParserHandle jacksonParserHandle2 = new JacksonParserHandle();
    JacksonParserHandle jacksonParserHandle3 = new JacksonParserHandle();

    jacksonParserHandle1.set(f.createParser(json1));
    jacksonParserHandle2.set(f.createParser(json2));
    jacksonParserHandle3.set(f.createParser(json3));

    writeset.add(docId[0], jacksonParserHandle1);
    writeset.add(docId[1], jacksonParserHandle2);
    writeset.add(docId[2], jacksonParserHandle3);

    docMgr.write(writeset);//w ww .j a v a 2s  .  com

    //Using JacksonHandle to read back from database.
    JacksonHandle jacksonhandle = new JacksonHandle();
    docMgr.read(docId[0], jacksonhandle);
    JSONAssert.assertEquals(json1, jacksonhandle.toString(), true);

    docMgr.read(docId[1], jacksonhandle);
    JSONAssert.assertEquals(json2, jacksonhandle.toString(), true);

    docMgr.read(docId[2], jacksonhandle);
    JSONAssert.assertEquals(json3, jacksonhandle.toString(), true);
    // Close handles.
    jacksonParserHandle1.close();
    jacksonParserHandle2.close();
    jacksonParserHandle3.close();
}

From source file:com.marklogic.client.functionaltest.TestBulkReadWriteWithJacksonParserHandle.java

@Test
public void testWriteMultipleJSONDocsWithDefaultMetadata2() throws Exception {
    // Synthesize input content
    String doc1 = new String("{\"animal\": \"cat\", \"says\": \"meow\"}");
    String doc2 = new String("{\"animal\": \"dog\", \"says\": \"bark\"}");
    String doc3 = new String("{\"animal\": \"eagle\", \"says\": \"squeak\"}");
    String doc4 = new String("{\"animal\": \"lion\", \"says\": \"roar\"}");
    String doc5 = new String("{\"animal\": \"man\", \"says\": \"hello\"}");

    // Synthesize input meta-data
    DocumentMetadataHandle defaultMetadata1 = new DocumentMetadataHandle().withQuality(1);
    DocumentMetadataHandle defaultMetadata2 = new DocumentMetadataHandle().withQuality(2);
    DocumentMetadataHandle docSpecificMetadata = new DocumentMetadataHandle()
            .withCollections("mySpecificCollection");

    // Create and build up the batch
    JSONDocumentManager jdm = client.newJSONDocumentManager();
    jdm.setMetadataCategories(Metadata.ALL);

    DocumentWriteSet batch = jdm.newWriteSet();

    JsonFactory f = new JsonFactory();

    JacksonParserHandle jacksonParserHandle1 = new JacksonParserHandle();
    JacksonParserHandle jacksonParserHandle2 = new JacksonParserHandle();
    JacksonParserHandle jacksonParserHandle3 = new JacksonParserHandle();
    JacksonParserHandle jacksonParserHandle4 = new JacksonParserHandle();
    JacksonParserHandle jacksonParserHandle5 = new JacksonParserHandle();

    jacksonParserHandle1.set(f.createParser(doc1));
    jacksonParserHandle2.set(f.createParser(doc2));
    jacksonParserHandle3.set(f.createParser(doc3));
    jacksonParserHandle4.set(f.createParser(doc4));
    jacksonParserHandle5.set(f.createParser(doc5));

    // use system default meta-data
    batch.add("doc1.json", jacksonParserHandle1);

    // using batch default meta-data
    batch.addDefault(defaultMetadata1);//w  w  w  .j a v a 2  s . c  o m
    batch.add("doc2.json", jacksonParserHandle2); // batch default meta-data
    batch.add("doc3.json", docSpecificMetadata, jacksonParserHandle3);
    batch.add("doc4.json", jacksonParserHandle4); // batch default meta-data

    // replace batch default meta-data with new meta-data
    batch.addDefault(defaultMetadata2);
    batch.add("doc5.json", jacksonParserHandle5); // batch default

    // Execute the write operation
    jdm.write(batch);
    DocumentPage page;
    DocumentRecord rec;
    // Check the results
    // Doc1 should have the system default quality of 0
    page = jdm.read("doc1.json");
    DocumentMetadataHandle mh = new DocumentMetadataHandle();
    rec = page.next();
    jdm.readMetadata(rec.getUri(), mh);
    validateDefaultMetadata(mh);
    assertEquals("default quality", 0, mh.getQuality());

    // Doc2 should use the first batch default meta-data, with quality 1
    page = jdm.read("doc2.json");
    rec = page.next();
    jdm.readMetadata(rec.getUri(), mh);
    System.out.print(mh.getCollections().isEmpty());
    assertEquals("default quality", 1, mh.getQuality());
    assertTrue("default collections reset", mh.getCollections().isEmpty());

    // Doc3 should have the system default document quality (0) because
    // quality
    // was not included in the document-specific meta-data. It should be in
    // the
    // collection "mySpecificCollection", from the document-specific
    // meta-data.

    page = jdm.read("doc3.json");
    rec = page.next();
    jdm.readMetadata(rec.getUri(), mh);
    assertEquals("default quality", 0, mh.getQuality());
    assertEquals("default collection must change", "[mySpecificCollection]", mh.getCollections().toString());

    DocumentMetadataHandle doc3Metadata = jdm.readMetadata("doc3.json", new DocumentMetadataHandle());
    System.out.println("doc3 quality: Expected=0, Actual=" + doc3Metadata.getPermissions());
    System.out.print("doc3 collections: Expected: myCollection, Actual=");
    for (String collection : doc3Metadata.getCollections()) {
        System.out.print(collection + " ");
    }
    System.out.println();

    // Doc 4 should also use the 1st batch default meta-data, with quality 1
    page = jdm.read("doc4.json");
    rec = page.next();
    jdm.readMetadata(rec.getUri(), mh);
    assertEquals("default quality", 1, mh.getQuality());
    assertTrue("default collections reset", mh.getCollections().isEmpty());
    // Doc5 should use the 2nd batch default meta-data, with quality 2
    page = jdm.read("doc5.json");
    rec = page.next();
    jdm.readMetadata(rec.getUri(), mh);
    assertEquals("default quality", 2, mh.getQuality());
    // Close handles.
    jacksonParserHandle1.close();
    jacksonParserHandle2.close();
    jacksonParserHandle3.close();
    jacksonParserHandle4.close();
    jacksonParserHandle5.close();
}

From source file:com.marklogic.client.functionaltest.TestBulkReadWriteWithJacksonParserHandle.java

@Test
public void testBulkSearchQBEWithJSONResponseFormat()
        throws IOException, ParserConfigurationException, SAXException, TransformerException {
    int count;/*from  ww w. ja  v a  2s. c o  m*/
    String docId[] = { "/a.json", "/b.json", "/c.json" };
    String json1 = new String("{\"animal\":\"dog\", \"says\":\"woof\"}");
    String json2 = new String("{\"animal\":\"cat\", \"says\":\"meow\"}");
    String json3 = new String("{\"animal\":\"rat\", \"says\":\"keek\"}");

    JsonFactory f = new JsonFactory();

    JSONDocumentManager docMgr1 = client.newJSONDocumentManager();
    docMgr1.setMetadataCategories(Metadata.ALL);
    DocumentWriteSet writeset = docMgr1.newWriteSet();

    JacksonParserHandle jacksonParserHandle1 = new JacksonParserHandle();
    JacksonParserHandle jacksonParserHandle2 = new JacksonParserHandle();
    JacksonParserHandle jacksonParserHandle3 = new JacksonParserHandle();

    jacksonParserHandle1.set(f.createParser(json1));
    jacksonParserHandle2.set(f.createParser(json2));
    jacksonParserHandle3.set(f.createParser(json3));

    writeset.add(docId[0], jacksonParserHandle1);
    writeset.add(docId[1], jacksonParserHandle2);
    writeset.add(docId[2], jacksonParserHandle3);
    // Write to database.
    docMgr1.write(writeset);

    //Creating a xml document manager for bulk search
    XMLDocumentManager docMgr = client.newXMLDocumentManager();
    //using QBE for query definition and set the search criteria

    QueryManager queryMgr = client.newQueryManager();
    String queryAsString = "{\"$query\": { \"says\": {\"$word\":\"woof\",\"$exact\": false}}}";
    RawQueryByExampleDefinition qd = queryMgr
            .newRawQueryByExampleDefinition(new StringHandle(queryAsString).withFormat(Format.JSON));

    // set  document manager level settings for search response
    docMgr.setPageLength(25);
    docMgr.setSearchView(QueryView.RESULTS);
    docMgr.setNonDocumentFormat(Format.JSON);

    // Search for documents where content has bar and get first result record, get search handle on it,Use DOMHandle to read results
    JacksonParserHandle sh = new JacksonParserHandle();
    DocumentPage page;

    long pageNo = 1;
    do {
        count = 0;
        page = docMgr.search(qd, pageNo, sh);
        if (pageNo > 1) {
            assertFalse("Is this first Page", page.isFirstPage());
            assertTrue("Is page has previous page ?", page.hasPreviousPage());
        }
        while (page.hasNext()) {
            DocumentRecord rec = page.next();
            rec.getFormat();
            validateRecord(rec, Format.JSON);
            System.out.println(rec.getContent(new StringHandle()).get().toString());
            count++;
        }

        // Add additional asserts once JacksonParserHandle is ready to handle bulk Search set.

        //assertTrue("Page start in results and on page",sh.get().get("start").asLong() == page.getStart());
        assertEquals("document count", page.size(), count);
        //         assertEquals("Page Number #",pageNo,page.getPageNumber());
        pageNo = pageNo + page.getPageSize();
    } while (!page.isLastPage() && page.hasContent());

    assertEquals("page count is  ", 1, page.getTotalPages());
    assertFalse("Page has previous page ?", page.hasPreviousPage());
    assertEquals("page size", 25, page.getPageSize());
    assertEquals("document count", 1, page.getTotalSize());
    // Close handles.
    jacksonParserHandle1.close();
    jacksonParserHandle2.close();
    jacksonParserHandle3.close();
}

From source file:msearch.io.MSFilmlisteLesen.java

private boolean filmlisteJsonEinlesen(File vonDatei, ListeFilme listeFilme) {
    boolean ret = false;
    BZip2CompressorInputStream bZip2CompressorInputStream;
    JsonFactory jsonF = new JsonFactory();
    JsonParser jp = null;/*from w ww .j  av  a2s. c  o m*/
    JsonToken jsonToken;
    String sender = "", thema = "";
    try {
        // ##########################################################
        // und jetzt die Liste einlesen, URL kann es jetzt schon nicht mehr sein!
        if (!vonDatei.exists()) {
            MSLog.fehlerMeldung(702030698, MSLog.FEHLER_ART_PROG, "MSearchIoXmlFilmlisteLesen.filmlisteLesen",
                    "Datei existiert nicht: " + vonDatei.getName());
            return false;
        }
        if (vonDatei.getName().endsWith(MSConst.FORMAT_XZ)) {
            XZInputStream xZInputStream = new XZInputStream(new FileInputStream(vonDatei));
            jp = jsonF.createParser(new InputStreamReader(xZInputStream, MSConst.KODIERUNG_UTF));
        } else if (vonDatei.getName().endsWith(MSConst.FORMAT_BZ2)) {
            bZip2CompressorInputStream = new BZip2CompressorInputStream(new FileInputStream(vonDatei));
            jp = jsonF.createParser(new InputStreamReader(bZip2CompressorInputStream, MSConst.KODIERUNG_UTF));
        } else if (vonDatei.getName().endsWith(MSConst.FORMAT_ZIP)) {
            ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(vonDatei));
            zipInputStream.getNextEntry();
            jp = jsonF.createParser(new InputStreamReader(zipInputStream, MSConst.KODIERUNG_UTF));
        } else {
            jp = jsonF.createParser(vonDatei); // geht so am schnellsten
        }
        if (jp.nextToken() != JsonToken.START_OBJECT) {
            throw new IOException("Expected data to start with an Object");
        }
        while ((jsonToken = jp.nextToken()) != null) {
            if (jsonToken == JsonToken.END_OBJECT) {
                break;
            }
            if (jp.isExpectedStartArrayToken()) {
                for (int k = 0; k < ListeFilme.MAX_ELEM; ++k) {
                    listeFilme.metaDaten[k] = jp.nextTextValue();
                }
                break;
            }
        }
        while ((jsonToken = jp.nextToken()) != null) {
            if (jsonToken == JsonToken.END_OBJECT) {
                break;
            }
            if (jp.isExpectedStartArrayToken()) {
                // sind nur die Feldbeschreibungen, brauch mer nicht
                jp.nextToken();
                break;
            }
        }
        while ((jsonToken = jp.nextToken()) != null) {
            if (jsonToken == JsonToken.END_OBJECT) {
                break;
            }
            if (jp.isExpectedStartArrayToken()) {
                DatenFilm datenFilm = new DatenFilm();
                for (int i = 0; i < DatenFilm.COLUMN_NAMES_JSON.length; ++i) {
                    datenFilm.arr[DatenFilm.COLUMN_NAMES_JSON[i]] = jp.nextTextValue();
                    /// fr die Entwicklungszeit
                    if (datenFilm.arr[DatenFilm.COLUMN_NAMES_JSON[i]] == null) {
                        datenFilm.arr[DatenFilm.COLUMN_NAMES_JSON[i]] = "";
                    }
                }
                if (datenFilm.arr[DatenFilm.FILM_SENDER_NR].equals("")) {
                    datenFilm.arr[DatenFilm.FILM_SENDER_NR] = sender;
                } else {
                    sender = datenFilm.arr[DatenFilm.FILM_SENDER_NR];
                }
                if (datenFilm.arr[DatenFilm.FILM_THEMA_NR].equals("")) {
                    datenFilm.arr[DatenFilm.FILM_THEMA_NR] = thema;
                } else {
                    thema = datenFilm.arr[DatenFilm.FILM_THEMA_NR];
                }
                listeFilme.importFilmliste(datenFilm);
            }
        }
        jp.close();
        ret = true;
    } catch (Exception ex) {
        MSLog.fehlerMeldung(468956200, MSLog.FEHLER_ART_PROG, "MSearchIoXmlFilmlisteLesen.filmlisteLesen", ex,
                "von: " + vonDatei.getName());
    }
    return ret;
}