public static BytesReference readXContent(final Reader reader, final XContentType xContentType) throws IOException { BytesReference retVal; XContentParser parser = null; try { parser = XContentFactory.xContent(xContentType).createParser(NamedXContentRegistry.EMPTY, SearchGuardDeprecationHandler.INSTANCE, reader); parser.nextToken(); final XContentBuilder builder = XContentFactory.jsonBuilder(); builder.copyCurrentStructure(parser); retVal = BytesReference.bytes(builder); } finally { if (parser != null) { parser.close(); } } //validate Settings.builder().loadFromStream("dummy.json", new ByteArrayInputStream(BytesReference.toBytes(retVal)), true).build(); return retVal; }
final byte separator = bulkContentType.xContent().streamSeparator(); final ContentType requestContentType = createContentType(bulkContentType); DocWriteRequest.OpType opType = action.opType(); try (XContentBuilder metadata = XContentBuilder.builder(bulkContentType.xContent())) { metadata.startObject(); metadata.startObject(opType.getLowercase()); if (Strings.hasLength(action.index())) { metadata.field("_index", action.index()); metadata.endObject(); BytesRef metadataSource = BytesReference.bytes(metadata).toBytesRef(); content.write(metadataSource.bytes, metadataSource.offset, metadataSource.length); content.write(separator); try (XContentBuilder builder = XContentBuilder.builder(bulkContentType.xContent())) { builder.copyCurrentStructure(parser); source = BytesReference.bytes(builder).toBytesRef();
public static Request multiSearch(MultiSearchRequest multiSearchRequest) throws IOException { Request request = new Request(HttpMethod.POST.name(), "/_msearch"); Params params = new Params(request); params.putParam("typed_keys", "true"); if (multiSearchRequest.maxConcurrentSearchRequests() != MultiSearchRequest.MAX_CONCURRENT_SEARCH_REQUESTS_DEFAULT) { params.putParam("max_concurrent_searches", Integer.toString(multiSearchRequest.maxConcurrentSearchRequests())); } XContent xContent = REQUEST_BODY_CONTENT_TYPE.xContent(); byte[] source = MultiSearchRequest.writeMultiLineFormat(multiSearchRequest, xContent); request.setEntity(new ByteArrayEntity(source, createContentType(xContent.type()))); return request; }
public static String convertToJson(BytesReference bytes, boolean reformatJson, boolean prettyPrint, XContentType xContentType) throws IOException { Objects.requireNonNull(xContentType); if (xContentType == XContentType.JSON && !reformatJson) { return bytes.utf8ToString(); } // It is safe to use EMPTY here because this never uses namedObject try (InputStream stream = bytes.streamInput(); XContentParser parser = XContentFactory.xContent(xContentType).createParser(NamedXContentRegistry.EMPTY, DeprecationHandler.THROW_UNSUPPORTED_OPERATION, stream)) { parser.nextToken(); XContentBuilder builder = XContentFactory.jsonBuilder(); if (prettyPrint) { builder.prettyPrint(); } builder.copyCurrentStructure(parser); return Strings.toString(builder); } }
public static byte[] writeMultiLineFormat(MultiSearchRequest multiSearchRequest, XContent xContent) throws IOException { ByteArrayOutputStream output = new ByteArrayOutputStream(); for (SearchRequest request : multiSearchRequest.requests()) { try (XContentBuilder xContentBuilder = XContentBuilder.builder(xContent)) { writeSearchRequestParams(request, xContentBuilder); BytesReference.bytes(xContentBuilder).writeTo(output); } output.write(xContent.streamSeparator()); try (XContentBuilder xContentBuilder = XContentBuilder.builder(xContent)) { if (request.source() != null) { request.source().toXContent(xContentBuilder, ToXContent.EMPTY_PARAMS); } else { xContentBuilder.startObject(); xContentBuilder.endObject(); } BytesReference.bytes(xContentBuilder).writeTo(output); } output.write(xContent.streamSeparator()); } return output.toByteArray(); }
parser = XContentFactory.xContent(contentType).createParser(data); while (parser.nextToken() != null) {}; parser = XContentFactory.xContent(contentType).createParser(data); builder.field(fieldName); builder.copyCurrentStructure(parser); } catch (JsonParseException ex) { } finally { if (parser != null) { parser.close();
public BulkRequest add(BytesReference data, @Nullable String defaultIndex, @Nullable String defaultType, @Nullable String defaultRouting, @Nullable String[] defaultFields, @Nullable FetchSourceContext defaultFetchSourceContext, @Nullable String defaultPipeline, @Nullable Object payload, boolean allowExplicitIndex, XContentType xContentType) throws IOException { XContent xContent = xContentType.xContent(); int line = 0; int from = 0; int length = data.length(); byte marker = xContent.streamSeparator(); while (true) { int nextMarker = findNextMarker(marker, from, data, length); try (InputStream stream = data.slice(from, nextMarker - from).streamInput(); XContentParser parser = xContent .createParser(NamedXContentRegistry.EMPTY, LoggingDeprecationHandler.INSTANCE, stream)) { XContentParser.Token token = parser.nextToken(); if (token == null) { continue; String action = parser.currentName(); try (InputStream dataStream = sliceTrimmingCarriageReturn(data, from, nextMarker, xContentType).streamInput(); XContentParser sliceParser = xContent.createParser(NamedXContentRegistry.EMPTY, LoggingDeprecationHandler.INSTANCE, dataStream)) { updateRequest.fromXContent(sliceParser);
public static String convertToJson(BytesReference bytes, boolean reformatJson, boolean prettyPrint) throws IOException { if (bytes.hasArray()) { return convertToJson(bytes.array(), bytes.arrayOffset(), bytes.length(), reformatJson, prettyPrint); } XContentType xContentType = XContentFactory.xContentType(bytes); if (xContentType == XContentType.JSON && !reformatJson) { BytesArray bytesArray = bytes.toBytesArray(); return new String(bytesArray.array(), bytesArray.arrayOffset(), bytesArray.length(), Charsets.UTF_8); } try (XContentParser parser = XContentFactory.xContent(xContentType).createParser(bytes.streamInput())) { parser.nextToken(); XContentBuilder builder = XContentFactory.jsonBuilder(); if (prettyPrint) { builder.prettyPrint(); } builder.copyCurrentStructure(parser); return builder.string(); } }
/** * We can't send parseSearchRequest REST content that it doesn't support * so we will have to remove the content that is valid in addition to * what it supports from the content first. This is a temporary hack and * should get better when SearchRequest has full ObjectParser support * then we can delegate and stuff. */ private XContentParser extractRequestSpecificFields(RestRequest restRequest, Map<String, Consumer<Object>> bodyConsumers) throws IOException { if (restRequest.hasContentOrSourceParam() == false) { return null; // body is optional } try (XContentParser parser = restRequest.contentOrSourceParamParser(); XContentBuilder builder = XContentFactory.contentBuilder(parser.contentType())) { Map<String, Object> body = parser.map(); for (Map.Entry<String, Consumer<Object>> consumer : bodyConsumers.entrySet()) { Object value = body.remove(consumer.getKey()); if (value != null) { consumer.getValue().accept(value); } } return parser.contentType().xContent().createParser(parser.getXContentRegistry(), parser.getDeprecationHandler(), BytesReference.bytes(builder.map(body)).streamInput()); } } }
XContent xContent = XContentFactory.xContent(data); int from = 0; int length = data.length(); byte marker = xContent.streamSeparator(); while (true) { int nextMarker = findNextMarker(marker, from, data, length); try (XContentParser parser = xContent.createParser(data.slice(from, nextMarker - from))) { XContentParser.Token token = parser.nextToken(); if (token == null) { continue; token = parser.nextToken(); assert token == XContentParser.Token.FIELD_NAME; String action = parser.currentName();
public static String convertToJson(byte[] data, int offset, int length, boolean reformatJson, boolean prettyPrint) throws IOException { XContentType xContentType = XContentFactory.xContentType(data, offset, length); if (xContentType == XContentType.JSON && !reformatJson) { return new String(data, offset, length, Charsets.UTF_8); } try (XContentParser parser = XContentFactory.xContent(xContentType).createParser(data, offset, length)) { parser.nextToken(); XContentBuilder builder = XContentFactory.jsonBuilder(); if (prettyPrint) { builder.prettyPrint(); } builder.copyCurrentStructure(parser); return builder.string(); } }
private static List<String> parseableStringToList(String parsableString) { // fromXContent doesn't use named xcontent or deprecation. try (XContentParser xContentParser = XContentType.JSON.xContent() .createParser(NamedXContentRegistry.EMPTY, DeprecationHandler.THROW_UNSUPPORTED_OPERATION, parsableString)) { XContentParser.Token token = xContentParser.nextToken(); if (token != XContentParser.Token.START_ARRAY) { throw new IllegalArgumentException("expected START_ARRAY but got " + token); } ArrayList<String> list = new ArrayList<>(); while ((token = xContentParser.nextToken()) != XContentParser.Token.END_ARRAY) { if (token != XContentParser.Token.VALUE_STRING) { throw new IllegalArgumentException("expected VALUE_STRING but got " + token); } list.add(xContentParser.text()); } return list; } catch (IOException e) { throw new IllegalArgumentException("failed to parse array", e); } }
throw new IllegalStateException("Elasticsearch didn't return the [Content-Type] header, unable to parse response body"); XContentType xContentType = XContentType.fromMediaTypeOrFormat(entity.getContentType().getValue()); if (xContentType == null) { throw new IllegalStateException("Unsupported Content-Type: " + entity.getContentType().getValue()); XContentParser parser = XContentFactory.xContent(xContentType).createParser(NamedXContentRegistry.EMPTY, DeprecationHandler.THROW_UNSUPPORTED_OPERATION, stream)) { parser.nextToken(); XContentBuilder builder = XContentFactory.jsonBuilder(); builder.copyCurrentStructure(parser); return Strings.toString(builder);
boolean allowExplicitIndex) throws IOException { int from = 0; int length = data.length(); byte marker = xContent.streamSeparator(); while (true) { int nextMarker = findNextMarker(marker, from, data, length); try (InputStream stream = data.slice(from, nextMarker - from).streamInput(); XContentParser parser = xContent.createParser(registry, LoggingDeprecationHandler.INSTANCE, stream)) { Map<String, Object> source = parser.map(); Object expandWildcards = null; Object ignoreUnavailable = null; ignoreThrottled = value; } else { parser.getDeprecationHandler().deprecated( "key [{}] is not supported in the metadata section and will be rejected in 7.x", entry.getKey()); BytesReference bytes = data.slice(from, nextMarker - from); try (InputStream stream = bytes.streamInput(); XContentParser parser = xContent.createParser(registry, LoggingDeprecationHandler.INSTANCE, stream)) { consumer.accept(searchRequest, parser);
try (InputStream stream = content.streamInput(); XContentParser parser = xContentType.xContent() .createParser(NamedXContentRegistry.EMPTY, LoggingDeprecationHandler.INSTANCE, stream)) { Token token = parser.nextToken(); throw new ParsingException(parser.getTokenLocation(), "unexpected token [" + token + "], expected [{]"); token = parser.nextToken();
public XContentBuilder serialize(Event event) { XContentBuilder builder = null; try { XContentParser parser = XContentFactory .xContent(XContentType.JSON) .createParser(NamedXContentRegistry.EMPTY, DeprecationHandler.THROW_UNSUPPORTED_OPERATION, new String(event.getBody(), Charsets.UTF_8)); builder = jsonBuilder().copyCurrentStructure(parser); parser.close(); } catch (IOException e) { logger.error("Error in Converting the body to json field " + e.getMessage(), e); } return builder; }
private List<String> parseMsearchRequestBody(BytesReference data, boolean allowExplicitIndex) throws Exception { List<String> indexList = new ArrayList<>(); XContent xContent = XContentFactory.xContent(data); int from = 0; int length = data.length(); byte marker = xContent.streamSeparator(); while (true) { int nextMarker = findNextMarker(marker, from, data, length); try (XContentParser parser = xContent.createParser(data.slice(from, nextMarker - from))) { Map<String, Object> source = parser.map(); for (Map.Entry<String, Object> entry : source.entrySet()) { Object value = entry.getValue();
/** * Loads settings from the actual string content that represents them using {@link #fromXContent(XContentParser)} */ public Builder loadFromSource(String source, XContentType xContentType) { try (XContentParser parser = XContentFactory.xContent(xContentType) .createParser(NamedXContentRegistry.EMPTY, LoggingDeprecationHandler.INSTANCE, source)) { this.put(fromXContent(parser, true, true)); } catch (Exception e) { throw new SettingsException("Failed to load settings from [" + source + "]", e); } return this; }
@Override public IndexWarmersMetaData fromMap(Map<String, Object> map) throws IOException { // if it starts with the type, remove it if (map.size() == 1 && map.containsKey(TYPE)) { map = (Map<String, Object>) map.values().iterator().next(); } XContentBuilder builder = XContentFactory.smileBuilder().map(map); try (XContentParser parser = XContentFactory.xContent(XContentType.SMILE).createParser(builder.bytes())) { // move to START_OBJECT parser.nextToken(); return fromXContent(parser); } }
private static Script extractConditional(Map<String, Object> config) throws IOException { Object scriptSource = config.remove("if"); if (scriptSource != null) { try (XContentBuilder builder = XContentBuilder.builder(JsonXContent.jsonXContent) .map(normalizeScript(scriptSource)); InputStream stream = BytesReference.bytes(builder).streamInput(); XContentParser parser = XContentType.JSON.xContent().createParser(NamedXContentRegistry.EMPTY, LoggingDeprecationHandler.INSTANCE, stream)) { return Script.parse(parser); } } return null; }