package com.dfire.platform.alchemy.api.util; import org.apache.flink.types.Row; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Field; /** * @author congbai * @date 2018/8/7 */ public class ConvertRowUtil { private static final Logger logger = LoggerFactory.getLogger(ConvertRowUtil.class); public static void convertFromRow(Object object, String[] fieldNames, Row row) { Class clazz = object.getClass(); // validate the row if (row.getArity() != fieldNames.length) { throw new IllegalStateException( String.format("Number of elements in the row '%s' is different from number of field names: %d", row, fieldNames.length)); } for (int i = 0; i < fieldNames.length; i++) { if (row.getField(i) == null) { continue; } final String name = fieldNames[i]; try { Field field = clazz.getDeclaredField(name); field.setAccessible(true); field.set(object, row.getField(i)); } catch (Exception e) { logger.error("Occur Error when convert from Row",e); } } } public static Row convertToRow(Object obj, String[] names) { Class clazz = obj.getClass(); final Row row = new Row(names.length); for (int i = 0; i < names.length; i++) { final String name = names[i]; try { Field field = clazz.getDeclaredField(name); field.setAccessible(true); row.setField(i, field.get(obj)); }catch (NoSuchFieldException exception){ row.setField(i, null); }catch (Exception e) { logger.error("Occur Error when convert to Row",e); } } return row; } }