in xmlschema-core/src/main/java/org/apache/ws/commons/schema/XmlSchemaSerializer.java [2139:2209]
Element serializeSimpleTypeUnion(Document doc, XmlSchemaSimpleTypeUnion unionObj, XmlSchema schema)
throws XmlSchemaSerializerException {
Element union = createNewElement(doc, "union", schema.getSchemaNamespacePrefix(),
XmlSchema.SCHEMA_NS);
if (unionObj.getId() != null) {
union.setAttributeNS(null, "id", unionObj.getId());
}
if (unionObj.getMemberTypesSource() != null) {
QName[] memberTypesQNames = unionObj.getMemberTypesQNames();
for (QName qn : memberTypesQNames) {
String namespace = qn.getNamespaceURI();
if (namespace.length() != 0 && qn.getPrefix().length() != 0) {
String prefix = schemaNamespace.get(namespace);
if (!qn.getPrefix().equals(prefix)) {
prefix = union.lookupPrefix(namespace);
}
if (!qn.getPrefix().equals(prefix)) {
union.setAttributeNS(XMLNS_NAMESPACE_URI, "xmlns:" + qn.getPrefix(), qn.getNamespaceURI());
}
}
}
union.setAttributeNS(null, "memberTypes", unionObj.getMemberTypesSource());
} else {
QName[] memberTypesQNames = unionObj.getMemberTypesQNames();
if (memberTypesQNames != null && memberTypesQNames.length > 0) {
StringBuilder memberTypes = new StringBuilder();
for (int i = 0, n = memberTypesQNames.length - 1; i <= n; i++) {
QName memberTypesQName = memberTypesQNames[i];
String namespace = memberTypesQName.getNamespaceURI();
if (namespace.length() != 0) {
String prefix = schemaNamespace.get(namespace);
if (prefix.length() != 0) {
memberTypes.append(prefix).append(':');
}
}
memberTypes.append(memberTypesQName.getLocalPart());
if (i != n) {
memberTypes.append(' ');
}
}
union.setAttributeNS(null, "memberTypes", memberTypes.toString());
}
}
if (unionObj.getBaseTypes().size() > 0) {
int baseTypesLength = unionObj.getBaseTypes().size();
Element baseType;
for (int i = 0; i < baseTypesLength; i++) {
try {
baseType = serializeSimpleType(doc, (XmlSchemaSimpleType)unionObj.getBaseTypes().get(i),
schema);
union.appendChild(baseType);
} catch (ClassCastException e) {
throw new XmlSchemaSerializerException("only inline simple type allow as attribute's "
+ "inline type");
}
}
}
if (unionObj.getAnnotation() != null) {
Element annotation = serializeAnnotation(doc, unionObj.getAnnotation(), schema);
union.appendChild(annotation);
}
// process extension
processExtensibilityComponents(unionObj, union);
return union;
}