in src/main/java/com/vmware/vim25/ws/XmlGenDom.java [223:272]
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 MorUtil.createMOR(e.attributeValue("type"), e.getText());
}
else {
ManagedObjectReference[] mos = new ManagedObjectReference[subNodes.size()];
for (int i = 0; i < subNodes.size(); i++) {
Element elem = subNodes.get(i);
mos[i] = MorUtil.createMOR(elem.attributeValue("type"), elem.getText());
}
return mos;
}
}
else if (TypeUtil.isBasicType(type)) {
List<String> vals = new ArrayList<String>();
for (Element subNode : subNodes) {
vals.add(subNode.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 {
Class<?> vimClass = TypeUtil.getVimClass(type);
if(vimClass != null) {
return fromXml(vimClass, subNodes.get(0));
} else {
log.error("Vim class not found for type: " + type + ", XML Document: " + subNodes.get(0).asXML());
return null;
}
}
}