/** * Method invoked by the Java serialization framework while deserializing * Row instances. Since previous versions of MetaModel did not use a * DataSetHeader, but had a reference to a List<SelectItem>, this * deserialization is particularly tricky. We check if the items variable is * there, and if it is, we convert it to a header instead. * * @param stream * @throws Exception */ private void readObject(Object o, NInputStream stream) // throws Exception { XmlSerializer serializer = new XmlSerializer(o.GetType()); object read_data = serializer.Deserialize(stream); //.readFields(); FieldInfo[] fields = read_data.GetType().GetFields(); FieldInfo items_field = NTypeUtils.getField(read_data.GetType(), "_items"); NGetField get_field = new NGetField(read_data, fields); try { // backwards compatible deserialization, convert items to header Object items = items_field.GetValue(read_data); //@SuppressWarnings("unchecked") List <SelectItem> itemsList = (List <SelectItem>)items; SimpleDataSetHeader header = new SimpleDataSetHeader(itemsList); FieldInfo field = NTypeUtils.getField(GetType(), "_header"); // field.setAccessible(true); field.SetValue(this, header); } catch (ArgumentException e) { // no backwards compatible deserialization needed. setWhileDeserializing(get_field, "_header"); } setWhileDeserializing(get_field, "_values"); setWhileDeserializing(get_field, "_styles"); } // readObject()
} // readObject() private void setWhileDeserializing(NGetField fields, String fieldName) // throws Exception { object value = fields.get(fieldName, null); FieldInfo field = NTypeUtils.getField(GetType(), fieldName); //field.setAccessible(true); field.SetValue(this, value); } // setWhileDeserializing()
} // convertColumnType() public static ColumnType valueOf(string fieldName) { try { FieldInfo column_type_field = NTypeUtils.getField(typeof(ColumnType), fieldName); if (column_type_field != null) { // columnTypeField.setAccessible(true); object o = new object(); column_type_field.GetValue(o); ColumnType columnType = NSystem.Cast(o, typeof(ColumnType)); return((ColumnType)columnType); } } catch (Exception e) { logger.error("Failed to resolve JDBC type in ColumnType constants: " + fieldName, e); } return(null); } // valueOf()