in xmlschema-core/src/main/java/org/apache/ws/commons/schema/SchemaBuilder.java [385:490]
XmlSchemaElement handleElement(XmlSchema schema, Element el, Element schemaEl, boolean isGlobal) {
XmlSchemaElement element = new XmlSchemaElement(schema, isGlobal);
if (el.getAttributeNode("name") != null) {
element.setName(el.getAttribute("name"));
}
// String namespace = (schema.targetNamespace==null)?
// "" : schema.targetNamespace;
boolean isQualified = schema.getElementFormDefault() == XmlSchemaForm.QUALIFIED;
isQualified = handleElementForm(el, element, isQualified);
handleElementName(isGlobal, element, isQualified);
handleElementAnnotation(el, element);
handleElementGlobalType(el, element);
Element simpleTypeEl;
Element complexTypeEl;
Element keyEl;
Element keyrefEl;
Element uniqueEl;
simpleTypeEl = XDOMUtil.getFirstChildElementNS(el, XmlSchema.SCHEMA_NS, "simpleType");
if (simpleTypeEl != null) {
XmlSchemaSimpleType simpleType = handleSimpleType(schema, simpleTypeEl, schemaEl, false);
element.setSchemaType(simpleType);
element.setSchemaTypeName(simpleType.getQName());
} else {
complexTypeEl = XDOMUtil.getFirstChildElementNS(el, XmlSchema.SCHEMA_NS, "complexType");
if (complexTypeEl != null) {
element.setSchemaType(handleComplexType(schema, complexTypeEl, schemaEl, false));
}
}
keyEl = XDOMUtil.getFirstChildElementNS(el, XmlSchema.SCHEMA_NS, "key");
if (keyEl != null) {
while (keyEl != null) {
element.getConstraints().add(handleConstraint(keyEl, XmlSchemaKey.class));
keyEl = XDOMUtil.getNextSiblingElementNS(keyEl, XmlSchema.SCHEMA_NS, "key");
}
}
keyrefEl = XDOMUtil.getFirstChildElementNS(el, XmlSchema.SCHEMA_NS, "keyref");
if (keyrefEl != null) {
while (keyrefEl != null) {
XmlSchemaKeyref keyRef = (XmlSchemaKeyref)handleConstraint(keyrefEl, XmlSchemaKeyref.class);
if (keyrefEl.hasAttribute("refer")) {
String name = keyrefEl.getAttribute("refer");
keyRef.refer = getRefQName(name, el);
}
element.getConstraints().add(keyRef);
keyrefEl = XDOMUtil.getNextSiblingElementNS(keyrefEl, XmlSchema.SCHEMA_NS, "keyref");
}
}
uniqueEl = XDOMUtil.getFirstChildElementNS(el, XmlSchema.SCHEMA_NS, "unique");
if (uniqueEl != null) {
while (uniqueEl != null) {
element.getConstraints().add(handleConstraint(uniqueEl, XmlSchemaUnique.class));
uniqueEl = XDOMUtil.getNextSiblingElementNS(uniqueEl, XmlSchema.SCHEMA_NS, "unique");
}
}
if (el.hasAttribute("abstract")) {
element.setAbstractElement(Boolean.valueOf(el.getAttribute("abstract")).booleanValue());
}
if (el.hasAttribute("block")) {
element.setBlock(getDerivation(el, "block"));
}
if (el.hasAttribute("default")) {
element.setDefaultValue(el.getAttribute("default"));
}
if (el.hasAttribute("final")) {
element.setFinalDerivation(getDerivation(el, "final"));
}
if (el.hasAttribute("fixed")) {
element.setFixedValue(el.getAttribute("fixed"));
}
if (el.hasAttribute("id")) {
element.setId(el.getAttribute("id"));
}
if (el.hasAttribute("nillable")) {
element.setNillable(Boolean.valueOf(el.getAttribute("nillable")).booleanValue());
}
if (el.hasAttribute("substitutionGroup")) {
String substitutionGroup = el.getAttribute("substitutionGroup");
element.setSubstitutionGroup(getRefQName(substitutionGroup, el));
}
element.setMinOccurs(getMinOccurs(el));
element.setMaxOccurs(getMaxOccurs(el));
// process extra attributes and elements
processExtensibilityComponents(element, el, true);
return element;
}