From 56948f3770f9f27fbe40d2c4d7ca4ff9fb0c274c Mon Sep 17 00:00:00 2001 From: Radhakrishnan Pachyappan Date: Sun, 5 Jul 2026 12:55:04 +0530 Subject: [PATCH 1/3] Fix DerivedField serializing unsupported name field causing mapper_parsing_exception The _common___DerivedField schema in opensearch-openapi.yaml included a required name property. This caused DerivedField.java to serialize a name key into the JSON mapping body, but the OpenSearch API does not accept name inside a derived field definition and returns: mapper_parsing_exception: unknown parameter [name] on mapper In the API, the derived field's name is expressed as the map key in the parent derived object, not as a property inside the field definition. Remove name from the _common___DerivedField schema (both from properties and required) and update the generated DerivedField.java accordingly. The Java client no longer serializes name inside derived field definitions. Fixes #1937 Signed-off-by: Radhakrishnan Pachyappan --- .../opensearch/_types/DerivedField.java | 30 ------------------- java-codegen/opensearch-openapi.yaml | 3 -- 2 files changed, 33 deletions(-) diff --git a/java-client/src/generated/java/org/opensearch/client/opensearch/_types/DerivedField.java b/java-client/src/generated/java/org/opensearch/client/opensearch/_types/DerivedField.java index eb2e081559..41602d50a2 100644 --- a/java-client/src/generated/java/org/opensearch/client/opensearch/_types/DerivedField.java +++ b/java-client/src/generated/java/org/opensearch/client/opensearch/_types/DerivedField.java @@ -68,9 +68,6 @@ public class DerivedField implements PlainJsonSerializable, ToCopyableBuilder op) { op.add(Builder::format, JsonpDeserializer.stringDeserializer(), "format"); op.add(Builder::ignoreMalformed, JsonpDeserializer.booleanDeserializer(), "ignore_malformed"); - op.add(Builder::name, JsonpDeserializer.stringDeserializer(), "name"); op.add(Builder::prefilterField, JsonpDeserializer.stringDeserializer(), "prefilter_field"); op.add(Builder::properties, JsonpDeserializer.stringMapDeserializer(JsonData._DESERIALIZER), "properties"); op.add(Builder::script, Script._DESERIALIZER, "script"); @@ -385,7 +357,6 @@ public int hashCode() { int result = 17; result = 31 * result + Objects.hashCode(this.format); result = 31 * result + Objects.hashCode(this.ignoreMalformed); - result = 31 * result + this.name.hashCode(); result = 31 * result + Objects.hashCode(this.prefilterField); result = 31 * result + Objects.hashCode(this.properties); result = 31 * result + this.script.hashCode(); @@ -400,7 +371,6 @@ public boolean equals(Object o) { DerivedField other = (DerivedField) o; return Objects.equals(this.format, other.format) && Objects.equals(this.ignoreMalformed, other.ignoreMalformed) - && this.name.equals(other.name) && Objects.equals(this.prefilterField, other.prefilterField) && Objects.equals(this.properties, other.properties) && this.script.equals(other.script) diff --git a/java-codegen/opensearch-openapi.yaml b/java-codegen/opensearch-openapi.yaml index b4829f72a0..a0ef850985 100644 --- a/java-codegen/opensearch-openapi.yaml +++ b/java-codegen/opensearch-openapi.yaml @@ -38878,8 +38878,6 @@ components: _common___DerivedField: type: object properties: - name: - type: string type: type: string script: @@ -38893,7 +38891,6 @@ components: format: type: string required: - - name - script - type _common___DFIIndependenceMeasure: From d7f56bff64b71808781cc45315416767e45c02fb Mon Sep 17 00:00:00 2001 From: Radhakrishnan Pachyappan Date: Sun, 5 Jul 2026 15:39:13 +0530 Subject: [PATCH 2/3] Add CHANGELOG entry for #2036 Signed-off-by: Radhakrishnan Pachyappan --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f85eaecf78..34632eb4ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - Add document lifecycle guide and runnable sample ([#2017](https://github.com/opensearch-project/opensearch-java/pull/2017)) ### Fixed +- Fix `DerivedField` serializing unsupported `name` field causing `mapper_parsing_exception` ([#2036](https://github.com/opensearch-project/opensearch-java/pull/2036)) ## [Unreleased 3.x] ### Added From ed0201da9cd247dcf745966cb18001640a592f49 Mon Sep 17 00:00:00 2001 From: RadhaKrishnan Rajendran Date: Sun, 5 Jul 2026 20:36:12 +0530 Subject: [PATCH 3/3] revert: restore generated DerivedField.java to main state The fix belongs in the OpenSearch API specification, not in generated code. Submitted upstream: opensearch-project/opensearch-api-specification#1156 The java-codegen/opensearch-openapi.yaml change is kept here as a local workaround until the upstream spec fix is pulled in by the weekly code-generation workflow. Signed-off-by: RadhaKrishnan Rajendran Signed-off-by: Radhakrishnan Pachyappan --- .../opensearch/_types/DerivedField.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/java-client/src/generated/java/org/opensearch/client/opensearch/_types/DerivedField.java b/java-client/src/generated/java/org/opensearch/client/opensearch/_types/DerivedField.java index 41602d50a2..eb2e081559 100644 --- a/java-client/src/generated/java/org/opensearch/client/opensearch/_types/DerivedField.java +++ b/java-client/src/generated/java/org/opensearch/client/opensearch/_types/DerivedField.java @@ -68,6 +68,9 @@ public class DerivedField implements PlainJsonSerializable, ToCopyableBuilder op) { op.add(Builder::format, JsonpDeserializer.stringDeserializer(), "format"); op.add(Builder::ignoreMalformed, JsonpDeserializer.booleanDeserializer(), "ignore_malformed"); + op.add(Builder::name, JsonpDeserializer.stringDeserializer(), "name"); op.add(Builder::prefilterField, JsonpDeserializer.stringDeserializer(), "prefilter_field"); op.add(Builder::properties, JsonpDeserializer.stringMapDeserializer(JsonData._DESERIALIZER), "properties"); op.add(Builder::script, Script._DESERIALIZER, "script"); @@ -357,6 +385,7 @@ public int hashCode() { int result = 17; result = 31 * result + Objects.hashCode(this.format); result = 31 * result + Objects.hashCode(this.ignoreMalformed); + result = 31 * result + this.name.hashCode(); result = 31 * result + Objects.hashCode(this.prefilterField); result = 31 * result + Objects.hashCode(this.properties); result = 31 * result + this.script.hashCode(); @@ -371,6 +400,7 @@ public boolean equals(Object o) { DerivedField other = (DerivedField) o; return Objects.equals(this.format, other.format) && Objects.equals(this.ignoreMalformed, other.ignoreMalformed) + && this.name.equals(other.name) && Objects.equals(this.prefilterField, other.prefilterField) && Objects.equals(this.properties, other.properties) && this.script.equals(other.script)