/// <summary> /// Reads string valued object /// </summary> /// <param name="abstractHessianInput">HessianInput Instance</param> /// <returns>Read string valued object</returns> public override object ReadMap(AbstractHessianInput abstractHessianInput) { String strInitValue = null; while (!abstractHessianInput.IsEnd()) { string strKey = abstractHessianInput.ReadString(); string strValue = abstractHessianInput.ReadString(); if (strKey.Equals("value")) { strInitValue = strValue; } } abstractHessianInput.ReadMapEnd(); if (strInitValue == null) { throw new IOException(m_type.FullName + " expects name."); } try { return(m_constructor.Invoke(new Object[] { strInitValue })); } catch (IOException) { throw; } catch (Exception e) { throw new IOException(e.ToString()); } }
public override object ReadMap(AbstractHessianInput abstractHessianInput) { string value = null; while (!abstractHessianInput.IsEnd()) { string key = abstractHessianInput.ReadString(); if (key.Equals("value")) { value = abstractHessianInput.ReadString(); } else { abstractHessianInput.ReadObject(); } } abstractHessianInput.ReadMapEnd(); if (value == null) { return(null); } object obj = decimal.Parse(value); abstractHessianInput.AddRef(obj); return(obj); }
public override object ReadMap(AbstractHessianInput abstractHessianInput) { String name = null; while (!abstractHessianInput.IsEnd()) { string key = abstractHessianInput.ReadString(); if (key.Equals("name")) { name = abstractHessianInput.ReadString(); } else { abstractHessianInput.ReadObject(); } } abstractHessianInput.ReadMapEnd(); if (name == null) { return(null); } Object obj = Enum.Parse(m_type, name); abstractHessianInput.AddRef(obj); return(obj); }
public override object ReadMap(AbstractHessianInput abstractHessianInput) { string value = null; while (!abstractHessianInput.IsEnd()) { string key = abstractHessianInput.ReadString(); if (key.Equals("value")) { value = abstractHessianInput.ReadString(); } else { abstractHessianInput.ReadObject(); } } abstractHessianInput.ReadMapEnd(); if (value == null) { return(null); } object obj = new System.Globalization.CultureInfo(value); abstractHessianInput.AddRef(obj); return(obj); }
/// <summary> /// Reads map /// </summary> /// <param name="abstractHessianInput">HessianInput to read from</param> /// <returns>Read object or null</returns> public override object ReadMap(AbstractHessianInput abstractHessianInput) { var ds = new DataSet(); int refer = abstractHessianInput.AddRef(ds); while (!abstractHessianInput.IsEnd()) { var dt = new DataTable(); if (abstractHessianInput.ReadMapStart() == CHessian2Constants.BC_MAP) { abstractHessianInput.ReadType(); } dt.TableName = abstractHessianInput.ReadString(); while (!abstractHessianInput.IsEnd()) { var columnName = abstractHessianInput.ReadString(); var typeFullName = abstractHessianInput.ReadString(); var type = Type.GetType(typeFullName); dt.Columns.Add(new DataColumn(columnName, type)); } abstractHessianInput.ReadEnd(); if (abstractHessianInput.ReadMapStart() == CHessian2Constants.BC_MAP) { abstractHessianInput.ReadType(); } while (!abstractHessianInput.IsEnd()) { ArrayList objects = new ArrayList(); if (abstractHessianInput.ReadMapStart() == CHessian2Constants.BC_MAP) { abstractHessianInput.ReadType(); } while (!abstractHessianInput.IsEnd()) { var obj = abstractHessianInput.ReadObject(); objects.Add(obj); } abstractHessianInput.ReadEnd(); var row = dt.NewRow(); row.ItemArray = objects.ToArray(); dt.Rows.Add(row); } abstractHessianInput.ReadEnd(); ds.Tables.Add(dt); } abstractHessianInput.ReadEnd(); return(ds); }
/// <summary> /// Reads date /// </summary> /// <param name="abstractHessianInput">HessianInput - Instance</param> /// <param name="fields"></param> public override object ReadObject(AbstractHessianInput abstractHessianInput, object[] fields) { String[] fieldNames = (string[])fields; String value = null; for (int i = 0; i < fieldNames.Length; i++) { if ("value".Equals(fieldNames[i])) { value = abstractHessianInput.ReadString(); } else { abstractHessianInput.ReadObject(); } } if (value == null) { return(null); } object obj = decimal.Parse(value); abstractHessianInput.AddRef(obj); return(obj); }
/// <summary> /// Reads date /// </summary> /// <param name="abstractHessianInput">HessianInput - Instance</param> /// <param name="fields"></param> public override object ReadObject(AbstractHessianInput abstractHessianInput, object[] fields) { String[] fieldNames = (String[])fields; String name = null; for (int i = 0; i < fieldNames.Length; i++) { if ("name".Equals(fieldNames[i])) { name = abstractHessianInput.ReadString(); } else { abstractHessianInput.ReadObject(); } } if (name == null) { return(null); } Object obj = Enum.Parse(m_type, name); abstractHessianInput.AddRef(obj); return(obj); }
public override object ReadMap(AbstractHessianInput abstractHessianInput) { //string value = null; while (!abstractHessianInput.IsEnd()) { string key = abstractHessianInput.ReadString(); //if (key.Equals("value")) // value = abstractHessianInput.ReadString(); //else // abstractHessianInput.ReadObject(); } abstractHessianInput.ReadMapEnd(); //if (value == null) // return null; object obj = DBNull.Value; abstractHessianInput.AddRef(obj); return(obj); }
public new Object ReadObject(AbstractHessianInput abstractHessianInput, Object[] fields) { String[] fieldNames = (String[])fields; String value = null; for (int i = 0; i < fieldNames.Length; i++) { if ("value".Equals(fieldNames[i])) { value = abstractHessianInput.ReadString(); } else { abstractHessianInput.ReadObject(); } } Object obj = create(value); abstractHessianInput.AddRef(obj); return(obj); }
/// <summary> /// Reads arrays /// </summary> /// <param name="abstractHessianInput">Hessian Input instance</param> /// <param name="intLength">Array length</param> /// <exception cref="CHessianException"/> /// <returns>Read object</returns> public override Object ReadList(AbstractHessianInput abstractHessianInput, int intLength) { switch (m_intCode) { case INTEGER_ARRAY: { if (intLength >= 0) { int[] arrData = new int[intLength]; abstractHessianInput.AddRef(arrData); for (int i = 0; i < arrData.Length; i++) { arrData[i] = abstractHessianInput.ReadInt(); } abstractHessianInput.ReadEnd(); return(arrData); } else { ArrayList arrayList = new ArrayList(); while (!abstractHessianInput.IsEnd()) { arrayList.Add(abstractHessianInput.ReadInt()); } abstractHessianInput.ReadEnd(); int[] arrData = new int[arrayList.Count]; for (int i = 0; i < arrData.Length; i++) { arrData[i] = (int)arrayList[i]; } abstractHessianInput.AddRef(arrData); return(arrData); } } case SBYTE_ARRAY: { if (intLength >= 0) { sbyte[] arrData = new sbyte[intLength]; abstractHessianInput.AddRef(arrData); for (int i = 0; i < arrData.Length; i++) { arrData[i] = (sbyte)abstractHessianInput.ReadInt(); } abstractHessianInput.ReadEnd(); return(arrData); } else { ArrayList arrayList = new ArrayList(); while (!abstractHessianInput.IsEnd()) { arrayList.Add(abstractHessianInput.ReadInt()); } abstractHessianInput.ReadEnd(); sbyte[] arrData = new sbyte[arrayList.Count]; for (int i = 0; i < arrData.Length; i++) { arrData[i] = (sbyte)arrayList[i]; } abstractHessianInput.AddRef(arrData); return(arrData); } } case STRING_ARRAY: { if (intLength >= 0) { string[] arrData = new String[intLength]; abstractHessianInput.AddRef(arrData); for (int i = 0; i < arrData.Length; i++) { arrData[i] = abstractHessianInput.ReadString(); } abstractHessianInput.ReadEnd(); return(arrData); } else { ArrayList arrayList = new ArrayList(); while (!abstractHessianInput.IsEnd()) { arrayList.Add(abstractHessianInput.ReadString()); } abstractHessianInput.ReadEnd(); string[] arrData = new String[arrayList.Count]; abstractHessianInput.AddRef(arrData); for (int i = 0; i < arrData.Length; i++) { arrData[i] = (string)arrayList[i]; } return(arrData); } } case BOOLEAN_ARRAY: { if (intLength >= 0) { bool[] arrData = new bool[intLength]; abstractHessianInput.AddRef(arrData); for (int i = 0; i < arrData.Length; i++) { arrData[i] = abstractHessianInput.ReadBoolean(); } abstractHessianInput.ReadEnd(); return(arrData); } else { ArrayList arrayList = new ArrayList(); while (!abstractHessianInput.IsEnd()) { arrayList.Add(abstractHessianInput.ReadBoolean()); } abstractHessianInput.ReadEnd(); bool[] arrData = new bool[arrayList.Count]; abstractHessianInput.AddRef(arrData); for (int i = 0; i < arrData.Length; i++) { arrData[i] = (bool)arrayList[i]; } return(arrData); } } case SHORT_ARRAY: { if (intLength >= 0) { short[] arrData = new short[intLength]; abstractHessianInput.AddRef(arrData); for (int i = 0; i < arrData.Length; i++) { arrData[i] = (short)abstractHessianInput.ReadInt(); } abstractHessianInput.ReadEnd(); return(arrData); } else { ArrayList arrayList = new ArrayList(); while (!abstractHessianInput.IsEnd()) { arrayList.Add((short)abstractHessianInput.ReadInt()); } abstractHessianInput.ReadEnd(); short[] arrData = new short[arrayList.Count]; for (int i = 0; i < arrData.Length; i++) { arrData[i] = (short)arrayList[i]; } abstractHessianInput.AddRef(arrData); return(arrData); } } case LONG_ARRAY: { if (intLength >= 0) { long[] arrData = new long[intLength]; abstractHessianInput.AddRef(arrData); for (int i = 0; i < arrData.Length; i++) { arrData[i] = abstractHessianInput.ReadLong(); } abstractHessianInput.ReadEnd(); return(arrData); } else { ArrayList arrayList = new ArrayList(); while (!abstractHessianInput.IsEnd()) { arrayList.Add(abstractHessianInput.ReadLong()); } abstractHessianInput.ReadEnd(); long[] arrData = new long[arrayList.Count]; for (int i = 0; i < arrData.Length; i++) { arrData[i] = (long)arrayList[i]; } abstractHessianInput.AddRef(arrData); return(arrData); } } case FLOAT_ARRAY: { if (intLength >= 0) { float[] arrData = new float[intLength]; abstractHessianInput.AddRef(arrData); for (int i = 0; i < arrData.Length; i++) { arrData[i] = (float)(abstractHessianInput.ReadDouble()); } abstractHessianInput.ReadEnd(); return(arrData); } else { ArrayList arrayList = new ArrayList(); while (!abstractHessianInput.IsEnd()) { arrayList.Add(abstractHessianInput.ReadDouble()); } abstractHessianInput.ReadEnd(); float[] arrData = new float[arrayList.Count]; for (int i = 0; i < arrData.Length; i++) { arrData[i] = (float)arrayList[i]; } abstractHessianInput.AddRef(arrData); return(arrData); } } case DOUBLE_ARRAY: { if (intLength >= 0) { double[] arrData = new double[intLength]; abstractHessianInput.AddRef(arrData); for (int i = 0; i < arrData.Length; i++) { arrData[i] = abstractHessianInput.ReadDouble(); } abstractHessianInput.ReadEnd(); return(arrData); } else { ArrayList arrayList = new ArrayList(); while (!abstractHessianInput.IsEnd()) { arrayList.Add(abstractHessianInput.ReadDouble()); } abstractHessianInput.ReadEnd(); double[] data = new double[arrayList.Count]; abstractHessianInput.AddRef(data); for (int i = 0; i < data.Length; i++) { data[i] = (double)arrayList[i]; } return(data); } } case OBJECT_ARRAY: { if (intLength >= 0) { object[] arrData = new Object[intLength]; abstractHessianInput.AddRef(arrData); for (int i = 0; i < arrData.Length; i++) { arrData[i] = abstractHessianInput.ReadObject(); } abstractHessianInput.ReadEnd(); return(arrData); } else { ArrayList arrayList = new ArrayList(); abstractHessianInput.AddRef(arrayList); // XXX: potential issues here while (!abstractHessianInput.IsEnd()) { arrayList.Add(abstractHessianInput.ReadObject()); } abstractHessianInput.ReadEnd(); object[] arrData = new Object[arrayList.Count]; for (int i = 0; i < arrData.Length; i++) { arrData[i] = arrayList[i]; } return(arrData); } } default: throw new CHessianException("not supperted type for deserialization"); } }
//public new Type GetType() //{ // switch (m_intCode) // { // case BOOLEAN: // return typeof(bool); // case BYTE: // return typeof(byte); // case SHORT: // return typeof(short); // case INTEGER: // return typeof(int); // case LONG: // return typeof(long); // case FLOAT: // return typeof(float); // case DOUBLE: // return typeof(double); // case CHARACTER: // return typeof(char); // case STRING: // return typeof(string); // case DATE: // return typeof(DateTime); // case BOOLEAN_ARRAY: // return typeof(bool[]); // case BYTE_ARRAY: // return typeof(byte[]); // case SHORT_ARRAY: // return typeof(short[]); // case INTEGER_ARRAY: // return typeof(int[]); // case LONG_ARRAY: // return typeof(long[]); // case FLOAT_ARRAY: // return typeof(float[]); // case DOUBLE_ARRAY: // return typeof(double[]); // case CHARACTER_ARRAY: // return typeof(char[]); // case STRING_ARRAY: // return typeof(string[]); // case OBJECT_ARRAY: // return typeof(object[]); // default: // throw new InvalidOperationException(); // } //} #region PUBLIC_METHODS /// <summary> /// Reads the basic (primitive & Date ) data types /// and arrays of them /// </summary> /// <param name="abstractHessianInput">Hessian Input instance</param> /// <exception cref="CHessianException"/> /// <returns>Read object</returns> public override object ReadObject(AbstractHessianInput abstractHessianInput) { switch (m_intCode) { case CSerializationConstants.NULL: { // hessian/3490 abstractHessianInput.ReadObject(); return(null); } case BOOLEAN: return(abstractHessianInput.ReadBoolean()); case BYTE: return((byte)abstractHessianInput.ReadInt()); case SBYTE: return((sbyte)abstractHessianInput.ReadInt()); case FLOAT: return((float)abstractHessianInput.ReadDouble()); case SHORT: return((short)abstractHessianInput.ReadInt()); case INTEGER: return(abstractHessianInput.ReadInt()); case LONG: return(abstractHessianInput.ReadLong()); case DOUBLE: return(abstractHessianInput.ReadDouble()); case STRING: return(abstractHessianInput.ReadString()); case CHARACTER: { //int charResult = abstractHessianInput.ReadInt(); //return (char)charResult; //Bei caucho ist hier ein Bug //TODO:Test string strResult = abstractHessianInput.ReadString(); if (strResult == null || strResult.Length == 0) { return(null); } else { return(strResult[0]); } } case BOOLEAN_ARRAY: case SHORT_ARRAY: case INTEGER_ARRAY: case SBYTE_ARRAY: case LONG_ARRAY: case FLOAT_ARRAY: case DOUBLE_ARRAY: case STRING_ARRAY: { int code = abstractHessianInput.ReadListStart(); switch (code) { case 'N': return(null); case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f: int length = code - 0x10; abstractHessianInput.ReadInt(); return(ReadLengthList(abstractHessianInput, length)); default: String type = abstractHessianInput.ReadType(); length = abstractHessianInput.ReadLength(); return(ReadList(abstractHessianInput, length)); } } case BYTE_ARRAY: return(abstractHessianInput.ReadBytes()); case CHARACTER_ARRAY: { string strResult = abstractHessianInput.ReadString(); if (strResult == null) { return(null); } else { int intLength = strResult.Length; char[] arrChars = new char[intLength]; arrChars = strResult.ToCharArray(); return(arrChars); } } case DATE: long javaTime = abstractHessianInput.ReadUTCDate(); const long timeShift = 62135596800000; DateTime dt = new DateTime((javaTime + timeShift) * 10000, DateTimeKind.Utc); dt = dt.ToLocalTime(); // der Einfachheit halber return(dt); default: throw new CHessianException("not supperted type for deserialization"); } }