apache/beam · error · RuntimeException

Error instantiating logical type '%s' with of('%s') method.

Error message

Error instantiating logical type '%s' with of('%s') method.

What it means

If the reflective call to the logical type's static of(%) method throws (InvocationTargetException), SchemaTranslation wraps it as RuntimeException 'Error instantiating logical type ... with of(...) method'. The of() factory itself failed at runtime while validating or constructing the value.

Source

Thrown at sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/SchemaTranslation.java:439

            String objectName = clazz.getName();
            try {
              return FieldType.logicalType(
                  logicalTypeClass.cast(
                      logicalTypeClass.getMethod("of", clazz).invoke(null, fieldValue)));
            } catch (NoSuchMethodException e) {
              throw new RuntimeException(
                  String.format(
                      "Standard logical type '%s' does not have a static of('%s') method.",
                      urn, objectName),
                  e);
            } catch (IllegalAccessException e) {
              throw new RuntimeException(
                  String.format(
                      "Standard logical type '%s' has an of('%s') method, but it is not accessible.",
                      urn, objectName),
                  e);
            } catch (InvocationTargetException e) {
              throw new RuntimeException(
                  String.format(
                      "Error instantiating logical type '%s' with of('%s') method.",
                      urn, objectName),
                  e);
            }
          } else {
            // Logical type without argument. Construct from constructor without parameter
            try {
              return FieldType.logicalType(logicalTypeClass.getConstructor().newInstance());
            } catch (NoSuchMethodException e) {
              throw new RuntimeException(
                  String.format(
                      "Standard logical type '%s' does not have a zero-argument constructor.", urn),
                  e);
            } catch (IllegalAccessException e) {
              throw new RuntimeException(
                  String.format(
                      "Standard logical type '%s' has a zero-argument constructor, but it is not accessible.",

View on GitHub (pinned to 12126d8942)

Solutions

  1. Read the cause chain (InvocationTargetException target) to see the factory's own exception; fix the offending serialized value.
  2. Relax or align validation in of() to accept values produced by the writer version.
  3. Re-encode or filter records whose argument values are invalid.
  4. Catch this RuntimeException when decoding to quarantine bad records instead of aborting the pipeline.

Example fix

// before
public static SqlTypes of(String v){ return new SqlTypes(LocalDate.parse(v)); } // throws on bad data
// after
public static SqlTypes of(String v){
  try { return new SqlTypes(LocalDate.parse(v)); }
  catch (DateTimeParseException e){ return SqlTypes.defaultValue(); }
}
Defensive patterns

Strategy: try-catch

Validate before calling

try { logicalTypeClass.getMethod("of", argClass).invoke(null, value); return true; }
catch (InvocationTargetException e) { return false; }
catch (Exception e) { return false; }

Try / catch

try {
  decodeSchema(proto);
} catch (RuntimeException e) {
  if (e.getMessage().startsWith("Error instantiating logical type")) {
    quarantine(record, e.getCause());
  } else throw e;
}

Prevention

When it happens

Trigger: Decoding a logical type where of(bootstrapValue) throws — e.g. the serialized argument value is invalid for the type's own validation (bad date string, out-of-range value, rejected null).

Common situations: Data written with values the current type definition no longer accepts; custom validation added to of() after data was written; locale/version-dependent parsing failures.

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


AI-assisted analysis of apache/beam@12126d8942 (2026-09-13). Data as JSON: /api/errors/d0f5f11cf9b68539. Report an issue: GitHub.