private Class getWrapper(Schema schema) { switch (schema.getType()) { case INT: return Integer.class; case LONG: return Long.class; case FLOAT: return Float.class; case DOUBLE: return Double.class; case BOOLEAN: return Boolean.class; } return getClass(schema); }
private Class getWrapper(Schema schema) { switch (schema.getType()) { case INT: return Integer.class; case LONG: return Long.class; case FLOAT: return Float.class; case DOUBLE: return Double.class; case BOOLEAN: return Boolean.class; } return getClass(schema); }
@Override public Object createEnum(String symbol, Schema schema) { Class c = getClass(schema); if (c == null) return super.createEnum(symbol, schema); // punt to generic if (RESERVED_WORDS.contains(symbol)) symbol += "$"; return Enum.valueOf(c, symbol); }
@Override public Object createEnum(String symbol, Schema schema) { Class c = getClass(schema); if (c == null) return super.createEnum(symbol, schema); // punt to generic if (RESERVED_WORDS.contains(symbol)) symbol += "$"; return Enum.valueOf(c, symbol); }
@Override public Object createFixed(Object old, Schema schema) { Class c = getClass(schema); if (c == null) return super.createFixed(old, schema); // punt to generic return c.isInstance(old) ? old : newInstance(c, schema); }
@Override public Object newRecord(Object old, Schema schema) { Class c = getClass(schema); if (c == null) return super.newRecord(old, schema); // punt to generic return (c.isInstance(old) ? old : newInstance(c, schema)); }
@Override public Object createFixed(Object old, Schema schema) { Class c = getClass(schema); if (c == null) return super.createFixed(old, schema); // punt to generic return c.isInstance(old) ? old : newInstance(c, schema); }
@Override public Object newRecord(Object old, Schema schema) { Class c = getClass(schema); if (c == null) return super.newRecord(old, schema); // punt to generic return (c.isInstance(old) ? old : newInstance(c, schema)); }
@Override public Object respond(Message message, Object request) throws Exception { int numParams = message.getRequest().getFields().size(); Object[] params = new Object[numParams]; Class[] paramTypes = new Class[numParams]; int i = 0; try { for (Schema.Field param: message.getRequest().getFields()) { params[i] = ((GenericRecord)request).get(param.name()); paramTypes[i] = getSpecificData().getClass(param.schema()); i++; } Method method = impl.getClass().getMethod(message.getName(), paramTypes); method.setAccessible(true); return method.invoke(impl, params); } catch (InvocationTargetException e) { if (e.getTargetException() instanceof Exception) { throw (Exception) e.getTargetException(); } else { throw new Exception(e.getTargetException()); } } catch (NoSuchMethodException e) { throw new AvroRuntimeException(e); } catch (IllegalAccessException e) { throw new AvroRuntimeException(e); } }
@Override public void setSchema(Schema actual) { // if expected is unset and actual is a specific record, // then default expected to schema of currently loaded class if (getExpected() == null && actual != null && actual.getType() == Schema.Type.RECORD) { SpecificData data = getSpecificData(); Class c = data.getClass(actual); if (c != null && SpecificRecord.class.isAssignableFrom(c)) setExpected(data.getSchema(c)); } super.setSchema(actual); }
@Override public void setSchema(Schema actual) { // if expected is unset and actual is a specific record, // then default expected to schema of currently loaded class if (getExpected() == null && actual != null && actual.getType() == Schema.Type.RECORD) { SpecificData data = getSpecificData(); Class c = data.getClass(actual); if (c != null && SpecificRecord.class.isAssignableFrom(c)) setExpected(data.getSchema(c)); } super.setSchema(actual); }
if (Character.class.getName().equals(intClass)) return Character.TYPE; default: return super.getClass(schema);
if (Character.class.getName().equals(intClass)) return Character.TYPE; default: return super.getClass(schema);
@Before public void setUp() { Schema intSchema = Schema.create(Type.INT); intClass = SpecificData.get().getClass(intSchema); Schema nullSchema = Schema.create(Type.NULL); Schema nullIntUnionSchema = Schema.createUnion(Arrays.asList(nullSchema, intSchema)); integerClass = SpecificData.get().getClass(nullIntUnionSchema); }
@Override public Object createEnum(String symbol, Schema schema) { Class c = getClass(schema); if (c == null) return super.createEnum(symbol, schema); // punt to generic if (RESERVED_WORDS.contains(symbol)) symbol += "$"; return Enum.valueOf(c, symbol); }
@Override @SuppressWarnings("unchecked") protected Object createEnum(String symbol, Schema schema) { return Enum.valueOf(SpecificData.get().getClass(schema), symbol); }
@Override @SuppressWarnings("unchecked") protected Object createEnum(String symbol, Schema schema) { Class c = SpecificData.get().getClass(schema); if (c == null) return super.createEnum(symbol, schema); // punt to generic return Enum.valueOf(c, symbol); }
@Override protected Object createFixed(Object old, Schema schema) { Class c = SpecificData.get().getClass(schema); return c.isInstance(old) ? old : newInstance(c); }
@SuppressWarnings("unchecked") private static <T> Class<T> getDatumClass(GenericData model, Schema schema) { if (model.getConversionFor(schema.getLogicalType()) != null) { // use generic classes to pass data to conversions return null; } if (model instanceof SpecificData) { return (Class<T>) ((SpecificData) model).getClass(schema); } return null; }