in core/src/main/java/flex/messaging/io/amf/Amf0Input.java [93:211]
protected Object readObjectValue(int type) throws ClassNotFoundException, IOException {
Object value = null;
switch (type) {
case kNumberType:
value = Double.valueOf(readDouble());
break;
case kBooleanType:
value = Boolean.valueOf(readBoolean());
break;
case kStringType:
value = readString();
break;
case kAvmPlusObjectType:
if (avmPlusInput == null) {
avmPlusInput = new Amf3Input(context);
avmPlusInput.setDebugTrace(trace);
avmPlusInput.setInputStream(in);
}
value = avmPlusInput.readObject();
break;
case kStrictArrayType:
value = readArrayValue();
break;
case kTypedObjectType:
String typeName = in.readUTF();
value = readObjectValue(typeName);
break;
case kLongStringType:
ClassUtil.validateCreation(String.class);
value = readLongUTF();
if (isDebug)
trace.writeString((String) value);
break;
case kObjectType:
value = readObjectValue(null);
break;
case kXMLObjectType:
value = readXml();
break;
case kNullType:
if (isDebug)
trace.writeNull();
break;
case kDateType:
value = readDate();
break;
case kECMAArrayType:
value = readECMAArrayValue();
break;
case kReferenceType:
int refNum = in.readUnsignedShort();
if (isDebug)
trace.writeRef(refNum);
value = objectsTable.get(refNum);
break;
case kUndefinedType:
if (isDebug)
trace.writeUndefined();
break;
case kUnsupportedType:
if (isDebug)
trace.write("UNSUPPORTED");
//Unsupported type found in AMF stream.
UnknownTypeException ex = new UnknownTypeException();
ex.setMessage(10302);
throw ex;
case kObjectEndType:
if (isDebug)
trace.write("UNEXPECTED OBJECT END");
//Unexpected object end tag in AMF stream.
UnknownTypeException ex1 = new UnknownTypeException();
ex1.setMessage(10303);
throw ex1;
case kRecordsetType:
if (isDebug)
trace.write("UNEXPECTED RECORDSET");
//AMF Recordsets are not supported.
UnknownTypeException ex2 = new UnknownTypeException();
ex2.setMessage(10304);
throw ex2;
default:
if (isDebug)
trace.write("UNKNOWN TYPE");
UnknownTypeException ex3 = new UnknownTypeException();
ex3.setMessage(10301, new Object[]{new Integer(type)});
throw ex3;
}
return value;
}