Skip to content

Commit 2034299

Browse files
committed
lifecycle response fix
1 parent c1da668 commit 2034299

File tree

3 files changed

+54
-1
lines changed

3 files changed

+54
-1
lines changed

java-client/src/main/java/co/elastic/clients/json/JsonpUtils.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,15 @@ public static Map.Entry<String, JsonParser> lookAheadFieldValue(
245245
JsonObject object = parser.getObject();
246246
String result = object.getString(name, null);
247247

248+
if (result == null) {
249+
// checking if instead of a string it's a boolean
250+
try{
251+
result = String.valueOf(object.getBoolean(name));
252+
} catch (NullPointerException e) {
253+
// suppressed in favor of JsonpMappingException below
254+
}
255+
}
256+
248257
if (result == null) {
249258
result = defaultValue;
250259
}

java-client/src/main/java/co/elastic/clients/json/jackson/JacksonJsonpParser.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,23 @@ public Map.Entry<String, JsonParser> lookAheadFieldValue(String name, String def
336336
if (fieldName.equals(name)) {
337337
// Found
338338
tb.copyCurrentEvent(parser);
339-
expectNextEvent(JsonToken.VALUE_STRING);
339+
try {
340+
expectNextEvent(JsonToken.VALUE_STRING);
341+
}
342+
catch (UnexpectedJsonEventException e) {
343+
// checking if instead of a string it's a boolean
344+
String details = e.getMessage();
345+
if (details.contains("VALUE_TRUE")){
346+
expectEvent(JsonToken.VALUE_TRUE);
347+
}
348+
else if (details.contains("VALUE_FALSE")){
349+
expectEvent(JsonToken.VALUE_FALSE);
350+
}
351+
// not a boolean either, can throw exception
352+
else{
353+
throw e;
354+
}
355+
}
340356
tb.copyCurrentEvent(parser);
341357

342358
return new AbstractMap.SimpleImmutableEntry<>(

java-client/src/test/java/co/elastic/clients/elasticsearch/model/VariantsTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,15 @@
2626
import co.elastic.clients.elasticsearch._types.query_dsl.Query;
2727
import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
2828
import co.elastic.clients.elasticsearch.core.SearchRequest;
29+
import co.elastic.clients.elasticsearch.ilm.ExplainLifecycleResponse;
30+
import co.elastic.clients.elasticsearch.ilm.explain_lifecycle.LifecycleExplainManaged;
31+
import co.elastic.clients.elasticsearch.ilm.explain_lifecycle.LifecycleExplainUnmanaged;
2932
import co.elastic.clients.elasticsearch.indices.GetMappingResponse;
3033
import co.elastic.clients.json.JsonData;
3134
import co.elastic.clients.testkit.ModelTestCase;
3235
import org.junit.jupiter.api.Test;
3336

37+
import java.io.StringReader;
3438
import java.util.function.Consumer;
3539

3640
public class VariantsTest extends ModelTestCase {
@@ -281,4 +285,28 @@ public void testContainerWithOptionalVariants() {
281285
assertEquals(2.0, fsq2.functionScore().functions().get(0).linear().untyped().placement().decay(), 0.001);
282286
}
283287
}
288+
289+
@Test
290+
public void testBooleanVariantTag() {
291+
292+
String jsonT = "{\"indices\":{\"test\":{\"index\":\"test\",\"managed\":true,\"policy\":\"my_policy\",\"index_creation_date_millis\":1736785235558,\"time_since_index_creation\":\"27.75d\",\"lifecycle_date_millis\":1736785235558,\"age\":\"27.75d\",\"phase\":\"warm\",\"phase_time_millis\":1739183166898,\"action\":\"migrate\",\"action_time_millis\":1739183166898,\"step\":\"check-migration\",\"step_time_millis\":1739183166898,\"step_info\":{\"message\":\"Waiting for all shard copies to be active\",\"shards_left_to_allocate\":-1,\"all_shards_active\":false,\"number_of_replicas\":1},\"phase_execution\":{\"policy\":\"my_policy\",\"phase_definition\":{\"min_age\":\"10d\",\"actions\":{\"forcemerge\":{\"max_num_segments\":1}}},\"version\":1,\"modified_date_in_millis\":1739183005443}}}}";
293+
294+
ExplainLifecycleResponse respT = fromJson(jsonT,ExplainLifecycleResponse.class);
295+
296+
// if managed is "true" then the variant class must be Managed
297+
assertTrue(respT.indices().get("test").isTrue());
298+
assertTrue(respT.indices().get("test")._get().getClass().equals(LifecycleExplainManaged.class));
299+
300+
String jsonF = "{\"indices\":{\"test\":{\"index\":\"test\",\"managed\":false}}}";
301+
302+
ExplainLifecycleResponse respF = fromJson(jsonF,ExplainLifecycleResponse.class);
303+
304+
// if managed is "false" then the variant class must be Unmanaged
305+
assertTrue(respF.indices().get("test").isFalse());
306+
assertTrue(respF.indices().get("test")._get().getClass().equals(LifecycleExplainUnmanaged.class));
307+
308+
// roundtrip isn't the same
309+
// ExplainLifecycleResponse respT2 = checkJsonRoundtrip(respT, jsonT);
310+
// ExplainLifecycleResponse respF2 = checkJsonRoundtrip(respF, jsonF);
311+
}
284312
}

0 commit comments

Comments
 (0)