in src/main/java/com/vmware/vim25/ws/XmlGen.java [91:195]
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 obj1 : objs) {
sb.append("<").append(tagName).append(">");
sb.append(obj1);
sb.append("</").append(tagName).append(">");
}
}
else if (obj.getClass() == TypeUtil.BYTE_ARRAY_CLASS) {
byte[] objs = (byte[]) obj;
for (byte obj1 : objs) {
sb.append("<").append(tagName).append(">");
sb.append(obj1);
sb.append("</").append(tagName).append(">");
}
}
else if (obj.getClass() == TypeUtil.LONG_ARRAY_CLASS) {
long[] objs = (long[]) obj;
for (long obj1 : objs) {
sb.append("<").append(tagName).append(">");
sb.append(obj1);
sb.append("</").append(tagName).append(">");
}
}
else {
Object[] objs = (Object[]) obj;
for (Object obj1 : objs) {
toXML(sb, tagName, type.getComponentType(), obj1);
}
}
}
// from now on, no array type
else if (clazz == ManagedObjectReference.class) { //MOR]
ManagedObjectReference mor = (ManagedObjectReference) obj;
if (clazz == type) {
sb.append("<").append(tagName).append(" type=\"").append(mor.type).append("\">");
}
else {
sb.append("<").append(tagName).append(" xsi:type=\"ManagedObjectReference\" type=\"").append(mor.type).append("\">");
}
sb.append(mor.val);
sb.append("</").append(tagName).append(">");
}
else if (clazz.getCanonicalName().startsWith("java.lang")) //basic data type
{
if (clazz != type) {
sb.append("<").append(tagName).append(" xsi:type=\"").append(TypeUtil.getXSIType(obj)).append("\">");
}
else {
sb.append("<").append(tagName).append(">");
}
if (clazz == String.class) {
String temp = (String) obj;
obj = XmlUtil.escapeForXML(temp);
}
sb.append(obj);
sb.append("</").append(tagName).append(">");
}
else if (clazz.isEnum()) //enum data type
{
sb.append("<").append(tagName).append(">").append(obj).append("</").append(tagName).append(">");
}
else if (obj instanceof Calendar) {
sb.append("<").append(tagName).append(" xsi:type=\"xsd:dateTime\">").append(DatatypeConverter.printDateTime((Calendar) obj)).append("</").append(tagName).append(">");
}
else { // VIM type
if (clazz == type) {
sb.append("<").append(tagName).append(">");
}
else {
String nameSpaceType = clazz.getSimpleName();
sb.append("<").append(tagName).append(" xsi:type=\"").append(nameSpaceType).append("\">");
}
Field[] fields = ReflectUtil.getAllFields(clazz);
for (Field f : fields) {
String fName = f.getName();
Object value = null;
if (!Modifier.isTransient(f.getModifiers())) {
try {
value = f.get(obj);
}
catch (IllegalAccessException iae) {
log.error("IllegalAccessException caught.", iae);
}
}
if (value == null) {
continue;
}
Class<?> fType = f.getType();
toXML(sb, fName, fType, value);
}
sb.append("</").append(tagName).append(">");
}
}