Skip to content

Elasticsearch Java API Client unable to put otherwise valid index template due to falsely-required fields #494

Closed
@tomas0svk

Description

@tomas0svk

Elasticsearch Version

8.5.1

Installed Plugins

No response

Java Version

OpenJDK 64-Bit Server VM 18.9 build 11.0.16+8

OS Version

5.15.0-0.bpo.3-amd64 elastic/elasticsearch#1 SMP Debian 5.15.15-2~bpo11+1 (2022-02-03) x86_64 GNU/Linux

Problem Description

I am trying to put an index template definition using Java API client's PutIndexTemplateRequest.Builder.withJson(). Template itself (see below) seems correct, if I use kibana's devtools, response says "acknowledged": true.
However API client fails during request serialization on Missing required property 'PatternTokenizer.flags' or Missing required property 'PatternTokenizer.group', despite groups is optional parameter with default -1.

If I dive into the client code, PatternTokenizer,java requires these two parameters to be set
this.flags = ApiTypeHelper.requireNonNull(builder.flags, this, "flags"); this.group = ApiTypeHelper.requireNonNull(builder.group, this, "group"); this.pattern = ApiTypeHelper.requireNonNull(builder.pattern, this, "pattern");

Steps to Reproduce

Code:
String theTemplateName = FilenameUtils.getBaseName(aTemplateUrl.getFile()); String theTemplateName = FilenameUtils.getBaseName(aTemplateUrl.getFile()); PutIndexTemplateResponse theResponse = elasticClient .indices() .putIndexTemplate(new PutIndexTemplateRequest.Builder().name(theTemplateName).withJson(theTemplateJson).build());

Pattern:
{ "index_patterns": [ "e-logs-*" ], "template": { "settings": { "analysis": { "tokenizer": { "stacktrace_tokenizer": { "type": "pattern", "pattern": "[\\s:\\[\\](),]+" }, "package_tokenizer": { "type": "pattern", "pattern": "[.]" } }, "analyzer": { "stacktrace_analyzer": { "tokenizer": "stacktrace_tokenizer" }, "package_analyzer": { "tokenizer": "package_tokenizer" } } } }, "mappings": { "dynamic_templates": [ { "string_fields": { "match": "*", "match_mapping_type": "string", "mapping": { "type": "keyword" } } } ], "properties": { "time": { "type": "date", "format": "epoch_millis" }, "properties": { "type": "object", "properties": { "emans-client-time": { "type": "date", "format": "epoch_millis" }, "bundle-id": { "type": "short" }, "camel-routeId": { "type": "text", "analyzer": "package_analyzer" }, "emans-client-commit": { "type": "keyword" } } }, "message": { "type": "text" }, "thread": { "type": "text" }, "logger": { "type": "text", "analyzer": "package_analyzer" }, "exception": { "type": "text", "analyzer": "stacktrace_analyzer" } } } }, "priority": 1, "composed_of": [ "com-e-common" ] }

Logs (if relevant)

Caused by: co.elastic.clients.util.MissingRequiredPropertyException: Missing required property 'PatternTokenizer.group'
at co.elastic.clients.util.ApiTypeHelper.requireNonNull(ApiTypeHelper.java:76)
at co.elastic.clients.elasticsearch._types.analysis.PatternTokenizer.(PatternTokenizer.java:62)
at co.elastic.clients.elasticsearch._types.analysis.PatternTokenizer.(PatternTokenizer.java:49)
at co.elastic.clients.elasticsearch._types.analysis.PatternTokenizer$Builder.build(PatternTokenizer.java:168)
at co.elastic.clients.elasticsearch._types.analysis.PatternTokenizer$Builder.build(PatternTokenizer.java:121)
at co.elastic.clients.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:80)
at co.elastic.clients.json.DelegatingDeserializer$SameType.deserialize(DelegatingDeserializer.java:43)
at co.elastic.clients.json.ObjectDeserializer$FieldObjectDeserializer.deserialize(ObjectDeserializer.java:78)
at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:209)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions