{"record":{"id":"9ce5583676526b79","repo":"apache/beam","slug":"unsupported-compression-type-compression","errorCode":null,"errorMessage":"Unsupported compression type: \" + compression","messagePattern":"Unsupported compression type: \" \\+ compression","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdks/java/core/src/main/java/org/apache/beam/sdk/io/CompressedSource.java","lineNumber":170,"sourceCode":"          return ZIP;\n\n        case ZSTD:\n          return ZSTD;\n\n        case LZO:\n          return LZO;\n\n        case LZOP:\n          return LZOP;\n\n        case DEFLATE:\n          return DEFLATE;\n\n        case SNAPPY:\n          return SNAPPY;\n\n        default:\n          throw new IllegalArgumentException(\"Unsupported compression type: \" + compression);\n      }\n    }\n  }\n\n  private final FileBasedSource<T> sourceDelegate;\n  private final DecompressingChannelFactory channelFactory;\n\n  /**\n   * Creates a {@code CompressedSource} from an underlying {@code FileBasedSource}. The type of\n   * compression used will be based on the file name extension unless explicitly configured via\n   * {@link CompressedSource#withDecompression}.\n   */\n  public static <T> CompressedSource<T> from(FileBasedSource<T> sourceDelegate) {\n    return new CompressedSource<>(sourceDelegate, CompressionMode.AUTO);\n  }\n\n  /**\n   * Return a {@code CompressedSource} that is like this one but will decompress its underlying file","sourceCodeStart":152,"sourceCodeEnd":188,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/core/src/main/java/org/apache/beam/sdk/io/CompressedSource.java#L152-L188","documentation":"CompressedSource.CompressionMode.fromCanonical converts a canonical Compression enum into a CompressionMode; an unrecognized value means the switch has no mapping (unknown enum constant, typically from a version mismatch or corrupted value). It throws IllegalArgumentException naming the offending compression.","triggerScenarios":"Passing a Compression value to CompressedSource.CompressionMode.fromCanonical that is not GZIP, BZIP2, ZIP, DEF late, or SNAPPY per the switch in that Beam version — e.g., a newer/older enum constant like ZSTD when running against an older Beam jar.","commonSituations":"Mixing Beam SDK versions on the classpath; referencing an enum constant added after the deployed Beam version; reflection-based or serialized enum values crossing versions.","solutions":["Align all Beam SDK jars to a single version so the enum constant exists.","Use only compression types supported by the deployed Beam version's Compression enum.","Check the switch coverage in CompressedSource.java for your Beam version and pick a mapped value."],"exampleFix":"// before\nCompression mode = Compression.ZSTD; // not present in deployed Beam version\nCompressedSource.CompressionMode.fromCanonical(mode);\n// after\nCompression mode = Compression.GZIP; // supported by the deployed version","handlingStrategy":"try-catch","validationCode":"Set<String> supported = Set.of(\"GZIP\",\"BZIP2\",\"ZIP\",\"DEFLATE\",\"SNAPPY\");\nif (!supported.contains(compression.name())) throw new IllegalArgumentException(\"unsupported compression: \" + compression);","typeGuard":null,"tryCatchPattern":"try {\n  mode = CompressedSource.CompressionMode.fromCanonical(canonical);\n} catch (IllegalArgumentException e) {\n  mode = CompressedSource.CompressionMode.GZIP;\n}","preventionTips":["Pin all Beam SDK modules to one version","Use only enum constants defined by the deployed Beam version","Avoid serializing Compression enums across SDK versions"],"tags":["java","io","compression","illegal-argument"],"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"}