in xbean-spring/src/main/java/org/apache/xbean/spring/generator/XsdGenerator.java [74:133]
private void generateElementMapping(PrintWriter out, NamespaceMapping namespaceMapping, ElementMapping element) {
out.println();
out.println(" <!-- element for type: " + element.getClassName() + " -->");
String localName = element.getElementName();
out.println(" <xs:element name='" + localName + "'>");
if (!isEmptyString(element.getDescription())) {
out.println(" <xs:annotation>");
out.println(" <xs:documentation><![CDATA[");
out.println(" " + element.getDescription());
out.println(" ]]></xs:documentation>");
out.println(" </xs:annotation>");
}
out.println(" <xs:complexType>");
int complexCount = 0;
for (Iterator iterator = element.getAttributes().iterator(); iterator.hasNext();) {
AttributeMapping attributeMapping = (AttributeMapping) iterator.next();
if (!namespaceMapping.isSimpleType(attributeMapping.getType())) {
complexCount++;
}
}
if (complexCount > 0) {
if(strictOrder){
out.println(" <xs:sequence>");
} else {
out.println(" <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\"><xs:choice>");
}
for (Iterator iterator = element.getAttributes().iterator(); iterator.hasNext();) {
AttributeMapping attributeMapping = (AttributeMapping) iterator.next();
if (!namespaceMapping.isSimpleType(attributeMapping.getType())) {
generateElementMappingComplexProperty(out, namespaceMapping, attributeMapping);
}
}
out.println(" <xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded'/>");
if(strictOrder){
out.println(" </xs:sequence>");
} else {
out.println(" </xs:choice></xs:choice>");
}
}
for (Iterator iterator = element.getAttributes().iterator(); iterator.hasNext();) {
AttributeMapping attributeMapping = (AttributeMapping) iterator.next();
if (namespaceMapping.isSimpleType(attributeMapping.getType())) {
generateElementMappingSimpleProperty(out, attributeMapping);
} else if (!attributeMapping.getType().isCollection()) {
generateElementMappingComplexPropertyAsRef(out, attributeMapping);
}
}
generateIDAttributeMapping(out, namespaceMapping, element);
out.println(" <xs:anyAttribute namespace='##other' processContents='lax'/>");
out.println(" </xs:complexType>");
out.println(" </xs:element>");
out.println();
}