Hi,
This is not an issue when I use Xerces-J 2.9.1, but because of a known security
issue our group is supposed to be using 2.11.0. When I execute validation unit
tests with the 2.11.0 Xerces library, tests that passed validation before do
not now. In advance, I will admit the schemas being used are complex, but it
was working and I am wondering if anyone knows what changed and if the behavior
is configurable or pluggable in any way.
The following snippets layout the issue:
SchemaA
xmlns:b="http://www.acme.com/schemas"
<xs:import namespace="http://www.acme.com/schemas"
schemaLocation="SchemaB.xsd"/>
<xs:complexType name="MainType">
<xs:complexContent>
<xs:extension base="MainType">
<xs:group ref="b:MainTypeExtraElements"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="InnerType">
<xs:complexContent>
<xs:extension base="InnerType">
<xs:group ref="b:InnerTypeExtraElements"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
SchemaB
<xs:import namespace="http://www.3rdparty.com/namespace"
schemaLocation="SchemaC.xsd"/>
<xs:import namespace="http://www.3rdparty.com/namespace"
schemaLocation="SchemaD.xsd"/>
<xs:group name="MainTypeExtraElements">
<xs:sequence>
<xs:element name="MainTypeExtra1" type="xs:string" minOccurs="0"/>
<xs:element name="MainTypeExtra2" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:group>
<xs:group name="InnerTypeExtraElements">
<xs:sequence>
<xs:element name="InnerTypeExtra1" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:group>
SchemaC
<xs:complexType name="MainType">
<xs:sequence>
<xs:element name="MainElement1" type="xs:string"/>
<xs:element name="MainElement2" type="xs:boolean" minOccurs="0"/>
<xs:element name="InnerTypeElement" type="InnerType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
SchemaD
<xs:complexType name="InnerType">
<xs:sequence>
<xs:element name="InnerElement1" type="xs:string"/>
<xs:element name="InnerElement2" type="xs:string"/>
</xs:sequence>
</xs:complexType>
In 2.9.1, when XML was validated that had extra elements in the inner type
"InnerType" it would validate fine. With 2.11.0, the validation fails once
InnerTypeExtra1 is traversed complaining that only InnerElement1 or
InnerElement2 is expected. So before when SchemaC would reference InnerType,
the definition from SchemaA was used, but now it seems that the definition from
SchemaD is used. MainTypeExtra1 would likely fail as well if the validation
ever got that far.
Does that follow? Anyone have a solution?
Thanks,
-Christian