{"record":{"id":"ad6e0d0957cbd0d2","repo":"apache/beam","slug":"unsupported-field-type-s","errorCode":null,"errorMessage":"Unsupported field type: %s","messagePattern":"Unsupported field type: (.+?)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoBeamConverter.java","lineNumber":162,"sourceCode":"              Descriptors.Descriptor timestampDescriptor = message.getDescriptorForType();\n              Descriptors.FieldDescriptor secondsFieldDescriptor =\n                  timestampDescriptor.findFieldByNumber(1);\n              Descriptors.FieldDescriptor nanosFieldDescriptor =\n                  timestampDescriptor.findFieldByNumber(2);\n              long seconds = (long) message.getField(secondsFieldDescriptor);\n              int nanos = (int) message.getField(nanosFieldDescriptor);\n              return Instant.ofEpochSecond(seconds, nanos);\n            };\n          case EnumerationType.IDENTIFIER:\n            EnumerationType enumerationType = fieldType.getLogicalType(EnumerationType.class);\n            return enumValue ->\n                enumerationType.toInputType(\n                    ((Descriptors.EnumValueDescriptor) enumValue).getNumber());\n          default:\n            throw new UnsupportedOperationException();\n        }\n      default:\n        throw new UnsupportedOperationException(\n            \"Unsupported field type: \" + fieldType.getTypeName());\n    }\n  }\n\n  static BeamToProtoConverter<Object, Object> createBeamToProtoConverter(\n      Descriptors.FieldDescriptor fieldDescriptor) {\n    if (fieldDescriptor.isRepeated()) {\n      if (fieldDescriptor.isMapField()) {\n        Descriptors.Descriptor mapDescriptor = fieldDescriptor.getMessageType();\n        Descriptors.FieldDescriptor keyDescriptor = mapDescriptor.findFieldByNumber(1);\n        Descriptors.FieldDescriptor valueDescriptor = mapDescriptor.findFieldByNumber(2);\n        BeamToProtoConverter<Object, Object> keyToProto =\n            createBeamToProtoSingularConverter(keyDescriptor);\n        BeamToProtoConverter<Object, Object> valueToProto =\n            createBeamToProtoSingularConverter(valueDescriptor);\n        return map -> {\n          ImmutableList.Builder<Message> protoList = ImmutableList.builder();\n          ((Map<Object, Object>) map)","sourceCodeStart":144,"sourceCodeEnd":180,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoBeamConverter.java#L144-L180","documentation":"ProtoBeamConverter.createProtoToBeamConverter() builds a converter mapping a proto FieldDescriptor's type to a Beam/Java type. Its switch over FieldType has no case for the encountered field type, so it throws UnsupportedOperationException with the raw type name. The proto schema contains a field type the converter does not support.","triggerScenarios":"Converting a proto message whose schema uses a field type not handled by the switch (e.g. newer well-known types, group-type fields, or unsupported scalars) via elementConverter/keyConverter/valueConverter paths.","commonSituations":"Protos compiled with a newer protobuf version introducing types unknown to the Beam converter; using group/oneof wrapper fields; schemas using enums nested in maps where the enum path falls through to default.","solutions":["Change the proto schema to use only field types supported by ProtoBeamConverter (standard scalars, strings, bytes, messages, maps, enums).","Upgrade the Beam SDK so the converter covers newer protobuf field types.","Implement a custom converter for the unsupported field instead of the generic proto-to-Beam path.","Check Descriptors.FieldDescriptor.getType() of the offending field to identify what needs replacing."],"exampleFix":"// before\noptional MyGroup group_field = 1; // group type unsupported\n// after\nmessage MyGroup { ... }\nMyGroup group_field = 1; // regular message field","handlingStrategy":"try-catch","validationCode":"for (Descriptors.FieldDescriptor f : descriptor.getFields()) {\n  switch (f.getType()) {\n    case GROUP: throw new IllegalStateException(\"unsupported field type \" + f.getType() + \" in \" + f.getFullName());\n    default: break;\n  }\n}","typeGuard":"static boolean isSupportedFieldType(Descriptors.FieldDescriptor f) {\n  switch (f.getType()) {\n    case GROUP: return false; // extend as needed for unsupported types\n    default: return true;\n  }\n}","tryCatchPattern":"try {\n  converter = ProtoBeamConverter.createProtoToBeamConverter(fieldDescriptor);\n} catch (UnsupportedOperationException e) {\n  if (e.getMessage() != null && e.getMessage().startsWith(\"Unsupported field type\")) {\n    throw new IllegalStateException(\"Replace or upgrade field: \" + e.getMessage(), e);\n  }\n  throw e;\n}","preventionTips":["Avoid group-type and exotic fields in protos intended for Beam conversion","Keep Beam SDK and protobuf-java versions aligned","Validate proto schemas against supported types at build time"],"tags":["apache-beam","protobuf","schema","unsupported"],"backgroundTag":"unsupported-enum-value","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}