private static void toXML()

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 + ">");
    }
  }