in taverna-wsdl-generic/src/main/java/org/apache/taverna/wsdl/xmlsplitter/XMLSplitterSerialisationHelper.java [183:253]
private static TypeDescriptor buildTypeDescriptorFromElement(
Element element, HashMap<String, TypeDescriptor> existingsTypes) {
TypeDescriptor result = null;
if (element.getAttributeValue("id") != null) {
TypeDescriptor stored = existingsTypes.get(element
.getAttributeValue("id"));
if (stored == null)
logger.fatal("Missing reference to parent type with id="
+ element.getAttributeValue("id"));
else {
result = createFromCache(stored, element);
}
}
if (result == null) {
if (element.getName().equalsIgnoreCase("complextype")) {
result = new ComplexTypeDescriptor();
populateDescriptor(element, result);
existingsTypes.put(result.getQname().toString(), result);
Element elements = element.getChild("elements", XScuflNS);
for (Iterator<?> iterator = elements.getChildren().iterator(); iterator
.hasNext();) {
Element childElement = (Element) iterator.next();
((ComplexTypeDescriptor) result).getElements().add(
buildTypeDescriptorFromElement(childElement,
existingsTypes));
}
Element attributes = element.getChild("attributes", XScuflNS);
if (attributes != null) {
for (Iterator<?> iterator = attributes.getChildren().iterator(); iterator
.hasNext();) {
Element childElement = (Element) iterator.next();
((ComplexTypeDescriptor) result).getAttributes().add(
buildTypeDescriptorFromElement(childElement,
existingsTypes));
}
}
} else if (element.getName().equalsIgnoreCase("arraytype")) {
result = new ArrayTypeDescriptor();
populateDescriptor(element, result);
existingsTypes.put(result.getQname().toString(), result);
Element elementType = element.getChild("elementtype", XScuflNS);
((ArrayTypeDescriptor) result)
.setElementType(buildTypeDescriptorFromElement(
(Element) elementType.getChildren().get(0),
existingsTypes));
if (element.getAttribute("wrapped") != null) {
((ArrayTypeDescriptor) result).setWrapped(element
.getAttributeValue("wrapped").equalsIgnoreCase(
"true"));
} else {
// prior to the addition of the wrapped attribute, in the
// majority of cases an array
// would not be wrapped if it was flagged as unbounded.
((ArrayTypeDescriptor) result).setWrapped(!result
.isUnbounded());
}
} else if (element.getName().equalsIgnoreCase("basetype")) {
result = new BaseTypeDescriptor();
populateDescriptor(element, result);
} else if (element.getName().equalsIgnoreCase("attribute")) {
result = new AttributeTypeDescriptor();
populateDescriptor(element, result);
}
}
return result;
}