return clsDesc;
// Use super class to create class descriptor. Field descriptors will be
// generated only for supported fields, see createFieldDesc later on.
clsDesc = super.createDescriptor( clsMap );
MapTo mapTo = clsMap.getMapTo();
if (( mapTo == null) || (mapTo.getXml() == null)) {
String clsName = clsDesc.getJavaClass().getName();
int idx = clsName.lastIndexOf('.');
if (idx >= 0) {
clsName = clsName.substring(idx+1);
}
xmlName = _naming.toXMLName( clsName );
}
else {
xmlName = clsMap.getMapTo().getXml();
}
XMLClassDescriptorImpl xmlClassDesc
= new XMLClassDescriptorAdapter( clsDesc, xmlName, _primitiveNodeType );
if (clsMap.getAutoComplete()) {
XMLClassDescriptor referenceDesc = null;
Class type = xmlClassDesc.getJavaClass();
//-- check compiled descriptors
ClassDescriptorResolverImpl cdr
= new ClassDescriptorResolverImpl();
cdr.setIntrospection(false);
referenceDesc = cdr.resolve(type);
if (referenceDesc == null) {
Introspector introspector = new Introspector();
try {
referenceDesc = introspector.generateClassDescriptor(type);
} catch (MarshalException mx) {
String error = "unable to introspect class '" +
type.getName() + "' for auto-complete: ";
throw new MappingException(error + mx.getMessage());
}
}
//-- check for identity
String identity = "";
if (clsMap.getIdentityCount() > 0)
identity = clsMap.getIdentity(0);
FieldDescriptor[] fields = xmlClassDesc.getFields();
// Attributes
XMLFieldDescriptor[] introFields = referenceDesc.getAttributeDescriptors();
for (int i = 0; i<introFields.length; ++i) {
if (!isMatchFieldName(fields, introFields[i].getFieldName())) {
// If there is no field with this name, we can add it
if (introFields[i].getFieldName().equals(identity)) {
xmlClassDesc.setIdentity(introFields[i]);
}
else {
xmlClassDesc.addFieldDescriptor(introFields[i]);
}
}
}
// Elements
introFields = referenceDesc.getElementDescriptors();
for (int i = 0; i<introFields.length; ++i) {
if (!isMatchFieldName(fields, introFields[i].getFieldName())) {
// If there is no field with this name, we can add it
if (introFields[i].getFieldName().equals(identity)) {
xmlClassDesc.setIdentity(introFields[i]);
}
else {
xmlClassDesc.addFieldDescriptor(introFields[i]);
}
}
}
// Content
XMLFieldDescriptor field = referenceDesc.getContentDescriptor();
if (field!= null)
if (isMatchFieldName(fields, field.getFieldName()))
// If there is no field with this name, we can add
xmlClassDesc.addFieldDescriptor(field);
} //-- End of auto-complete
//-- copy ns-uri + ns-prefix
if (mapTo != null) {
xmlClassDesc.setNameSpacePrefix(mapTo.getNsPrefix());
xmlClassDesc.setNameSpaceURI(mapTo.getNsUri());
}
return xmlClassDesc;
} //-- createDescriptor