public void testCompareParsingTokens() throws IOException { BytesStreamOutput xsonOs = new BytesStreamOutput(); XContentGenerator xsonGen = XContentFactory.xContent(XContentType.CBOR).createGenerator(xsonOs); BytesStreamOutput jsonOs = new BytesStreamOutput(); XContentGenerator jsonGen = XContentFactory.xContent(XContentType.JSON).createGenerator(jsonOs); xsonGen.writeStartObject(); jsonGen.writeStartObject(); xsonGen.writeStringField("test", "value"); jsonGen.writeStringField("test", "value"); xsonGen.writeFieldName("arr"); xsonGen.writeStartArray(); jsonGen.writeFieldName("arr"); jsonGen.writeStartArray(); xsonGen.writeNumber(1); jsonGen.writeNumber(1); xsonGen.writeNull(); jsonGen.writeNull(); xsonGen.writeEndArray(); jsonGen.writeEndArray(); xsonGen.writeEndObject(); jsonGen.writeEndObject(); xsonGen.close(); jsonGen.close(); verifySameTokens(createParser(JsonXContent.jsonXContent, jsonOs.bytes()), createParser(CborXContent.cborXContent, xsonOs.bytes())); }
public void testPrettyWithLfAtEnd() throws Exception { ByteArrayOutputStream os = new ByteArrayOutputStream(); XContentGenerator generator = XContentFactory.xContent(XContentType.JSON).createGenerator(os); generator.usePrettyPrint(); generator.usePrintLineFeedAtEnd(); generator.writeStartObject(); generator.writeStringField("test", "value"); generator.writeEndObject(); generator.flush(); generator.close(); // double close, and check there is no error... generator.close(); byte[] bytes = os.toByteArray(); assertThat((char) bytes[bytes.length - 1], equalTo('\n')); }
public void testReuseJsonGenerator() throws Exception { ByteArrayOutputStream os = new ByteArrayOutputStream(); XContentGenerator generator = XContentFactory.xContent(XContentType.JSON).createGenerator(os); generator.writeStartObject(); generator.writeStringField("test", "value"); generator.writeEndObject(); generator.flush(); assertThat(new BytesRef(os.toByteArray()), equalTo(new BytesRef("{\"test\":\"value\"}"))); // try again... os.reset(); generator.writeStartObject(); generator.writeStringField("test", "value"); generator.writeEndObject(); generator.flush(); // we get a space at the start here since it thinks we are not in the root object (fine, we will ignore it in the real code we use) assertThat(new BytesRef(os.toByteArray()), equalTo(new BytesRef(" {\"test\":\"value\"}"))); }
/** * Create Elasticsearch document source content from entity * * @param entity the entity to convert to document source content * @return Elasticsearch document source content */ Document createDocument(Entity entity) { int maxIndexingDepth = entity.getEntityType().getIndexingDepth(); XContentBuilder contentBuilder; try { contentBuilder = XContentFactory.contentBuilder(JSON); XContentGenerator generator = contentBuilder.generator(); generator.writeStartObject(); createRec(entity, generator, 0, maxIndexingDepth); generator.writeEndObject(); } catch (IOException e) { throw new RuntimeException(e); } String documentId = toElasticsearchId(entity.getIdValue()); return Document.create(documentId, contentBuilder); }
@Test public void addValueToTheIndexField() throws Exception { DocumentWithCommentsIndexStructureBuilder tested = new DocumentWithCommentsIndexStructureBuilder( mockEsIntegrationComponent(), null, null, createSettingsWithMandatoryFilled(), true); XContentGenerator xContentGeneratorMock = mock(XContentGenerator.class); XContentBuilder out = XContentBuilder.builder(preparexContentMock(xContentGeneratorMock)); // case - string field tested.addValueToTheIndexField(out, "test", "testvalue"); verify(xContentGeneratorMock).writeFieldName("test"); verify(xContentGeneratorMock).writeString("testvalue"); // case - integer field reset(xContentGeneratorMock); tested.addValueToTheIndexField(out, "testint", new Integer(10)); verify(xContentGeneratorMock).writeFieldName("testint"); verify(xContentGeneratorMock).writeNumber(10); // case - nothing added if value is null reset(xContentGeneratorMock); tested.addValueToTheIndexField(out, "testnull", null); Mockito.verifyZeroInteractions(xContentGeneratorMock); }
public void testCompareParsingTokens() throws IOException { BytesStreamOutput xsonOs = new BytesStreamOutput(); XContentGenerator xsonGen = XContentFactory.xContent(XContentType.SMILE).createGenerator(xsonOs); BytesStreamOutput jsonOs = new BytesStreamOutput(); XContentGenerator jsonGen = XContentFactory.xContent(XContentType.JSON).createGenerator(jsonOs); xsonGen.writeStartObject(); jsonGen.writeStartObject(); xsonGen.writeStringField("test", "value"); jsonGen.writeStringField("test", "value"); xsonGen.writeFieldName("arr"); xsonGen.writeStartArray(); jsonGen.writeFieldName("arr"); jsonGen.writeStartArray(); xsonGen.writeNumber(1); jsonGen.writeNumber(1); xsonGen.writeNull(); jsonGen.writeNull(); xsonGen.writeEndArray(); jsonGen.writeEndArray(); xsonGen.writeEndObject(); jsonGen.writeEndObject(); xsonGen.close(); jsonGen.close(); verifySameTokens(createParser(JsonXContent.jsonXContent, jsonOs.bytes()), createParser(SmileXContent.smileXContent, xsonOs.bytes())); }
public void testWritingBinaryToStream() throws Exception { BytesStreamOutput bos = new BytesStreamOutput(); XContentGenerator gen = XContentFactory.xContent(XContentType.JSON).createGenerator(bos); gen.writeStartObject(); gen.writeStringField("name", "something"); gen.flush(); bos.write(", source : { test : \"value\" }".getBytes("UTF8")); gen.writeStringField("name2", "something2"); gen.writeEndObject(); gen.close(); String sData = bos.bytes().utf8ToString(); assertThat(sData, equalTo("{\"name\":\"something\", source : { test : \"value\" },\"name2\":\"something2\"}")); }
public static void copyCurrentStructure(XContentGenerator generator, XContentParser parser) throws IOException { XContentParser.Token t = parser.currentToken(); // Let's handle field-name separately first if (t == XContentParser.Token.FIELD_NAME) { generator.writeFieldName(parser.currentName()); t = parser.nextToken(); // fall-through to copy the associated value } switch (t) { case START_ARRAY: generator.writeStartArray(); while (parser.nextToken() != XContentParser.Token.END_ARRAY) { copyCurrentStructure(generator, parser); } generator.writeEndArray(); break; case START_OBJECT: generator.writeStartObject(); while (parser.nextToken() != XContentParser.Token.END_OBJECT) { copyCurrentStructure(generator, parser); } generator.writeEndObject(); break; default: // others are simple: copyCurrentEvent(generator, parser); } }
private void createRec(Entity entity, XContentGenerator generator, int depth, int maxDepth) throws IOException { for (Attribute attr : entity.getEntityType().getAtomicAttributes()) { generator.writeFieldName(documentIdGenerator.generateId(attr)); createRec(entity, attr, generator, depth, maxDepth); } }
private void createRecReferenceAttribute(XContentGenerator generator, int depth, int maxDepth, Entity xrefEntity) throws IOException { if (depth < maxDepth) { generator.writeStartObject(); createRec(xrefEntity, generator, depth + 1, maxDepth); generator.writeEndObject(); } else { Attribute xrefIdAttr = xrefEntity.getEntityType().getLabelAttribute(); createRec(xrefEntity, xrefIdAttr, generator, depth + 1, maxDepth); } }
@Override public XContentGenerator createGenerator(OutputStream os, Set<String> includes, Set<String> excludes) throws IOException { return new YamlXContentGenerator(yamlFactory.createGenerator(os, JsonEncoding.UTF8), os, includes, excludes); }
@Override public XContentGenerator createGenerator(OutputStream os, Set<String> includes, Set<String> excludes) throws IOException { return new CborXContentGenerator(cborFactory.createGenerator(os, JsonEncoding.UTF8), os, includes, excludes); }
@Override public XContentGenerator createGenerator(OutputStream os, Set<String> includes, Set<String> excludes) throws IOException { return new JsonXContentGenerator(jsonFactory.createGenerator(os, JsonEncoding.UTF8), os, includes, excludes); }
@Override public XContentGenerator createGenerator(OutputStream os, Set<String> includes, Set<String> excludes) throws IOException { return new SmileXContentGenerator(smileFactory.createGenerator(os, JsonEncoding.UTF8), os, includes, excludes); }
@Override public XContentGenerator createGenerator(OutputStream os) throws IOException { return new XmlXContentGenerator(xmlFactory.createGenerator(os, JsonEncoding.UTF8)); }
@Override public XContentGenerator createGenerator(OutputStream os, String[] filters) throws IOException { // ignore filters (for now) return new XmlXContentGenerator(xmlFactory.createGenerator(os, JsonEncoding.UTF8)); }
public static void copyCurrentEvent(XContentGenerator generator, XContentParser parser) throws IOException { switch (parser.currentToken()) { case START_OBJECT: generator.writeStartObject(); break; case END_OBJECT: generator.writeEndObject(); break; case START_ARRAY: generator.writeStartArray(); break; case END_ARRAY: generator.writeEndArray(); break; case FIELD_NAME: generator.writeFieldName(parser.currentName()); break; case VALUE_STRING: if (parser.hasTextCharacters()) { generator.writeString(parser.textCharacters(), parser.textOffset(), parser.textLength()); } else { generator.writeString(parser.text()); } break; case VALUE_NUMBER: switch (parser.numberType()) { case INT: generator.writeNumber(parser.intValue()); break; case LONG: generator.writeNumber(parser.longValue()); break; case FLOAT: generator.writeNumber(parser.floatValue()); break; case DOUBLE: generator.writeNumber(parser.doubleValue()); break; } break; case VALUE_BOOLEAN: generator.writeBoolean(parser.booleanValue()); break; case VALUE_NULL: generator.writeNull(); break; case VALUE_EMBEDDED_OBJECT: generator.writeBinary(parser.binaryValue()); } }
public XContentGenerator generator() { return this.generator; }
@Override public XContentGenerator createGenerator(OutputStream os) throws IOException { return new CsvXContentGenerator(csvFactory.createGenerator(os, JsonEncoding.UTF8)); }
@Override public XContentGenerator createGenerator(Writer writer) throws IOException { return new CsvXContentGenerator(csvFactory.createGenerator(writer)); }
/** * Prepare {@link XContent} mock to be used for {@link XContentBuilder} test instance creation. * * @param xContentGeneratorMock to be returned from XContent mock * @return XContent mock instance * @throws IOException */ protected XContent preparexContentMock(XContentGenerator xContentGeneratorMock) throws IOException { XContent xContentMock = mock(XContent.class); when(xContentMock.createGenerator(Mockito.any(OutputStream.class))).thenReturn(xContentGeneratorMock); return xContentMock; }