in src/com/vmware/vim25/ws/XmlGen.java [88:214]
private static void toXML(StringBuffer sb, String tagName, Class<?> type, Object obj)
{
Class<?> clazz = obj.getClass();
if(clazz.isArray())
{
if(obj.getClass() == TypeUtil.INT_ARRAY_CLASS)
{
int[] objs = (int[]) obj;
for(int i=0; i<objs.length; i++)
{
sb.append("<" + tagName +">");
sb.append(objs[i]);
sb.append("</" + tagName + ">");
}
}
else if(obj.getClass()== TypeUtil.BYTE_ARRAY_CLASS)
{
byte[] objs = (byte[]) obj;
for(int i=0; i<objs.length; i++)
{
sb.append("<" + tagName +">");
sb.append(objs[i]);
sb.append("</" + tagName + ">");
}
}
else if(obj.getClass() == TypeUtil.LONG_ARRAY_CLASS)
{
long[] objs = (long[]) obj;
for(int i=0; i<objs.length; i++)
{
sb.append("<" + tagName +">");
sb.append(objs[i]);
sb.append("</" + tagName + ">");
}
}
else
{
Object[] objs = (Object[]) obj;
for(int i=0; i<objs.length; i++)
{
toXML(sb, tagName, type.getComponentType(), objs[i]);
}
}
}
// from now on, no array type
else if(clazz == ManagedObjectReference.class)
{ //MOR]
ManagedObjectReference mor = (ManagedObjectReference) obj;
if(clazz==type)
{
sb.append("<" + tagName + " type=\"" + mor.type + "\">");
}
else
{
sb.append("<" + tagName + " xsi:type=\"ManagedObjectReference\" type=\"" + mor.type + "\">");
}
sb.append(mor.val);
sb.append("</" + tagName + ">");
}
else if(clazz.getCanonicalName().startsWith("java.lang")) //basic data type
{
if(clazz!=type)
{
sb.append("<" + tagName + " xsi:type=\"" + TypeUtil.getXSIType(obj) + "\">");
}
else
{
sb.append("<" + tagName +">");
}
if(clazz == String.class)
{
String temp = (String) obj;
obj = XmlUtil.escapeForXML(temp);
}
sb.append(obj);
sb.append("</" + tagName + ">");
}
else if(clazz.isEnum()) //enum data type
{
sb.append("<" + tagName +">" + obj + "</" + tagName + ">");
}
else if (obj instanceof Calendar)
{
sb.append("<" + tagName + " xsi:type=\"xsd:dateTime\">" + DatatypeConverter.printDateTime((Calendar)obj) + "</" + tagName + ">");
}
else
{ // VIM type
if(clazz==type)
{
sb.append("<" + tagName + ">");
}
else
{
String nameSpaceType = clazz.getSimpleName();
sb.append("<" + tagName + " xsi:type=\"" + nameSpaceType + "\">");
}
Field[] fields = ReflectUtil.getAllFields(clazz);
for(int i=0; i<fields.length; i++)
{
Field f = fields[i];
String fName = f.getName();
Object value = null;
try
{
value = f.get(obj);
} catch (IllegalAccessException iae)
{
iae.printStackTrace();
}
if(value==null)
{
continue;
}
Class<?> fType = f.getType();
toXML(sb, fName, fType, value);
}
sb.append("</" + tagName + ">");
}
}