| Checks if binding declarations are placed where they are allowed.
For example, if a <jaxb:property> customization is given under
the <xs:simpleContent> element, this class raises an error.
our main checkpoint of misplaced customizations are in BGMBuilder.
There, we mark a customization whenever we use it. At the end of the
day, we look for unmarked customizations and raise errors for them.
Between this approach and the JAXB spec 1.0 is a problem that
the spec allows/prohibits customizations at schema element level,
while BGMBuilder and XSOM works on schema component levels.
For example, a property customization is allowed on a complex type
schema component, but it's only allowed on the <complexType>
element. The spec team informed us that they would consider resolving
this discrepancy in favor of RI, but meanwhile we need to detect
errors correctly.
This filter is implemented for this purpose.
Customization and allowed locations
- globalBinding/schemaBinding
schema
- class
complexType(*), modelGroupDecl, modelGroup, element
- property
attribute, element, any, modelGroup, modelGroupRef, complexType(*)
- javaType
simpleType(*)
- typesafeEnumClass
simpleType(*)
- typesafeEnumMember
simpleType(*), enumeration
Components marked with '*' needs a check by this component
since more than one schema element corresponds to one schema component
of that type.
For simple types, customizations are allowed only under the <xs:simpleType>
element, and for complex types they are allowed only under the
<xs:cimplexType> element.
So the bottom line is that it would be suffice if we just make sure
that no customization will be attached under other elements of
simple types and complex types. Those are:
- simpleType/restriction
- list
- union
- complexType/(simple or complex)Content
- complexType/(simple or complex)Content/(restriction of extension)
author: Kohsuke Kawaguchi (kohsuke.kawaguchi@sun.com) |