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