{"record":{"id":"a7b6e8ede6e15e65","repo":"apache/beam","slug":"unknown-valuekind-valuekind","errorCode":null,"errorMessage":"Unknown ValueKind: <valueKind>","messagePattern":"Unknown ValueKind: <valueKind>","errorType":"exception","errorClass":"java.lang.IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdks/java/core/src/main/java/org/apache/beam/sdk/values/ValueKindUtil.java","lineNumber":35,"sourceCode":" */\npackage org.apache.beam.sdk.values;\n\nimport org.apache.beam.model.fnexecution.v1.BeamFnApi.Elements;\n\n/** Utility class for converting between {@link ValueKind} and {@link Elements.ValueKind.Enum}. */\npublic final class ValueKindUtil {\n  public static Elements.ValueKind.Enum toProto(ValueKind valueKind) {\n    switch (valueKind) {\n      case INSERT:\n        return Elements.ValueKind.Enum.INSERT;\n      case UPDATE_BEFORE:\n        return Elements.ValueKind.Enum.UPDATE_BEFORE;\n      case UPDATE_AFTER:\n        return Elements.ValueKind.Enum.UPDATE_AFTER;\n      case DELETE:\n        return Elements.ValueKind.Enum.DELETE;\n      default:\n        throw new IllegalArgumentException(\"Unknown ValueKind: \" + valueKind);\n    }\n  }\n\n  public static ValueKind fromProto(Elements.ValueKind.Enum proto) {\n    switch (proto) {\n      case VALUE_KIND_UNSPECIFIED:\n      case INSERT:\n        return ValueKind.INSERT;\n      case UPDATE_BEFORE:\n        return ValueKind.UPDATE_BEFORE;\n      case UPDATE_AFTER:\n        return ValueKind.UPDATE_AFTER;\n      case DELETE:\n        return ValueKind.DELETE;\n      default:\n        throw new IllegalArgumentException(\"Unknown ValueKind: \" + proto);\n    }\n  }","sourceCodeStart":17,"sourceCodeEnd":53,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/core/src/main/java/org/apache/beam/sdk/values/ValueKindUtil.java#L17-L53","documentation":"ValueKindUtil.toProto converts the in-memory ValueKind enum to its protobuf Elements.ValueKind.Enum; the default branch throws IllegalArgumentException when the enum has no proto mapping. This means a ValueKind value exists in memory that the toProto switch does not handle — usually a newer/older enum constant crossing SDK versions, or an unspecified value.","triggerScenarios":"Calling ValueKindUtil.toProto(kind) where kind is not VALUE/UPDATE_BEFORE/UPDATE_AFTER/DELETE — e.g. VALUE_KIND_UNSPECIFIED passed in, or an enum constant added after this switch was written.","commonSituations":"Mixing Beam SDK versions where ValueKind gained constants; deserializing/mapping user-provided change-capture kinds; constructing ValueKind from strings and passing an unexpected value.","solutions":["Only pass handled kinds (VALUE, UPDATE_BEFORE, UPDATE_AFTER, DELETE) to toProto","Upgrade Beam so toProto covers all enum constants present in your version","Map/guard unknown kinds before conversion (default to VALUE or reject earlier with a clear message)"],"exampleFix":"// before\nElements.ValueKind.Enum p = ValueKindUtil.toProto(kind); // kind may be arbitrary\n// after\nif (kind == ValueKind.VALUE || kind == ValueKind.UPDATE_BEFORE || kind == ValueKind.UPDATE_AFTER || kind == ValueKind.DELETE) { ... toProto ... } else { log.warn(\"skipping kind \" + kind); }","handlingStrategy":"try-catch","validationCode":"if (kind != ValueKind.VALUE && kind != ValueKind.UPDATE_BEFORE && kind != ValueKind.UPDATE_AFTER && kind != ValueKind.DELETE) throw new IllegalArgumentException(\"unsupported kind: \" + kind);","typeGuard":null,"tryCatchPattern":"try { proto = ValueKindUtil.toProto(kind); } catch (IllegalArgumentException e) { log.warn(\"unknown kind, defaulting\", e); proto = Elements.ValueKind.Enum.VALUE; }","preventionTips":["Pin a single Beam SDK version across the pipeline","Whitelist known kinds before conversion","Parse user input into ValueKind with strict validation"],"tags":["java","apache-beam","enum","protobuf"],"backgroundTag":"invalid-enum-value","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"}