Element serializeElement()

in src/main/java/org/apache/ws/commons/schema/XmlSchemaSerializer.java [1024:1110]


    Element serializeElement(Document doc, XmlSchemaElement elementObj, XmlSchema schema)
        throws XmlSchemaSerializerException {
        Element serializedEl = createNewElement(doc, "element", schema.getSchemaNamespacePrefix(),
                                                XmlSchema.SCHEMA_NS);

        if (elementObj.getRef().getTargetQName() != null) {

            String resolvedName = resolveQName(elementObj.getRef().getTargetQName(), schema);
            serializedEl.setAttribute("ref", resolvedName);
        } else if (!elementObj.isAnonymous()) {
            serializedEl.setAttribute("name", elementObj.getName());
        }

        if (elementObj.isAbstractElement()) {
            serializedEl.setAttribute("abstract", "true");
        }

        if (elementObj.getBlock() != null && elementObj.getBlock() != XmlSchemaDerivationMethod.NONE) {
            serializedEl.setAttribute("block", elementObj.getBlock().toString());
        }
        if (elementObj.getDefaultValue() != null) {
            serializedEl.setAttribute("default", elementObj.getDefaultValue());
        }

        if (elementObj.getFinalDerivation() != null
            && elementObj.getFinalDerivation() != XmlSchemaDerivationMethod.NONE) {
            serializedEl.setAttribute("final", elementObj.getFinalDerivation().toString());
        }
        if (elementObj.getFixedValue() != null) {
            serializedEl.setAttribute("fixed", elementObj.getFixedValue());
        }

        if (elementObj.isFormSpecified()) {
            serializedEl.setAttribute("form", elementObj.getForm().toString());
        }

        if (elementObj.getId() != null) {
            serializedEl.setAttribute("id", elementObj.getId());
        }

        serializeMaxMinOccurs(elementObj, serializedEl);

        if (elementObj.getSubstitutionGroup() != null) {
            String resolvedQName = resolveQName(elementObj.getSubstitutionGroup(), schema);
            serializedEl.setAttribute("substitutionGroup", resolvedQName);
        }
        if (elementObj.getSchemaTypeName() != null) {
            String resolvedName = resolveQName(elementObj.getSchemaTypeName(), schema);
            serializedEl.setAttribute("type", resolvedName);
        }
        if (elementObj.getAnnotation() != null) {
            Element annotationEl = serializeAnnotation(doc, elementObj.getAnnotation(), schema);
            serializedEl.appendChild(annotationEl);
        }
        if (elementObj.getSchemaType() != null && elementObj.getSchemaTypeName() == null) {
            if (elementObj.getSchemaType() instanceof XmlSchemaComplexType) {

                Element complexType =
                    serializeComplexType(doc,
                                         (XmlSchemaComplexType)elementObj.getSchemaType(),
                                         schema);
                serializedEl.appendChild(complexType);
            } else if (elementObj.getSchemaType() instanceof XmlSchemaSimpleType) {
                Element simpleType = serializeSimpleType(doc, (XmlSchemaSimpleType)elementObj.getSchemaType(),
                                                         schema);
                serializedEl.appendChild(simpleType);
            }
        }
        if (elementObj.getConstraints().size() > 0) {
            for (int i = 0; i < elementObj.getConstraints().size(); i++) {
                Element constraint = serializeIdentityConstraint(
                                                                 doc,
                                                                 (XmlSchemaIdentityConstraint)
                                                                 elementObj.getConstraints()
                                                                     .get(i), schema);
                serializedEl.appendChild(constraint);
            }
        }
        if (elementObj.isNillable()) {
            serializedEl.setAttribute("nillable", "true");
        }

        // process extension
        processExtensibilityComponents(elementObj, serializedEl);

        return serializedEl;
    }