{"record":{"id":"cbd005a091a5db2a","repo":"apache/iceberg","slug":"metadata-is-required-for-object","errorCode":null,"errorMessage":"Metadata is required for object: ","messagePattern":"Metadata is required for object: ","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/org/apache/iceberg/variants/Variants.java","lineNumber":120,"sourceCode":"    return VariantValue.from(metadata, value);\n  }\n\n  public static ShreddedObject object(VariantMetadata metadata, VariantObject object) {\n    return new ShreddedObject(metadata, object);\n  }\n\n  public static ShreddedObject object(VariantMetadata metadata) {\n    return new ShreddedObject(metadata);\n  }\n\n  public static ShreddedObject object(VariantObject object) {\n    if (object instanceof ShreddedObject) {\n      return new ShreddedObject(((ShreddedObject) object).metadata(), object);\n    } else if (object instanceof SerializedObject) {\n      return new ShreddedObject(((SerializedObject) object).metadata(), object);\n    }\n\n    throw new UnsupportedOperationException(\"Metadata is required for object: \" + object);\n  }\n\n  public static boolean isNull(ByteBuffer valueBuffer) {\n    return ByteBuffers.readByte(valueBuffer, 0) == 0;\n  }\n\n  public static ValueArray array() {\n    return new ValueArray();\n  }\n\n  public static <T> VariantPrimitive<T> of(PhysicalType type, T value) {\n    return new PrimitiveWrapper<>(type, value);\n  }\n\n  public static VariantPrimitive<Void> ofNull() {\n    return new PrimitiveWrapper<>(PhysicalType.NULL, null);\n  }\n","sourceCodeStart":102,"sourceCodeEnd":138,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/core/src/main/java/org/apache/iceberg/variants/Variants.java#L102-L138","documentation":"Variants.object(VariantMetadata, VariantObject) adapts an existing variant object into a ShreddedObject, which requires its associated metadata. When the passed object implements neither VariantObject with retrievable metadata (falls through both known branches), the library throws UnsupportedOperationException stating metadata is required — shredded objects cannot function without metadata.","triggerScenarios":"Calling Variants.object() with an object that is not a ShreddedObject or SerializedObject (i.e. a custom VariantObject implementation), or one whose metadata() returns unusable metadata.","commonSituations":"Custom VariantObject implementations passed into variant shredding utilities; refactoring that introduced a new object type not yet handled by Variants.object.","solutions":["Pass only ShreddedObject or SerializedObject instances (obtained from variant APIs) to Variants.object","Provide metadata explicitly via the overload that accepts VariantMetadata","Extend/update the library if a new object type must be supported"],"exampleFix":"// before\nVariants.object(customObject);\n// after\nVariants.object(metadata, customObject); // explicit metadata overload","handlingStrategy":"validation","validationCode":"Preconditions.checkNotNull(metadata, \"Variant metadata is required\"); if (!(object instanceof ShreddedObject) && !(object instanceof SerializedObject)) { throw new IllegalArgumentException(\"Object must be a ShreddedObject or SerializedObject\"); }","typeGuard":"boolean hasMetadata(Object o) { return o instanceof ShreddedObject || o instanceof SerializedObject; }","tryCatchPattern":"try { return Variants.object(obj); } catch (UnsupportedOperationException e) { return Variants.object(metadata, obj); }","preventionTips":["Always obtain variant objects from Iceberg variant APIs rather than custom implementations","Pass metadata explicitly when calling shredding helpers","Keep custom VariantObject implementations out of core variant utilities"],"tags":["variants","metadata","shredding"],"backgroundTag":"missing-required-argument","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}