{"record":{"id":"4e9744c55fe65d36","repo":"eclipse-vertx/vert.x","slug":"failed-to-decode","errorCode":null,"errorMessage":"Failed to decode:","messagePattern":"Failed to decode:","errorType":"exception","errorClass":"DecodeException","httpStatus":null,"severity":"error","filePath":"vertx-core/src/main/java/io/vertx/core/json/jackson/JacksonCodec.java","lineNumber":202,"sourceCode":"    try {\n      JsonGenerator generator = createGenerator(out, false);\n      generator.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);\n      generator.disable(JsonGenerator.Feature.FLUSH_PASSED_TO_STREAM);\n      encodeJson(object, generator);\n      generator.close();\n    } catch (IOException e) {\n      throw new EncodeException(e.getMessage(), e);\n    }\n  }\n\n  @Override\n  public <T> T fromReader(Reader reader, Class<T> clazz) throws DecodeException {\n    try {\n      JsonParser parser = factory.createParser(reader);\n      parser.disable(JsonParser.Feature.AUTO_CLOSE_SOURCE);\n      return fromParser(parser, clazz);\n    } catch (IOException e) {\n      throw new DecodeException(\"Failed to decode:\" + e.getMessage(), e);\n    }\n  }\n\n  @Override\n  public void toWriter(Object object, Writer writer) throws EncodeException {\n    try {\n      JsonGenerator generator = createGenerator(writer, false);\n      generator.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);\n      generator.disable(JsonGenerator.Feature.FLUSH_PASSED_TO_STREAM);\n      encodeJson(object, generator);\n      generator.close();\n    } catch (IOException e) {\n      throw new EncodeException(e.getMessage(), e);\n    }\n  }\n\n  public static JsonParser createParser(String str) {\n    try {","sourceCodeStart":184,"sourceCodeEnd":220,"githubUrl":"https://github.com/eclipse-vertx/vert.x/blob/fb308bd8c3f12c79f4ae89bef67fadf6c80d036e/vertx-core/src/main/java/io/vertx/core/json/jackson/JacksonCodec.java#L184-L220","documentation":"JacksonCodec wraps any IOException raised while creating or driving a Jackson JsonParser over a Reader into a DecodeException with this message. It indicates the character stream being decoded could not be parsed as JSON. The original Jackson exception is preserved as the cause.","triggerScenarios":"Calling JacksonCodec.fromReader(Reader, Class) with a Reader over malformed JSON, a closed Reader, invalid character encoding, or an I/O failure during parsing.","commonSituations":"Decoding JSON from a StringReader/FileReader containing truncated or syntactically invalid JSON; reading files with wrong charset; source writer closed before the reader finished.","solutions":["Validate the JSON text before decoding","Check DecodeException.getCause() for the exact Jackson parse error and location","Ensure the Reader remains open and correctly encoded (UTF-8/UTF-16) until parsing finishes","Handle partial reads from network/file sources before passing the Reader"],"exampleFix":"// before\nMyDto dto = JacksonCodec.fromReader(reader, MyDto.class);\n// after\ntry {\n  MyDto dto = JacksonCodec.fromReader(reader, MyDto.class);\n} catch (DecodeException e) {\n  throw new IllegalArgumentException(\"Invalid JSON: \" + e.getCause().getMessage(), e);\n}","handlingStrategy":"try-catch","validationCode":"// Java\npublic static boolean looksLikeJson(Reader reader) throws IOException {\n  reader.mark(1);\n  int c = reader.read();\n  reader.reset();\n  return c == '{' || c == '[' || c == '\"' || c == '-' || Character.isDigit(c);\n}","typeGuard":"public static boolean isJsonStart(char c) {\n  return c == '{' || c == '[' || c == '\"' || c == '-' || Character.isDigit(c) || c == 't' || c == 'f' || c == 'n';\n}","tryCatchPattern":"try {\n  T value = JacksonCodec.fromReader(reader, T.class);\n} catch (DecodeException e) {\n  Throwable cause = e.getCause();\n  logger.error(\"JSON decode from reader failed: {}\", cause == null ? e.getMessage() : cause.getMessage());\n  throw new IllegalArgumentException(\"Malformed JSON input\", e);\n}","preventionTips":["Peek at the first character before decoding to confirm JSON shape","Keep the Reader open for the duration of parsing","Normalize encoding to UTF-8 before decoding","Log a snippet of the failing input when decoding user-supplied data"],"tags":["json","decoding","jackson","reader"],"backgroundTag":"json-decode-failed","analyzedSha":"fb308bd8c3f12c79f4ae89bef67fadf6c80d036e","analyzedAt":"2026-09-06T11:37:12.241Z","contentChangedAt":"2026-09-06T11:37:12.241Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}