code: public static String toTypeName(Object o) {
  	if (o == null) return "null";
  	else if (o instanceof String) return "string";
  	else if (o instanceof Boolean) return "boolean";
  	else if (o instanceof Number) return "int";
  	else if (o instanceof Array) return "array";
  	else if (o instanceof Component) return "component";
  	else if (o instanceof Struct) return "struct";
  	else if (o instanceof Query) return "query";
  	else if (o instanceof DateTime) return "datetime";
  	else if (o instanceof byte[]) return "binary";
  	else if (o instanceof ObjectWrap) {
  	    return toTypeName(((ObjectWrap) o).getEmbededObject(null));
  	}
  
  	Class clazz = o.getClass();
  	String className = clazz.getName();
  	if (className.startsWith("java.lang.")) {
  	    return className.substring(10);
  	}
  	return toClassName(clazz);
      }
docs: return the type name of a object (string, boolean, int aso.), type is not same like class name
  
  @param o Object to get type from
  @return type of the object