{"record":{"id":"49790c163b9a82bf","repo":"apache/beam","slug":"fieldtype-gettypename-is-not-supported","errorCode":null,"errorMessage":"+fieldType.getTypeName()+ is not supported","messagePattern":"\\+fieldType\\.getTypeName\\(\\)\\+ is not supported","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/SchemaUtils.java","lineNumber":219,"sourceCode":"      case LOGICAL_TYPE:\n        {\n          Schema.FieldType baseType =\n              Objects.requireNonNull(fieldType.getLogicalType()).getBaseType();\n          StringBuilder sb = new StringBuilder();\n          sb.append(\"<\")\n              .append(toFieldTypeNameString(fieldType))\n              .append(\"(\")\n              .append(fieldType.getLogicalType().getIdentifier())\n              .append(\")> {\\n\");\n          sb.append(nextPrefix)\n              .append(\"<base>: \")\n              .append(toPrettyFieldTypeString(baseType, nextPrefix))\n              .append(\"\\n\");\n          sb.append(prefix).append(\"}\");\n          return sb.toString();\n        }\n      default:\n        throw new UnsupportedOperationException(fieldType.getTypeName() + \" is not supported\");\n    }\n  }\n\n  static String toPrettyOptionsString(Schema.Options options, String prefix) {\n    String nextPrefix = prefix + INDENT;\n    StringBuilder sb = new StringBuilder();\n    sb.append(\"{\\n\");\n    for (String optionName : options.getOptionNames()) {\n      sb.append(nextPrefix)\n          .append(optionName)\n          .append(\" = \")\n          .append(\n              toPrettyFieldValueString(\n                  options.getType(optionName), options.getValue(optionName), nextPrefix))\n          .append(\"\\n\");\n    }\n    sb.append(prefix).append(\"}\");\n    return sb.toString();","sourceCodeStart":201,"sourceCodeEnd":237,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/SchemaUtils.java#L201-L237","documentation":"toPrettyFieldTypeString renders a FieldType as an indented pretty string but only implements the known TypeName branches (primitives, collections, maps, rows). Any other TypeName falls into the default branch and throws UnsupportedOperationException. This is a rendering limitation, not a data problem — the field type itself is valid, just not printable by this helper.","triggerScenarios":"Calling SchemaUtils.toPrettySchemaString(schema) or toPrettyFieldTypeString(fieldType) on a schema containing a field whose TypeName is not handled by the switch — historically e.g. DATETIME / LOGICAL_TYPE / newer TypeName additions in Beam versions newer than this method's implementation.","commonSituations":"Pretty-printing a schema containing logical types (timestamps) or a TypeName added in a newer Beam release than the code calling this helper; dumping a SQL-derived schema with unhandled types.","solutions":["Upgrade Beam so toPrettyFieldTypeString covers the newer/logical TypeName.","Replace the offending field type with a printable one before pretty-printing, or print with Schema.toString().","Write a custom formatter that handles the unhandled TypeName via getLogicalType()/getTypeName().","Catch UnsupportedOperationException and fall back to fieldType.toString() for the unsupported branches."],"exampleFix":"// before\nString pretty = SchemaUtils.toPrettySchemaString(schemaWithLogicalTypes); // throws UnsupportedOperationException\n// after\ntry {\n  String pretty = SchemaUtils.toPrettySchemaString(schemaWithLogicalTypes);\n} catch (UnsupportedOperationException e) {\n  String pretty = schemaWithLogicalTypes.toString(); // fallback rendering\n}","handlingStrategy":"try-catch","validationCode":"boolean allPrintable = schema.getFields().stream()\n    .allMatch(f -> switch (f.getType().getTypeName()) {\n      case BYTE, INT16, INT32, INT64, FLOAT, DOUBLE, BOOLEAN, STRING, ARRAY,\n           ITERABLE, MAP, ROW -> true;\n      default -> false;\n    });","typeGuard":"boolean isPrettyPrintable(FieldType t) {\n  return t.getTypeName() != TypeName.LOGICAL_TYPE; // adjust per your Beam version's switch coverage\n}","tryCatchPattern":"try {\n  String pretty = SchemaUtils.toPrettySchemaString(schema);\n} catch (UnsupportedOperationException e) {\n  LOG.warn(\"Pretty printer lacks support for a type; using toString(): {}\", e.getMessage());\n  String pretty = schema.toString();\n}","preventionTips":["Check the Beam version's switch coverage in SchemaUtils before using the pretty printer on exotic types.","Prefer Schema.toString() or a custom formatter when schemas contain logical types.","Keep Beam upgraded so newly added TypeNames are handled."],"tags":["java","beam","schema","unsupported-operation"],"backgroundTag":"unsupported-operation","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"}