Skip to content

BulkRequest with scripted noop upsert UpdateOperation fails with "missing required property" #403

Closed

Description

Java API client version

7.17.6

Java version

1.8.0_345

Elasticsearch Version

7.17.6

Problem description

A bulk request with an update operation set to do scripted upsert where the script chooses to set ctx.op = 'none' currently fails with co.elastic.clients.util.MissingRequiredPropertyException: Missing required property 'InlineGet.source'. The same request works fine with the deprecated RestHighLevelClient.

BulkResponse response = client.bulk(
        BulkRequest.of(bulkRequest -> bulkRequest
                .index("test-index")
                .operations(bulkOperation -> bulkOperation
                        .update(updateOperation -> updateOperation
                                .id(String.valueOf(1234))
                                .action(action -> action
                                        .scriptedUpsert(true)
                                        .upsert(ImmutableMap.of())
                                        .script(script -> script
                                                .inline(inlineScript -> inlineScript
                                                        .lang("painless")
                                                        .source("ctx.op = 'none';")
                                                )
                                        )
                                )
                        )
                )
        )
);
Error deserializing co.elastic.clients.elasticsearch.core.bulk.BulkResponseItem: co.elastic.clients.util.MissingRequiredPropertyException: Missing required property 'InlineGet.source' (JSON path: items[0].get) (line no=1, column no=229, offset=-1)
co.elastic.clients.json.JsonpMappingException: Error deserializing co.elastic.clients.elasticsearch.core.bulk.BulkResponseItem: co.elastic.clients.util.MissingRequiredPropertyException: Missing required property 'InlineGet.source' (JSON path: items[0].get) (line no=1, column no=229, offset=-1)
	at co.elastic.clients.json.JsonpMappingException.from0(JsonpMappingException.java:134)
	at co.elastic.clients.json.JsonpMappingException.from(JsonpMappingException.java:121)
	at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:206)
	at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:136)
	at co.elastic.clients.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:85)
	at co.elastic.clients.json.DelegatingDeserializer$SameType.deserialize(DelegatingDeserializer.java:48)
	at co.elastic.clients.json.JsonpDeserializerBase$ArrayDeserializer.deserialize(JsonpDeserializerBase.java:316)
	at co.elastic.clients.json.JsonpDeserializerBase$ArrayDeserializer.deserialize(JsonpDeserializerBase.java:280)
	at co.elastic.clients.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:75)
	at co.elastic.clients.json.ObjectDeserializer$FieldObjectDeserializer.deserialize(ObjectDeserializer.java:71)
	at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:180)
	at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:136)
	at co.elastic.clients.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:75)
	at co.elastic.clients.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:79)
	at co.elastic.clients.json.DelegatingDeserializer$SameType.deserialize(DelegatingDeserializer.java:43)
	at co.elastic.clients.transport.rest_client.RestClientTransport.decodeResponse(RestClientTransport.java:328)
	at co.elastic.clients.transport.rest_client.RestClientTransport.getHighLevelResponse(RestClientTransport.java:294)
	at co.elastic.clients.transport.rest_client.RestClientTransport.performRequest(RestClientTransport.java:147)
	at co.elastic.clients.elasticsearch.ElasticsearchClient.bulk(ElasticsearchClient.java:310)
	at test.FailureTest.example(FailureTest.java:35)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:727)
        ...
Caused by: co.elastic.clients.util.MissingRequiredPropertyException: Missing required property 'InlineGet.source'
	at co.elastic.clients.util.ApiTypeHelper.requireNonNull(ApiTypeHelper.java:76)
	at co.elastic.clients.elasticsearch._types.InlineGet.<init>(InlineGet.java:90)
	at co.elastic.clients.elasticsearch._types.InlineGet.<init>(InlineGet.java:58)
	at co.elastic.clients.elasticsearch._types.InlineGet$Builder.build(InlineGet.java:342)
	at co.elastic.clients.elasticsearch._types.InlineGet$Builder.build(InlineGet.java:214)
	at co.elastic.clients.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:80)
	at co.elastic.clients.json.ObjectDeserializer$FieldObjectDeserializer.deserialize(ObjectDeserializer.java:71)
	at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:180)
	... 75 more
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    Area: SpecificationRelated to the API spec used to generate client code

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions