I created an XSD which contains elements with same name but different complex types. For example, the high level XSD looks like - <xs:element name = "Field" type = "ComplexType1"> <xs:element name = "Field" type = "ComplexType2" minOccurs=0> <xs:element name = "Field" type = "ComplexType3"> - while the corresponding XML would be - <Field type="Field1"> <Field type="Field2"> <Field type="Field3"> If I validate this XML against the XSD it works fine. But if I remove the second element from the XML as shown below as it's minOccurs = 0 <Field type="Field1"> <Field type="Field3"> and try to validate it against the XSD it throws an exception as shown below org.xml.sax.SAXParseException: cvc-complex-type.3.1: Value 'Field3' of attribute 'name' of element 'Field' is not valid with respect to the corresponding attrib ute use. Attribute 'name' has a fixed value of 'Field2'. But this works fine with XML SPY without any problems. Could you please let me know why it's happening and is it a bug in Xerces? If it's a bug then is there a work around for this? I am pasting the Actual XSD and XML below for your reference XSD: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:mm2="mm2" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="mm2" attributeFormDefault="unqualified" elementFormDefault="qualified"> <xs:element name="Test_element" type="mm2:Test_Type"> </xs:element> <xs:simpleType name="SHORT_TEXT255_Type"> <xs:restriction base="xs:string"> <xs:maxLength value="255"/> </xs:restriction> </xs:simpleType> <xs:complexType name="Test_Type"> <xs:sequence minOccurs="0" maxOccurs="1"> <xs:choice minOccurs="1" maxOccurs="1"> <xs:element minOccurs="0" name="Field" maxOccurs="1"> <xs:complexType> <xs:simpleContent> <xs:extension base="mm2:SHORT_TEXT255_Type"> <xs:attribute type="xs:string" fixed="Field1" name="name"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:choice> <xs:choice minOccurs="0" maxOccurs="1"> <xs:element minOccurs="0" name="Field" maxOccurs="1"> <xs:complexType> <xs:simpleContent> <xs:extension base="mm2:SHORT_TEXT255_Type"> <xs:attribute type="xs:string" fixed="Field2" name="name"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:choice> <xs:choice minOccurs="1" maxOccurs="1"> <xs:element minOccurs="1" name="Field" maxOccurs="1"> <xs:complexType> <xs:simpleContent> <xs:extension base="mm2:SHORT_TEXT255_Type"> <xs:attribute type="xs:string" fixed="Field3" name="name"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:choice> </xs:sequence> <xs:attribute type="xs:string" fixed="Test" name="type"/> </xs:complexType> </xs:schema> XML: <?xml version="1.0" encoding="UTF-8"?> <!--Sample XML file generated by XMLSPY v5 U (http://www.xmlspy.com)--> <Test_element xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="mm2"> <Field name="Field1">String</Field> <Field name="Field3">String</Field> </Test_element> Exception thrown by Parser (thrown for both SAX and DOM parsing): org.xml.sax.SAXParseException: cvc-complex-type.3.1: Value 'Field3' of attribute 'name' of element 'Field' is not valid with respect to the corresponding attrib ute use. Attribute 'name' has a fixed value of 'Field2'. And here is the code which I am using for parsing /** <p>XML representation of boolean "true".</p>*/ private static final String YES = "yes"; /** <p>XML representation of boolean "false".</p>*/ private static final String NO = "no"; /** <p>Character encoding used when reading files.</p>*/ private static final String CHAR_ENCODING = "UTF8"; /** <p>Sets the namespace aware property for parsers</p>*/ private static final boolean NAME_SPACE_AWARE = true; /** <p>Sets the validating property for parsers</p>*/ private static final boolean VALIDATING = true; /** <p>Defines schema language to be used by parser for validation.</p>*/ private static final String SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/proper ties/schemaLanguage"; /** * <p>The URI value of schema language specification property. This value supports W3C XML * Schema specification to be compliant with JAXP 1.2 specification.</p> */ private static final String SCHEMA_LANGUAGE_VAL = "http://www.w3.org/2001/XMLSchema"; private static final String SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/pro perties/schemaSource"; public static void SaxParser(String[] args) { try { Reader xmlReader; Reader xsdReader; xmlReader = new FileReader ("E:\\apps\\parsertest\\Untitled2.xml"); xsdReader = new FileReader ("E:\\apps\\parsertest\\Untitled2.xsd"); SAXParserFactory factory = SAXParserFactory.newInstance(); // Configure SAXParserFactory to provide parsers that are namespace aware. factory.setNamespaceAware(NAME_SPACE_AWARE); // Configure SAXParserFactory to provide parsers that are validating. This property // must have the value true for any of the property strings defined below to take // effect. factory.setValidating(VALIDATING); SAXParser parser = factory.newSAXParser(); // Setting the schema language for xml schema validation parser.setProperty(SCHEMA_LANGUAGE, SCHEMA_LANGUAGE_VAL); // Setting the schema source for xml schema validation parser.setProperty(SCHEMA_SOURCE, new InputSource(xsdReader)); DefaultHandler handler = new XmlDefaultHandler(); parser.parse(new InputSource(xmlReader), handler); } catch (FactoryConfigurationError e) { System.out.println(e.toString()); } catch (ParserConfigurationException e) { System.out.println(e.toString()); } catch (SAXException e) { System.out.println(e.toString()); } catch (IOException e) { System.out.println(e.toString()); } } public static void DomParser() { try { Reader xmlReader; Reader xsdReader; xmlReader = new FileReader ("E:\\apps\\parsertest\\validrequest-create-approveedit.xml"); xsdReader = new FileReader ("E:\\apps\\parsertest\\Untitled1.xsd"); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // Configure SAXParserFactory to provide parsers that are namespace aware. factory.setNamespaceAware(NAME_SPACE_AWARE); // Configure SAXParserFactory to provide parsers that are validating. This property // must have the value true for any of the property strings defined below to take // effect. factory.setValidating(VALIDATING); // Setting the schema language for xml schema validation factory.setAttribute(SCHEMA_LANGUAGE, SCHEMA_LANGUAGE_VAL); // Setting the schema source for xml schema validation factory.setAttribute(SCHEMA_SOURCE, new InputSource(xsdReader)); DocumentBuilder builder = factory.newDocumentBuilder(); //DefaultHandler handler = new XmlDefaultHandler(); builder.parse(new InputSource(xmlReader)); } catch (FactoryConfigurationError e) { System.out.println(e.toString()); } catch (ParserConfigurationException e) { System.out.println(e.toString()); } catch (SAXException e) { System.out.println(e.toString()); } catch (IOException e) { System.out.println(e.toString()); } } /** * <p>Provides <code>DefaultHandler</code> implementation to handles callbacks during parsing * and validation of XML documents. Returns the <code>Exception</code> as it is if any failure * occurs.</p> */ public static class XmlDefaultHandler extends DefaultHandler { /** * @see org.xml.sax.ErrorHandler#error(SAXParseException) */ public void error(SAXParseException spe) throws SAXException { throw spe; } /** * @see org.xml.sax.ErrorHandler#fatalError(SAXParseException) */ public void fatalError(SAXParseException spe) throws SAXException { throw spe; }