{"record":{"id":"df3723bae7108225","repo":"apache/beam","slug":"can-not-be-serialized-to-json","errorCode":null,"errorMessage":" can not be serialized to Json","messagePattern":" can not be serialized to Json","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/options/AwsSerializableUtils.java","lineNumber":48,"sourceCode":"\n  static {\n    MAPPER.registerModule(new AwsModule());\n  }\n\n  public static String serializeAwsCredentialsProvider(AwsCredentialsProvider credentialsProvider) {\n    return serialize(credentialsProvider);\n  }\n\n  public static AwsCredentialsProvider deserializeAwsCredentialsProvider(\n      String serializedCredentialsProvider) {\n    return deserialize(serializedCredentialsProvider, AwsCredentialsProvider.class);\n  }\n\n  static String serialize(Object object) {\n    try {\n      return MAPPER.writeValueAsString(object);\n    } catch (JsonProcessingException e) {\n      throw new IllegalArgumentException(\n          object.getClass().getSimpleName() + \" can not be serialized to Json\", e);\n    }\n  }\n\n  static <T> T deserialize(String serializedObject, Class<T> clazz) {\n    try {\n      return MAPPER.readValue(serializedObject, clazz);\n    } catch (IOException e) {\n      throw new IllegalArgumentException(\n          clazz.getSimpleName() + \" can not be deserialized from Json\", e);\n    }\n  }\n}\n","sourceCodeStart":30,"sourceCodeEnd":62,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/io/amazon-web-services2/src/main/java/org/apache/beam/sdk/io/aws2/options/AwsSerializableUtils.java#L30-L62","documentation":"AwsSerializableUtils.serialize uses Jackson MAPPER.writeValueAsString; if Jackson raises JsonProcessingException it rethrows IllegalArgumentException with '<ClassName> can not be serialized to Json'. The object (typically an AwsCredentialsProvider) lacks Jackson-serializable structure or a working serializer for its type.","triggerScenarios":"Calling serializeAwsCredentialsProvider (or serialize) on an object Jackson cannot write — e.g. a custom provider without registered mixin/serializer, containing non-serializable fields like streams, lambdas or clients.","commonSituations":"Passing a custom AwsCredentialsProvider into AwsOptions which is then serialized for job submission; provider holding an SDK client or IO resource that Jackson cannot marshal.","solutions":["Use a Beam-supported credentials provider type that has registered Jackson mixins (see AwsModule).","If serializing a custom type, register a Jackson serializer/mixin for it or expose only serializable properties.","Remove non-serializable fields (clients, connections, lambdas) from the object being serialized."],"exampleFix":"// before\noptions.setAwsCredentialsProvider(new MyProvider(kinesisClient)); // holds a client\n// after\noptions.setAwsCredentialsProvider(DefaultCredentialsProvider.create());","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  String json = AwsSerializableUtils.serializeAwsCredentialsProvider(provider);\n} catch (IllegalArgumentException e) {\n  // provider is not Jackson-serializable; substitute a supported provider\n}","preventionTips":["Only pass Beam-supported provider types to AwsOptions","Keep IO resources and SDK clients out of objects handed to serialization","Round-trip test serialization of configured options before job submission"],"tags":["jackson","serialization","aws","credentials"],"backgroundTag":"json-marshal-failed","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}