--- schema/src/main/java/org/exolab/castor/xml/schema/writer/SchemaWriter.java (revision 7947)
+++ schema/src/main/java/org/exolab/castor/xml/schema/writer/SchemaWriter.java (working copy)
@@ -76,6 +76,7 @@
import org.exolab.castor.xml.schema.IdentitySelector;
import org.exolab.castor.xml.schema.KeyRef;
import org.exolab.castor.xml.schema.ModelGroup;
+import org.exolab.castor.xml.schema.Particle;
import org.exolab.castor.xml.schema.RedefineSchema;
import org.exolab.castor.xml.schema.Schema;
import org.exolab.castor.xml.schema.SchemaContext;
@@ -793,7 +794,7 @@
break;
case Structure.MODELGROUP:
case Structure.GROUP:
- processGroup((Group)structure, schemaPrefix);
+ processGroup(contentExactlyOneChild((Group)structure), schemaPrefix);
break;
case Structure.WILDCARD:
processWildcard((Wildcard)structure, schemaPrefix);
@@ -1024,8 +1025,8 @@
}
}
- else {
- ELEMENT_NAME += group.getOrder().toString();
+ else{
+ ELEMENT_NAME += group.getOrder().toString();
}
_atts.clear();
@@ -1368,7 +1369,7 @@
}
if (!temp.isRedefined() && !found)
- processGroup(temp, schemaPrefix);
+ processGroup(contentExactlyOneChild(temp), schemaPrefix);
}
@@ -1530,7 +1531,7 @@
enumeration = schema.enumerateGroups();
while (enumeration.hasMoreElements()) {
ModelGroup group= (ModelGroup)enumeration.nextElement();
- processGroup(group, schemaPrefix);
+ processGroup(contentExactlyOneChild(group), schemaPrefix);
}
enumeration = schema.enumerateAttributeGroups();
@@ -1794,4 +1795,17 @@
}
return base;
}
+
+ private Group contentExactlyOneChild (Group group) {
+ ContentModelGroup contentModel = group.getContentModelGroup();
+ if (contentModel.getParticleCount() == 1) {
+ Particle particle = contentModel.getParticle(0);
+ if (particle.getStructureType() == Structure.GROUP) {
+ if ((group.getMinOccurs() == 1) && (group.getMaxOccurs() == 1)) {
+ return (Group) particle;
+ }
+ }
+ }
+ return group;
+ }
} Index: schema/src/test/java/org/castor/xml/schema/ComplexTypeTest.java
Werner,
I do update source code and run {mvn clean test} and report no error. Could you please include the error message?