{"record":{"id":"fc2ce6d03d68cd3e","repo":"apache/beam","slug":"unexpected-type-info-protofieldtype-gettypeinfocase","errorCode":null,"errorMessage":"Unexpected type_info: +protoFieldType.getTypeInfoCase()","messagePattern":"Unexpected type_info: \\+protoFieldType\\.getTypeInfoCase\\(\\)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/SchemaTranslation.java","lineNumber":508,"sourceCode":"            LOG.debug(\"Constructing non-standard logical type {} as UnknownLogicalType\", urn);\n          }\n        }\n        // assemble an UnknownLogicalType\n        @Nullable FieldType argumentType = null;\n        @Nullable Object argumentValue = null;\n        if (logicalType.hasArgumentType()) {\n          argumentType = fieldTypeFromProto(logicalType.getArgumentType());\n          argumentValue = fieldValueFromProto(argumentType, logicalType.getArgument());\n        }\n        return FieldType.logicalType(\n            new UnknownLogicalType(\n                urn,\n                logicalType.getPayload().toByteArray(),\n                argumentType,\n                argumentValue,\n                fieldTypeFromProto(logicalType.getRepresentation())));\n      default:\n        throw new IllegalArgumentException(\n            \"Unexpected type_info: \" + protoFieldType.getTypeInfoCase());\n    }\n  }\n\n  private static void overrideEncodingPositions(Schema schema) {\n    @javax.annotation.Nullable UUID uuid = schema.getUUID();\n    if (schema.isEncodingPositionsOverridden() && uuid != null) {\n      RowCoder.overrideEncodingPositions(uuid, schema.getEncodingPositions());\n    }\n    schema.getFields().stream()\n        .map(Schema.Field::getType)\n        .forEach(SchemaTranslation::overrideEncodingPositions);\n  }\n\n  private static void overrideEncodingPositions(Schema.FieldType fieldType) {\n    switch (fieldType.getTypeName()) {\n      case ROW:\n        overrideEncodingPositions(","sourceCodeStart":490,"sourceCodeEnd":526,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/SchemaTranslation.java#L490-L526","documentation":"When converting a proto FieldType back into a Beam schema FieldType, the code switches over the proto's type_info oneof case. If the case is neither LOGICAL_TYPE, ATOMIC_TYPE, ARRAY_TYPE, ITERABLE_TYPE, MAP_TYPE, nor ROW_TYPE, the default branch throws this IllegalArgumentException because the wire data contains a type_info variant this Beam version does not understand.","triggerScenarios":"fieldTypeFromProtoWithoutNullable receives a SchemaApi.FieldType whose getTypeInfoCase() is UNRECOGNIZED or from a newer Beam proto (added enum case) while the runtime Beam version is older — i.e. schema written by a newer Beam, read by an older Beam.","commonSituations":"Version skew: pipeline serialized with a newer Beam SDK/schema proto, deserialized with an older SDK; corrupted or hand-crafted proto FieldValue messages; a case added upstream that the local build predates.","solutions":["Align Beam SDK versions so the reader is at least as new as the writer that produced the proto.","Inspect getTypeInfoCase() in a debugger/logs to see the unexpected case; check the schema proto for a newly added variant.","Re-serialize the data with the older Beam version if downgrade is required.","Regenerate/redeploy from a build that includes the schema-proto version containing that type_info case."],"exampleFix":"// before\n Beam 2.54 reader decoding schema written by Beam 2.60 with a new type_info case\n// after\n upgrade reader dependency: org.apache.beam:beam-sdks-java-core to >= writer version","handlingStrategy":"validation","validationCode":"if (protoFieldType.getTypeInfoCase() == SchemaApi.FieldType.TypeInfoCase.TYPEINFO_NOT_SET || protoFieldType.getTypeInfoCase().name().equals(\"UNRECOGNIZED\")) { throw new IllegalStateException(\"unknown type_info case; reader Beam version too old for this data\"); }","typeGuard":null,"tryCatchPattern":"try { decodeSchema(bytes); } catch (IllegalArgumentException e) { if (e.getMessage().startsWith(\"Unexpected type_info:\")) { /* upgrade SDK or re-serialize */ } else { throw e; } }","preventionTips":["Keep Beam SDK versions uniform across writer and reader","Never hand-build schema protos; use SchemaTranslation APIs","Test cross-version deserialization when upgrading Beam"],"tags":["java","protobuf","deserialization","version-skew"],"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"}