in taverna-wsdl-generic/src/main/java/org/apache/taverna/wsdl/parser/TypeDescriptors.java [173:235]
private TypeDescriptor getElementDescriptor(XmlSchemaElement element) {
TypeDescriptor elementDescriptor;
TypeDescriptor typeDesc;
QName typeName;
if (element.isRef()) {
XmlSchemaRef<XmlSchemaElement> ref = element.getRef();
XmlSchemaElement target = ref.getTarget();
if (target == null) {
QName targetName = ref.getTargetQName();
if (targetName != null) {
target = schemas.getElementByQName(targetName);
}
}
if (target != null) {
typeName = target.getSchemaTypeName();
if (typeName != null) {
typeDesc = getTypeDescriptor(typeName);
} else {
XmlSchemaType xmlSchemaType = target.getSchemaType();
typeDesc = getTypeDescriptor(xmlSchemaType);
}
} else {
return null; // invalid XML Schema...
}
} else {
typeName = element.getSchemaTypeName();
if (typeName != null) {
typeDesc = getTypeDescriptor(typeName);
} else {
XmlSchemaType xmlSchemaType = element.getSchemaType();
typeDesc = getTypeDescriptor(xmlSchemaType);
}
}
if (element.getMaxOccurs() > 1) {
ArrayTypeDescriptor arrayElementDescriptor = new ArrayTypeDescriptor();
arrayElementDescriptor.setElementType(typeDesc);
elementDescriptor = arrayElementDescriptor;
}
else if (typeDesc instanceof ComplexTypeDescriptor) {
ComplexTypeDescriptor complexElementDescr = (ComplexTypeDescriptor)typeDesc;
ComplexTypeDescriptor complexTypeDesc = new ComplexTypeDescriptor();
complexTypeDesc.getElements().addAll(complexElementDescr.getElements());
complexTypeDesc.getAttributes().addAll(complexElementDescr.getAttributes());
elementDescriptor = complexTypeDesc;
} else {
elementDescriptor = new BaseTypeDescriptor();
}
elementDescriptor.setType(typeName == null ? "" : typeName.getLocalPart());
elementDescriptor.setName(element.isRef() ? element.getWireName().getLocalPart() : element.getName());
elementDescriptor.setQname(element.getWireName());
elementDescriptor.setOptional(element.getMinOccurs() == 0);
elementDescriptor.setUnbounded(Long.MAX_VALUE == element.getMaxOccurs());
elementDescriptor.setNillable(element.isNillable());
return elementDescriptor;
}