From 0fc08e8e43f6aa1fdf6b042635e058480cdf0526 Mon Sep 17 00:00:00 2001 From: Sylvain Wallez Date: Tue, 21 Jun 2022 10:20:55 +0200 Subject: [PATCH 1/2] Prepend class name to toString() result --- .../co/elastic/clients/json/JsonpUtils.java | 47 ++++++++++++------- .../elasticsearch/json/JsonpUtilsTest.java | 5 +- .../elasticsearch/model/EndpointTest.java | 6 +-- .../spec_issues/SpecIssuesTest.java | 14 ++++++ 4 files changed, 51 insertions(+), 21 deletions(-) diff --git a/java-client/src/main/java/co/elastic/clients/json/JsonpUtils.java b/java-client/src/main/java/co/elastic/clients/json/JsonpUtils.java index 646cb6679..be674555c 100644 --- a/java-client/src/main/java/co/elastic/clients/json/JsonpUtils.java +++ b/java-client/src/main/java/co/elastic/clients/json/JsonpUtils.java @@ -242,22 +242,39 @@ public static void serializeIntOrNull(JsonGenerator generator, int value, int de } /** - * Renders a JsonpSerializable as a string by serializing it to JSON. Any object of an application-specific - * class in the object graph is rendered using that object's toString() representation as a JSON string value. + * Renders a JsonpSerializable as a string by serializing it to JSON, prefixed by the class name. Any object of an + * application-specific class in the object graph is rendered using that object's toString() representation as a JSON + * string value. *

- * The size of the string is limited to {@link #MAX_TO_STRING_LENGTH}. + * The size of the string is limited to {@link #maxToStringLength()}. * - * @see #MAX_TO_STRING_LENGTH + * @see #maxToStringLength() */ public static String toString(JsonpSerializable value) { - return toString(value, ToStringMapper.INSTANCE, new StringBuilder()).toString(); + StringBuilder sb = new StringBuilder(value.getClass().getSimpleName()).append(": "); + return toString(value, ToStringMapper.INSTANCE, sb).toString(); } /** - * Maximum length of the toString representation of a JsonpSerializable. - *

- * The default is 10k characters, and can be changed globally by changing the value of this field. + * Set the maximum length of the JSON representation of a JsonpSerializable in the result of its toString() + * method. The default is 10k characters. + */ + public static void maxToStringLength(int length) { + MAX_TO_STRING_LENGTH = length; + } + + /** + * Get the maximum length of the JSON representation of a JsonpSerializable in the result of its toString() + * method. The default is 10k characters. */ + public static int maxToStringLength() { + return MAX_TO_STRING_LENGTH; + } + + /** + * @deprecated use {@link #maxToStringLength(int)} + */ + @Deprecated public static int MAX_TO_STRING_LENGTH = 10000; private static class ToStringTooLongException extends RuntimeException { @@ -266,18 +283,18 @@ private static class ToStringTooLongException extends RuntimeException { /** * Renders a JsonpSerializable as a string in a destination StringBuilderby serializing it to JSON. *

- * The size of the string is limited to {@link #MAX_TO_STRING_LENGTH}. + * The size of the string is limited to {@link #maxToStringLength()}. * * @return the dest parameter, for chaining. * @see #toString(JsonpSerializable) - * @see #MAX_TO_STRING_LENGTH + * @see #maxToStringLength() */ public static StringBuilder toString(JsonpSerializable value, JsonpMapper mapper, StringBuilder dest) { Writer writer = new Writer() { int length = 0; @Override public void write(char[] cbuf, int off, int len) { - int max = MAX_TO_STRING_LENGTH; + int max = maxToStringLength(); length += len; if (length > max) { dest.append(cbuf, off, len - (length - max)); @@ -297,10 +314,8 @@ public void close() { } }; - JsonGenerator generator = mapper.jsonProvider().createGenerator(writer); - try { + try(JsonGenerator generator = mapper.jsonProvider().createGenerator(writer)) { value.serialize(generator, mapper); - generator.close(); } catch (ToStringTooLongException e) { // Ignore } @@ -312,11 +327,11 @@ public void close() { * Any object of an application-specific class in the object graph is rendered using that object's toString() * representation as a JSON string value. *

- * The size of the string is limited to {@link #MAX_TO_STRING_LENGTH}. + * The size of the string is limited to {@link #maxToStringLength()}. * * @return the dest parameter, for chaining. * @see #toString(JsonpSerializable) - * @see #MAX_TO_STRING_LENGTH + * @see #maxToStringLength() */ public static StringBuilder toString(JsonpSerializable value, StringBuilder dest) { return toString(value, ToStringMapper.INSTANCE, dest); diff --git a/java-client/src/test/java/co/elastic/clients/elasticsearch/json/JsonpUtilsTest.java b/java-client/src/test/java/co/elastic/clients/elasticsearch/json/JsonpUtilsTest.java index 851dcc4fc..a5dbd4826 100644 --- a/java-client/src/test/java/co/elastic/clients/elasticsearch/json/JsonpUtilsTest.java +++ b/java-client/src/test/java/co/elastic/clients/elasticsearch/json/JsonpUtilsTest.java @@ -73,7 +73,7 @@ public void testObjectToString() { .index("idx") .id("id1") ); - assertEquals("{\"_index\":\"idx\",\"_id\":\"id1\",\"_source\":\"Some user data\"}", hit.toString()); + assertEquals("Hit: {\"_index\":\"idx\",\"_id\":\"id1\",\"_source\":\"Some user data\"}", hit.toString()); } private static class SomeUserData { @@ -102,7 +102,8 @@ public void testLargeObjectToString() { String toString = hit.toString(); - assertEquals(10003, toString.length()); + assertEquals(10000 + "Hit: ".length() + "...".length(), toString.length()); + assertTrue(toString.startsWith("Hit: ")); assertTrue(toString.endsWith("...")); } diff --git a/java-client/src/test/java/co/elastic/clients/elasticsearch/model/EndpointTest.java b/java-client/src/test/java/co/elastic/clients/elasticsearch/model/EndpointTest.java index 1ccf7f5c8..1358d7a03 100644 --- a/java-client/src/test/java/co/elastic/clients/elasticsearch/model/EndpointTest.java +++ b/java-client/src/test/java/co/elastic/clients/elasticsearch/model/EndpointTest.java @@ -78,16 +78,16 @@ public void testArrayQueryParameter() { @Test public void testRequestToString() { // Simple path, no parameters, no body - assertEquals("GET /", InfoRequest._INSTANCE.toString()); + assertEquals("InfoRequest: GET /", InfoRequest._INSTANCE.toString()); // Complex path, parameters, no body assertEquals( - "HEAD /idx/_doc/id1?preference=foo&refresh=true", + "ExistsRequest: HEAD /idx/_doc/id1?preference=foo&refresh=true", ExistsRequest.of(b -> b.index("idx").id("id1").preference("foo").refresh(true)).toString() ); assertEquals( - "POST /idx/_search?typed_keys=true {\"size\":10}", + "SearchRequest: POST /idx/_search?typed_keys=true {\"size\":10}", SearchRequest.of(s -> s.index("idx").size(10)).toString() ); } diff --git a/java-client/src/test/java/co/elastic/clients/elasticsearch/spec_issues/SpecIssuesTest.java b/java-client/src/test/java/co/elastic/clients/elasticsearch/spec_issues/SpecIssuesTest.java index 5662f8c2b..beb5b96c5 100644 --- a/java-client/src/test/java/co/elastic/clients/elasticsearch/spec_issues/SpecIssuesTest.java +++ b/java-client/src/test/java/co/elastic/clients/elasticsearch/spec_issues/SpecIssuesTest.java @@ -19,11 +19,14 @@ package co.elastic.clients.elasticsearch.spec_issues; +import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch.ElasticsearchTestServer; import co.elastic.clients.elasticsearch._types.ErrorResponse; import co.elastic.clients.elasticsearch.cluster.ClusterStatsResponse; import co.elastic.clients.elasticsearch.core.SearchRequest; import co.elastic.clients.elasticsearch.core.SearchResponse; +import co.elastic.clients.elasticsearch.indices.GetFieldMappingRequest; +import co.elastic.clients.elasticsearch.indices.GetFieldMappingResponse; import co.elastic.clients.elasticsearch.model.ModelTestCase; import co.elastic.clients.json.JsonData; import co.elastic.clients.json.JsonpDeserializer; @@ -39,6 +42,17 @@ */ public class SpecIssuesTest extends ModelTestCase { + @Test + public void i066_multiFieldMapping() throws Exception { + ElasticsearchClient client = ElasticsearchTestServer.global().client(); + + GetFieldMappingRequest gfmRequest = new GetFieldMappingRequest.Builder() + .index("*") + .fields("*") + .build(); + GetFieldMappingResponse gfmResponse = client.indices().getFieldMapping(gfmRequest); + } + @Test public void i0107_rangeBucketKey() { // https://github.com/elastic/elasticsearch-java/issues/107 From 0100ca80d44f87007166448577ed4a8d2285b04c Mon Sep 17 00:00:00 2001 From: Sylvain Wallez Date: Tue, 21 Jun 2022 10:21:11 +0200 Subject: [PATCH 2/2] Implement toString() in union types --- .../co/elastic/clients/elasticsearch/_types/GeoBounds.java | 6 ++++++ .../clients/elasticsearch/_types/GeoHashPrecision.java | 6 ++++++ .../elastic/clients/elasticsearch/_types/GeoLocation.java | 6 ++++++ .../elastic/clients/elasticsearch/_types/RequestBase.java | 2 +- .../co/elastic/clients/elasticsearch/_types/Script.java | 6 ++++++ .../co/elastic/clients/elasticsearch/_types/Slices.java | 6 ++++++ .../elastic/clients/elasticsearch/_types/SortOptions.java | 5 +++++ .../java/co/elastic/clients/elasticsearch/_types/Time.java | 6 ++++++ .../co/elastic/clients/elasticsearch/_types/Transform.java | 6 ++++++ .../clients/elasticsearch/_types/WaitForActiveShards.java | 6 ++++++ .../elasticsearch/_types/aggregations/Aggregate.java | 6 ++++++ .../elasticsearch/_types/aggregations/Aggregation.java | 6 ++++++ .../clients/elasticsearch/_types/aggregations/Buckets.java | 5 +++++ .../elasticsearch/_types/aggregations/BucketsPath.java | 6 ++++++ .../_types/aggregations/CategorizeTextAnalyzer.java | 6 ++++++ .../elasticsearch/_types/aggregations/FieldDateMath.java | 6 ++++++ .../elasticsearch/_types/aggregations/InferenceConfig.java | 6 ++++++ .../_types/aggregations/MovingAverageAggregation.java | 6 ++++++ .../elasticsearch/_types/aggregations/Percentiles.java | 6 ++++++ .../elasticsearch/_types/aggregations/TermsExclude.java | 6 ++++++ .../elasticsearch/_types/aggregations/TermsInclude.java | 6 ++++++ .../clients/elasticsearch/_types/analysis/Analyzer.java | 6 ++++++ .../clients/elasticsearch/_types/analysis/CharFilter.java | 6 ++++++ .../elasticsearch/_types/analysis/CharFilterDefinition.java | 6 ++++++ .../clients/elasticsearch/_types/analysis/Normalizer.java | 6 ++++++ .../clients/elasticsearch/_types/analysis/TokenFilter.java | 6 ++++++ .../_types/analysis/TokenFilterDefinition.java | 6 ++++++ .../clients/elasticsearch/_types/analysis/Tokenizer.java | 6 ++++++ .../elasticsearch/_types/analysis/TokenizerDefinition.java | 6 ++++++ .../clients/elasticsearch/_types/mapping/Property.java | 6 ++++++ .../elasticsearch/_types/query_dsl/FunctionScore.java | 6 ++++++ .../clients/elasticsearch/_types/query_dsl/Intervals.java | 6 ++++++ .../elasticsearch/_types/query_dsl/IntervalsFilter.java | 6 ++++++ .../elasticsearch/_types/query_dsl/IntervalsQuery.java | 6 ++++++ .../clients/elasticsearch/_types/query_dsl/Like.java | 6 ++++++ .../clients/elasticsearch/_types/query_dsl/PinnedQuery.java | 6 ++++++ .../clients/elasticsearch/_types/query_dsl/Query.java | 6 ++++++ .../_types/query_dsl/SimpleQueryStringFlags.java | 6 ++++++ .../clients/elasticsearch/_types/query_dsl/SpanQuery.java | 6 ++++++ .../elasticsearch/_types/query_dsl/TermsQueryField.java | 6 ++++++ .../cluster/remote_info/ClusterRemoteInfo.java | 6 ++++++ .../clients/elasticsearch/core/bulk/BulkOperation.java | 6 ++++++ .../elasticsearch/core/mget/MultiGetResponseItem.java | 6 ++++++ .../elasticsearch/core/msearch/MultiSearchResponseItem.java | 6 ++++++ .../elastic/clients/elasticsearch/core/search/Context.java | 6 ++++++ .../clients/elasticsearch/core/search/FieldSuggester.java | 6 ++++++ .../clients/elasticsearch/core/search/SmoothingModel.java | 6 ++++++ .../clients/elasticsearch/core/search/SourceConfig.java | 6 ++++++ .../elasticsearch/core/search/SourceConfigParam.java | 6 ++++++ .../clients/elasticsearch/core/search/Suggestion.java | 6 ++++++ .../clients/elasticsearch/core/search/TrackHits.java | 6 ++++++ .../ilm/explain_lifecycle/LifecycleExplain.java | 6 ++++++ .../elasticsearch/indices/modify_data_stream/Action.java | 6 ++++++ .../elasticsearch/indices/update_aliases/Action.java | 6 ++++++ .../clients/elasticsearch/ingest/InferenceConfig.java | 6 ++++++ .../co/elastic/clients/elasticsearch/ingest/Processor.java | 6 ++++++ .../clients/elasticsearch/ml/CategorizationAnalyzer.java | 6 ++++++ .../elastic/clients/elasticsearch/ml/DataframeAnalysis.java | 6 ++++++ .../elasticsearch/ml/DataframeAnalysisFeatureProcessor.java | 6 ++++++ .../clients/elasticsearch/ml/DataframeAnalyticsStats.java | 6 ++++++ .../clients/elasticsearch/ml/DataframeEvaluation.java | 6 ++++++ .../clients/elasticsearch/ml/InferenceConfigCreate.java | 6 ++++++ .../clients/elasticsearch/ml/InferenceConfigUpdate.java | 6 ++++++ .../clients/elasticsearch/ml/TokenizationConfig.java | 6 ++++++ .../elasticsearch/ml/put_trained_model/Preprocessor.java | 6 ++++++ .../clients/elasticsearch/nodes/NodeReloadResult.java | 6 ++++++ .../elastic/clients/elasticsearch/security/FieldRule.java | 6 ++++++ .../clients/elasticsearch/security/RoleMappingRule.java | 6 ++++++ .../co/elastic/clients/elasticsearch/tasks/TaskInfos.java | 6 ++++++ .../clients/elasticsearch/transform/PivotGroupBy.java | 6 ++++++ .../clients/elasticsearch/transform/RetentionPolicy.java | 6 ++++++ .../co/elastic/clients/elasticsearch/transform/Sync.java | 6 ++++++ .../co/elastic/clients/elasticsearch/watcher/Condition.java | 6 ++++++ .../clients/elasticsearch/watcher/EmailAttachment.java | 6 ++++++ .../co/elastic/clients/elasticsearch/watcher/Input.java | 6 ++++++ .../co/elastic/clients/elasticsearch/watcher/Schedule.java | 6 ++++++ .../co/elastic/clients/elasticsearch/watcher/TimeOfDay.java | 6 ++++++ .../co/elastic/clients/elasticsearch/watcher/Trigger.java | 6 ++++++ .../elastic/clients/elasticsearch/watcher/TriggerEvent.java | 6 ++++++ 79 files changed, 467 insertions(+), 1 deletion(-) diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/GeoBounds.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/GeoBounds.java index b935dfffd..552e336c6 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/GeoBounds.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/GeoBounds.java @@ -27,6 +27,7 @@ import co.elastic.clients.json.JsonpDeserializer; import co.elastic.clients.json.JsonpMapper; import co.elastic.clients.json.JsonpSerializable; +import co.elastic.clients.json.JsonpUtils; import co.elastic.clients.json.ObjectDeserializer; import co.elastic.clients.json.UnionDeserializer; import co.elastic.clients.util.ApiTypeHelper; @@ -167,6 +168,11 @@ public void serialize(JsonGenerator generator, JsonpMapper mapper) { } + @Override + public String toString() { + return JsonpUtils.toString(this); + } + public static class Builder extends ObjectBuilderBase implements ObjectBuilder { private Kind _kind; private Object _value; diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/GeoHashPrecision.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/GeoHashPrecision.java index 6c4cba37c..de2957117 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/GeoHashPrecision.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/GeoHashPrecision.java @@ -27,6 +27,7 @@ import co.elastic.clients.json.JsonpDeserializer; import co.elastic.clients.json.JsonpMapper; import co.elastic.clients.json.JsonpSerializable; +import co.elastic.clients.json.JsonpUtils; import co.elastic.clients.json.ObjectDeserializer; import co.elastic.clients.json.UnionDeserializer; import co.elastic.clients.util.ApiTypeHelper; @@ -153,6 +154,11 @@ public void serialize(JsonGenerator generator, JsonpMapper mapper) { } + @Override + public String toString() { + return JsonpUtils.toString(this); + } + public static class Builder extends ObjectBuilderBase implements ObjectBuilder { private Kind _kind; private Object _value; diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/GeoLocation.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/GeoLocation.java index 8e293753e..1022ff213 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/GeoLocation.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/GeoLocation.java @@ -27,6 +27,7 @@ import co.elastic.clients.json.JsonpDeserializer; import co.elastic.clients.json.JsonpMapper; import co.elastic.clients.json.JsonpSerializable; +import co.elastic.clients.json.JsonpUtils; import co.elastic.clients.json.ObjectDeserializer; import co.elastic.clients.json.UnionDeserializer; import co.elastic.clients.util.ApiTypeHelper; @@ -188,6 +189,11 @@ public void serialize(JsonGenerator generator, JsonpMapper mapper) { } + @Override + public String toString() { + return JsonpUtils.toString(this); + } + public static class Builder extends ObjectBuilderBase implements ObjectBuilder { private Kind _kind; private Object _value; diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/RequestBase.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/RequestBase.java index ff17f62a4..e32f22b1e 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/RequestBase.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/RequestBase.java @@ -53,7 +53,7 @@ public RequestBase() { @Override public String toString() { - StringBuilder sb = new StringBuilder(); + StringBuilder sb = new StringBuilder(this.getClass().getSimpleName()).append(": "); try { @SuppressWarnings("unchecked") diff --git a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/Script.java b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/Script.java index 9edd83199..1f2130c06 100644 --- a/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/Script.java +++ b/java-client/src/main/java/co/elastic/clients/elasticsearch/_types/Script.java @@ -27,6 +27,7 @@ import co.elastic.clients.json.JsonpDeserializer; import co.elastic.clients.json.JsonpMapper; import co.elastic.clients.json.JsonpSerializable; +import co.elastic.clients.json.JsonpUtils; import co.elastic.clients.json.ObjectDeserializer; import co.elastic.clients.json.UnionDeserializer; import co.elastic.clients.util.ApiTypeHelper; @@ -125,6 +126,11 @@ public void serialize(JsonGenerator generator, JsonpMapper mapper) { } + @Override + public String toString() { + return JsonpUtils.toString(this); + } + public static class Builder extends ObjectBuilderBase implements ObjectBuilder