private Object fromXML()

in src/com/vmware/vim25/ws/XmlGenDom.java [144:199]


  private Object fromXML(String type, Element root) throws Exception
  {
    List<Element> subNodes = root.elements();
    
    if(subNodes.size()==0)
    {
      return null;
    }
    
    if(type.startsWith("ManagedObjectReference"))
    {
    	if(! type.endsWith("[]"))
    	{
    		Element e = subNodes.get(0);
    		return createMOR(e.attributeValue("type"), e.getText());
    	}
    	else
    	{
        ManagedObjectReference[] mos = new ManagedObjectReference[subNodes.size()];
        for(int i=0; i<subNodes.size(); i++)
        {
          Element elem = (Element) subNodes.get(i);
          mos[i] = createMOR(elem.attributeValue("type"), elem.getText());
        }
        return mos;
    	}
    }
    else if(TypeUtil.isBasicType(type))
    {
      List<String> vals = new ArrayList<String>();
      for(int i=0; i<subNodes.size(); i++)
      {
        vals.add(subNodes.get(i).getText());
      }
      return ReflectUtil.parseToObject(type, vals);
    }
    else if(type.endsWith("[]"))
    { // array type
      String arrayItemTypeName = type.substring(0, type.length()-2);
      Class<?> clazz = TypeUtil.getVimClass(arrayItemTypeName);
      Object ao = Array.newInstance(clazz, subNodes.size());

      for(int i=0; i<subNodes.size(); i++)
      {
     	  Element e = subNodes.get(i);
     	  String xsiType = e.attributeValue(SoapConsts.XSI_TYPE);
        Object o = fromXml(TypeUtil.getVimClass(xsiType==null? arrayItemTypeName : xsiType), subNodes.get(i));
        Array.set(ao, i, o);
      }
      return ao;
    }
    else
    {
      return fromXml(TypeUtil.getVimClass(type), subNodes.get(0));
    }
  }