[Mono-bugs] [Bug 501763] New: Xml schema validation fails when using xs:import (patch included)
    bugzilla_noreply at novell.com 
    bugzilla_noreply at novell.com
       
    Thu May  7 09:29:00 EDT 2009
    
    
  
http://bugzilla.novell.com/show_bug.cgi?id=501763
           Summary: Xml schema validation fails when using xs:import
                    (patch included)
    Classification: Mono
           Product: Mono: Class Libraries
           Version: 2.4.x
          Platform: i686
        OS/Version: Ubuntu
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: Sys.XML
        AssignedTo: atsushi at ximian.com
        ReportedBy: jonas.larsson at manodo.se
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---
User-Agent:       Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10)
Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10
Please run the following test case:
string xsd1 = @"
<xs:schema id='foo1'
    targetNamespace='foo1'
    elementFormDefault='qualified'
    xmlns='foo1'  
    xmlns:xs='http://www.w3.org/2001/XMLSchema'
    xmlns:f2='foo2'>
    <xs:import namespace='foo2' />
    <xs:element name='Foo1Element' type='f2:Foo2ExtendedType'/>    
</xs:schema>";
string xsd2 = @"
<xs:schema id='foo2'
    targetNamespace='foo2'
    elementFormDefault='qualified'
    xmlns='foo2'    
    xmlns:xs='http://www.w3.org/2001/XMLSchema' >
    <xs:element name='Foo2Element' type='Foo2Type' />
    <xs:complexType name='Foo2Type'>
        <xs:attribute name='foo2Attr' type='xs:string' use='required'/>
    </xs:complexType>
    <xs:complexType name='Foo2ExtendedType'>
        <xs:complexContent>
<xs:extension base='Foo2Type'>
    <xs:attribute name='foo2ExtAttr' type='xs:string' use='required'/>
</xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:schema>";
XmlDocument doc = new XmlDocument ();
XmlSchema schema1 = XmlSchema.Read (XmlReader.Create (new StringReader (xsd1)),
null);
XmlSchema schema2 = XmlSchema.Read (XmlReader.Create (new StringReader (xsd2)),
null);
doc.LoadXml (@"
    <Foo2Element
        foo2Attr='dummyvalue1'
        xmlns='foo2'
    />");
doc.Schemas.Add (schema2);
doc.Validate (null);
            doc = new XmlDocument();
            doc.LoadXml(@"
    <Foo1Element
        foo2Attr='dummyvalue1'
        foo2ExtAttr='dummyvalue2'
        xmlns='foo1'
    />");
doc.Schemas.Add (schema2);
            doc.Schemas.Add (schema1);
doc.Validate (null);
---------
Running this on mono gives:
System.Xml.Schema.XmlSchemaException: XmlSchema error: Named item foo2Attr was
already contained in the schema object table. Related schema item SourceUri: ,
Line 11, Position 7.
---------
Cause:
When validating second document schema2's types are already compiled and
validated. However, checking IsCompiled the second time returns false since we
have a new validationId on the schema. The result is that schema2's types are
compiled again. On a XmlSchemaComplexType the attributeUses collection then
already contains the results from the previous validation. When validated
again, the above Exception is thrown.
Solution:
Clear XmlSchemaComplexType.attributeUses before Compilation. The patch is a one
liner. Add
attributeUses.Clear()
in the beginning of XmlSchemaComplexType.Compile.
Will upload diff once I've submitted this and gotten a bug number.
Reproducible: Always
Steps to Reproduce:
Run above code
Actual Results:  
Exception
Expected Results:  
Successful validation
-- 
Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
    
    
More information about the mono-bugs
mailing list