@Override public Object getField(Object record, String name, int position) { return getField(record, name, position, null); }
@Override public Object getField(Object record, String name, int position) { return getField(record, name, position, null); }
/** Test that the error message contains the name of the class. */ @Test public void testReflectFieldError() throws Exception { Object datum = ""; try { ReflectData.get().getField(datum, "notAFieldOfString", 0); } catch (AvroRuntimeException e) { assertTrue(e.getMessage().contains(datum.getClass().getName())); } }
void checkReadWrite(Object object, Schema s) throws Exception { ReflectDatumWriter<Object> writer = new ReflectDatumWriter<>(s); ByteArrayOutputStream out = new ByteArrayOutputStream(); writer.write(object, factory.directBinaryEncoder(out, null)); ReflectDatumReader<Object> reader = new ReflectDatumReader<>(s); Object after = reader.read(null, DecoderFactory.get().binaryDecoder( out.toByteArray(), null)); assertEquals(object, after); // check reflective setField works for records if (s.getType().equals(Schema.Type.RECORD)) { Object copy = object.getClass().newInstance(); for (Field f : s.getFields()) { Object val = ReflectData.get().getField(object, f.name(), f.pos()); ReflectData.get().setField(copy, f.name(), f.pos(), val); } assertEquals("setField", object, copy); } }
@Override public Object getField(Object record, String name, int position) { return getField(record, name, position, null); }
@Override public Object getField(Object record, String name, int position) { return getField(record, name, position, null); }
@Override protected void setField(Object record, String name, int position, Object o) { try { ReflectData.getField(record.getClass(), name).set(record, o); } catch (IllegalAccessException e) { throw new AvroRuntimeException(e); } }
@Override protected Object getField(Object record, String name, int position) { try { return ReflectData.getField(record.getClass(), name).get(record); } catch (IllegalAccessException e) { throw new AvroRuntimeException(e); } }
@Override protected Object getField(Object record, String name, int position) { try { return ReflectData.getField(record.getClass(), name).get(record); } catch (IllegalAccessException e) { throw new AvroRuntimeException(e); } }
@Override protected void setField(Object record, String name, int position, Object o) { if (record instanceof IndexedRecord) { super.setField(record, name, position, o); return; } try { ReflectData.getField(record.getClass(), name).set(record, o); } catch (IllegalAccessException e) { throw new AvroRuntimeException(e); } }
@Override protected Object getField(Object record, String name, int position) { if (record instanceof IndexedRecord) return super.getField(record, name, position); try { return ReflectData.getField(record.getClass(), name).get(record); } catch (IllegalAccessException e) { throw new AvroRuntimeException(e); } }
@Override protected Object getField(Object record, String name, int position) { if (record instanceof IndexedRecord) return super.getField(record, name, position); try { return ReflectData.getField(record.getClass(), name).get(record); } catch (IllegalAccessException e) { throw new AvroRuntimeException(e); } }
private static <E> String[] shredReflect(E entity, Schema schema) { ReflectData reflect = ReflectData.get(); List<Schema.Field> fields = schema.getFields(); String[] values = new String[fields.size()]; for (int i = 0; i < values.length; i += 1) { Schema.Field field = fields.get(i); values[i] = valueString( reflect.getField(entity, field.name(), i), field.schema()); } return values; }
try { if (!validate(f.schema(), getField(c, f.name()).get(datum))) return false; } catch (IllegalAccessException e) {
try { if (!validate(f.schema(), getField(c, f.name()).get(datum))) return false; } catch (IllegalAccessException e) {
private static int reflectAwareHashCode(Object o, Schema s) { if (o == null) return 0; // incomplete datum int hashCode = 1; switch (s.getType()) { case RECORD: for (Schema.Field f : s.getFields()) { if (f.order() == Schema.Field.Order.IGNORE) continue; hashCode = hashCodeAdd(hashCode, ReflectData.get().getField(o, f.name(), f.pos()), f.schema()); } return hashCode; case ARRAY: Collection<?> a = (Collection<?>) o; Schema elementType = s.getElementType(); for (Object e : a) hashCode = hashCodeAdd(hashCode, e, elementType); return hashCode; case UNION: return reflectAwareHashCode(o, s.getTypes().get(ReflectData.get().resolveUnion(s, o))); case ENUM: return s.getEnumOrdinal(o.toString()); case NULL: return 0; case STRING: return (o instanceof Utf8 ? o : new Utf8(o.toString())).hashCode(); default: return o.hashCode(); } }