Here's what you want to do instead:

    private void checkIdentityConstraints(SchemaType _st)
    {       
        if (_st.getContentType() == SchemaType.ELEMENT_CONTENT
                || _st.getContentType() == SchemaType.MIXED_CONTENT)
        {
            SchemaParticle particle = _st.getContentModel();
            checkIdentityConstraints(particle);
        }
    }

    private void checkIdentityConstraints(SchemaParticle particle)
            switch (particle.getParticleType())
            {
                case SchemaParticle.ELEMENT:
                    printParticle((SchemaLocalElement) particle);
                   break;
                case SchemaParticle.CHOICE:
                case SchemaParticle.SEQUENCE:
                case SchemaParticle.ALL:
                    SchemaParticle[] pchildren =
particle.getParticleChildren();
                    if (pchildren != null)
                    {    
                        for (SchemaParticle pchild : pchildren)
                        {
                             checkIdentityConstraints(pchild);

                                ....
 
I haven't actually run this code, but you get the idea...

Radu

-----Original Message-----
From: Les Walker [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, May 23, 2007 2:02 PM
To: [email protected]
Subject: Cannot find SchemaIdentityConstraints in particles

Hi

this question is related to an earlier related post
http://www.mail-archive.com/user%40xmlbeans.apache.org/msg02224.html


We are unable to retrieve some of the identity constraints from their
associated particles in the generated type system.  The content model of
each complex type is traversed as described below, and we find that many
of the constraints are missing. After some investigation, I was led to
think it was possibly due to pointless particles in the schema that were
being ignored - but I still see the particles that have the constraints
defined against them. 

The following test schema illustrates what is happening:

        <xs:element name="testdesign" type="con:testdesign"/>

        <xs:complexType name="testdesign">
                <xs:sequence>
                        <xs:element name="testroot" type="con:testroot">
                                <xs:key name="elementAKey">
                                        <xs:selector
xpath="./con:elementA"/>
                                        <xs:field xpath="@name"/>
                                </xs:key>
                        </xs:element>
                        <xs:element name="testRoot2" type="xs:string"/>
                </xs:sequence>
        </xs:complexType>

When there is more than one element in the above sequence, the
constraint "elementAKey" cannot be found - nor can any particles for the
"testdesign" type. When element "testroot2" is removed, then
"elementAKey" is found.

Constraints are being searched as follows (note: only global types are
defined in schema):

              for(SchemaType type:sts.globalTypes())
            {
                checkIdentityConstraints(type);
            }

    private void checkIdentityConstraints(SchemaType _st)
    {       
        if (_st.getContentType() == SchemaType.ELEMENT_CONTENT
                || _st.getContentType() == SchemaType.MIXED_CONTENT)
        {
            SchemaParticle particle = _st.getContentModel();
            switch (particle.getParticleType())
            {
                case SchemaParticle.ELEMENT:
                    printParticle(_st);
                   break;
                case SchemaParticle.CHOICE:
                case SchemaParticle.SEQUENCE:
                case SchemaParticle.ALL:
                    SchemaParticle[] pchildren =
particle.getParticleChildren();
                    if (pchildren != null)
                    {    
                        for (SchemaParticle pchild : pchildren)
                        {
                            SchemaType childType = pchild.getType();
                            if(childType!=null)
                            {   
                                printParticle(childType);      
                                checkIdentityConstraints(childType);

                                ....


The validation of documents appears to work correctly and detects
violations of these "missing" constraints and I can find it directly
with  SchemaTypeSystem.findIdentityConstraintRef().  So it seems there
is still a flaw in the algorithm (?). 


thanks again for any assistance

Les





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Notice:  This email message, together with any attachments, may contain 
information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated 
entities,  that may be confidential,  proprietary,  copyrighted  and/or legally 
privileged, and is intended solely for the use of the individual or entity 
named in this message. If you are not the intended recipient, and have received 
this message in error, please immediately return this by email and then delete 
it.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to