Index: src/main/java/org/exolab/castor/xml/util/XMLClassDescriptorImpl.java =================================================================== --- src/main/java/org/exolab/castor/xml/util/XMLClassDescriptorImpl.java (Revision 6990) +++ src/main/java/org/exolab/castor/xml/util/XMLClassDescriptorImpl.java (Arbeitskopie) @@ -376,7 +376,7 @@ // handle substitution groups !!! List substitutes = expectedElementDescriptor.getSubstitutes(); - if (!substitutes.isEmpty()) { + if (substitutes != null && !substitutes.isEmpty()) { if (substitutes.contains(elementName)) { parentState.expectedIndex++; return; Index: codegen/src/main/java/org/exolab/castor/builder/JClassRegistry.java =================================================================== --- codegen/src/main/java/org/exolab/castor/builder/JClassRegistry.java (Revision 6990) +++ codegen/src/main/java/org/exolab/castor/builder/JClassRegistry.java (Arbeitskopie) @@ -216,6 +216,7 @@ XMLBindingComponent temp = component; temp.setView(referredType); jClass.changeLocalName(temp.getJavaClassName()); + component.setView(annotated); } // String typeXPath = XPathHelper // .getSchemaLocation(referredElement); Index: codegen/src/main/java/org/exolab/castor/builder/descriptors/DescriptorSourceFactory.java =================================================================== --- codegen/src/main/java/org/exolab/castor/builder/descriptors/DescriptorSourceFactory.java (Revision 6990) +++ codegen/src/main/java/org/exolab/castor/builder/descriptors/DescriptorSourceFactory.java (Arbeitskopie) @@ -62,6 +62,7 @@ import org.exolab.castor.builder.types.XSListType; import org.exolab.castor.builder.types.XSType; import org.exolab.castor.xml.XMLConstants; +import org.exolab.castor.xml.XMLFieldDescriptor; import org.exolab.javasource.JClass; import org.exolab.javasource.JConstructor; import org.exolab.javasource.JField; @@ -488,22 +489,33 @@ if (isElement) { // handle substitution groups - List substitutionGroupMembers = member.getSubstitutionGroupMembers(); - jsc.add("java.util.List substitutionGroupes" + member.getName() + addSubstitutionGroups(member, jsc); + } + + //-- Add Validation Code + addValidationCode(member, jsc); + } + + /** + * Adds substitution groups to the {@link XMLFieldDescriptor} instance . + * @param member The {@link FieldInfo} instance holding substitution group information + * @param jsc The {@link JSourceCode} instance to write the substitution groups to. + */ + private void addSubstitutionGroups(final FieldInfo member, final JSourceCode jsc) { + List substitutionGroupMembers = member.getSubstitutionGroupMembers(); + if (!substitutionGroupMembers.isEmpty()) { + jsc.add("// set possible substitutes for member " + member.getName()); + jsc.add("java.util.List substitutionGroups" + member.getName() + " = new java.util.ArrayList();"); Iterator substitutionGroupIter = substitutionGroupMembers.iterator(); while (substitutionGroupIter.hasNext()) { String substitutionGroup = (String) substitutionGroupIter.next(); - jsc.add("substitutionGroupes" + member.getName() + ".add(\""); + jsc.add("substitutionGroups" + member.getName() + ".add(\""); jsc.append(substitutionGroup); jsc.append("\");"); } - jsc.add("desc.setSubstitutes(substitutionGroupes" + member.getName() + ");"); - + jsc.add("desc.setSubstitutes(substitutionGroups" + member.getName() + ");"); } - - //-- Add Validation Code - addValidationCode(member, jsc); } /**