{"record":{"id":"7a725936bda9b8c4","repo":"alibaba/nacos","slug":"agent-version-storage-descriptor-must-contain-one","errorCode":null,"errorMessage":"Agent Version storage descriptor must contain one JSON value","messagePattern":"Agent Version storage descriptor must contain one JSON value","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"ai/src/main/java/com/alibaba/nacos/ai/service/agent/storage/AgentVersionStorageDescriptorSerializer.java","lineNumber":235,"sourceCode":"    \n    private static void validateJsonInteger(Map<?, ?> root, String field) {\n        Object value = root.get(field);\n        if (!(value instanceof Byte || value instanceof Short || value instanceof Integer\n            || value instanceof Long)) {\n            throw new IllegalArgumentException(\n                \"Agent Version storage \" + field + \" must be an integer\");\n        }\n    }\n    \n    private static void validateSingleJsonValue(String json) {\n        try (JsonParser parser = STRICT_JSON_FACTORY.createParser(json)) {\n            if (parser.nextToken() == null) {\n                throw new IllegalArgumentException(\n                    \"Agent Version storage descriptor JSON must not be empty\");\n            }\n            parser.skipChildren();\n            if (parser.nextToken() != null) {\n                throw new IllegalArgumentException(\n                    \"Agent Version storage descriptor must contain one JSON value\");\n            }\n        } catch (IOException e) {\n            throw new IllegalArgumentException(\"Invalid Agent Version storage descriptor\", e);\n        }\n    }\n}\n","sourceCodeStart":217,"sourceCodeEnd":243,"githubUrl":"https://github.com/alibaba/nacos/blob/9b989acdf181d00898f2e8839257bb2b2a3cefe3/ai/src/main/java/com/alibaba/nacos/ai/service/agent/storage/AgentVersionStorageDescriptorSerializer.java#L217-L243","documentation":"Inside validateSingleJsonValue, after skipping the first JSON value the parser finds additional tokens. This means the input contains more than one top-level JSON value, for example two concatenated objects. The serializer enforces exactly one top-level value.","triggerScenarios":"AgentVersionStorageDescriptorSerializer.deserialize(validJson + \"{}\") or any input with trailing JSON after the first value.","commonSituations":"Two descriptors accidentally concatenated into one column; a writer bug that appends instead of overwriting the storage cell.","solutions":["Store exactly one JSON object in the column","Overwrite the column on update rather than appending","Re-publish the version to write a single clean descriptor"],"exampleFix":"// before (stored column)\n{\"provider\":\"nacos_config\",...}{\"provider\":\"nacos_config\",...}\n// after\n{\"provider\":\"nacos_config\",...}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    AgentVersionStorageDescriptorSerializer.deserialize(json);\n} catch (IllegalArgumentException e) {\n    throw new NacosException(NacosException.SERVER_ERROR, \"Storage descriptor has trailing JSON\", e);\n}","preventionTips":["Overwrite the storage column on update; never append","Ensure exactly one JSON object is stored per version row"],"tags":["java","nacos","ai-agent","validation","json","storage-descriptor"],"backgroundTag":null,"analyzedSha":"9b989acdf181d00898f2e8839257bb2b2a3cefe3","analyzedAt":"2026-08-14T07:17:31.569Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}