{"record":{"id":"20adeadfa5ce800f","repo":"elastic/elasticsearch","slug":"deprecated-fields-not-supported-here-but-got-rem","errorCode":null,"errorMessage":"deprecated fields not supported here but got [{removedName}] which has been deprecated entirely","messagePattern":"deprecated fields not supported here but got \\[(.+?)\\] which has been deprecated entirely","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"libs/x-content/src/main/java/org/elasticsearch/xcontent/DeprecationHandler.java","lineNumber":81,"sourceCode":"                    \"deprecated fields not supported here but got [\" + oldName + \"] which has been replaced with [\" + currentName + \"]\"\n                );\n            }\n        }\n\n        @Override\n        public void logRemovedField(String parserName, Supplier<XContentLocation> location, String removedName) {\n            if (parserName != null) {\n                throw new UnsupportedOperationException(\n                    \"deprecated fields not supported in [\"\n                        + parserName\n                        + \"] but got [\"\n                        + removedName\n                        + \"] at [\"\n                        + location.get()\n                        + \"] which has been deprecated entirely\"\n                );\n            } else {\n                throw new UnsupportedOperationException(\n                    \"deprecated fields not supported here but got [\" + removedName + \"] which has been deprecated entirely\"\n                );\n            }\n        }\n    };\n\n    /**\n     * Ignores all deprecations\n     */\n    DeprecationHandler IGNORE_DEPRECATIONS = new DeprecationHandler() {\n        @Override\n        public void logRenamedField(String parserName, Supplier<XContentLocation> location, String oldName, String currentName) {\n\n        }\n\n        @Override\n        public void logReplacedField(String parserName, Supplier<XContentLocation> location, String oldName, String replacedName) {\n","sourceCodeStart":63,"sourceCodeEnd":99,"githubUrl":"https://github.com/elastic/elasticsearch/blob/db6a809a667c081ca1dc7500389d26975573215f/libs/x-content/src/main/java/org/elasticsearch/xcontent/DeprecationHandler.java#L63-L99","documentation":"logRemovedField, parserName-null variant: a fully-removed deprecated field is used under THROW_UNSUPPORTED_OPERATION on an unnamed parser, so the message omits parser context. Identical semantics to 871 (removed, no replacement) but for parsers without a parserName.","triggerScenarios":"Unnamed strict parser rejecting a removed deprecated field. Encountered in test/internal parsers created without a name.","commonSituations":"Ad-hoc unnamed parsers enforcing strict deprecation. Shared utilities that did not set parserName.","solutions":["Delete the removed field from the input.","Provide a parserName for clearer errors and/or use a non-throwing deprecation handler if the field must be tolerated temporarily."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// set parserName and drop removed deprecated fields before strict parsing\nSet<String> removed = Set.of(\"include_type_name\");\nremoved.forEach(body::remove);","typeGuard":null,"tryCatchPattern":"try {\n    p.parse(parser, ctx);\n} catch (UnsupportedOperationException e) {\n    if (e.getMessage().startsWith(\"deprecated fields not supported here\") && e.getMessage().contains(\"deprecated entirely\")) {\n        // remove the field entirely and retry\n    }\n}","preventionTips":["Always provide parserName to get the more informative variant.","Remove fully-deprecated fields from input before strict parsing.","Maintain a per-version removed-field blocklist at the controller."],"tags":["xcontent","deprecation","strict","removed-field"],"backgroundTag":null,"analyzedSha":"db6a809a667c081ca1dc7500389d26975573215f","analyzedAt":"2026-08-12T01:39:14.192Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}