For input like this:

   ...
   <xsd:complexType name="x" />
   ...

when JaxMeXS creates an XSComplexType object, both
isRestriction() and isExtension() return false.

The XML Schema specification says:

   [Definition:]  Except for a distinguished �ur-type definition�,
   every �type definition� is, by construction, either a �restriction�
   or an �extension� of some other type definition.

Therefore, for type x, either isRestriction() should return true or
isExtension() should return true.

(Nothing in the documentation of methods isRestriction() and
isExtension() says that they don't actually represent the concepts
of restriction and extension from XML schema.

(Actually, the documentation contains errors, referring to some elements
even though the methods are on XSComplexType.)


Attached in a test program that demonstrates the problem.

This seems to apply to JaxMeXS in JaxMe 0.3.1, 0.4beta, and
the current default CVS branch (HEAD?).





package test;

import org.apache.ws.jaxme.xs.*;
import org.apache.ws.jaxme.xs.parser.*;
import org.apache.ws.jaxme.xs.xml.*;
import org.xml.sax.*;
import javax.xml.parsers.ParserConfigurationException;


import java.io.*;

public class CheckBug_NeitherRestrictedNorExtended
{



    public static void main( String[] args )
        throws Exception
    {
        System.err.println( "Checking bug: both isRestriction() and"
                            + " isExtension() return false..." );
        String schemaContent =
            " "
            + "<xsd:schema "
            + "  xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"; "
            + "  xmlns:xsdi=\"http://www.w3.org/2001/XMLSchema-instance\"; "
            + "  xsdi:schemaLocation=\"http://www.w3.org/2001/XMLSchema "
            + "  http://www.w3.org/2001/XMLSchema.xsd\"; "
            + "  > "
            + "  <xsd:complexType name=\"x\" /> "
            + "</xsd:schema> "
            ;

            InputSource source = 
                new InputSource( new ByteArrayInputStream( 
                                     schemaContent.getBytes( "ASCII" ) ) );
            source.setSystemId( "someScheme://x/whatever");

            XSParser parser = new XSParser();
            XSSchema schema = parser.parse( source );

            XSType type = schema.getTypes()[ 0 ];
            XSComplexType complexType = type.getComplexType();

            /**
               Symptom:  
             */
            
            if ( ! complexType.isRestriction() 
                 && ! complexType.isExtension() ) {
                System.err.println( "apparent bug still exists" );
            }
            else if ( complexType.isRestriction() == ! 
                      complexType.isExtension() ) {
                System.err.println( "bug seems to be fixed" );
            }
            else {
                System.err.println( "bug has changed" );
            }
            
                
    } // main(...)


} // class CheckBug_NeitherRestrictedNorExtended


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

Reply via email to