Hi there,

I found what the issue is in this case.
One of the Schema's constructor (the one which runs from all others) adds a
namespace with prefix=""  and value="http://www.w3.org/2001/XMLSchema";.

While creating the root Schema on the SchemaUnmarshaller constructor, we
have this:

        _schema = new Schema();
        //--initialize the schema to ensure that the default namespace
        //--is not set
        _schema.removeNamespace("");

While resolving the imports, the ImportUnmarshaller class creates a Schema
using:

importedSchema = new Schema();

But does not remove the namespace with prefix="".

W3C defined that we must not implement a simpleType on the
http://www.w3.org/2001/XMLSchema namespace and the code that implements this
verification is doing it fine for me.

Problem is that in case we have an element declared like this:

    <xs:simpleType name="ElectronicAddressString">
        <xs:restriction base="xs:string">
            <xs:maxLength value="100"/>
        </xs:restriction>
    </xs:simpleType>

the "public XMLType getType(String typeName)" method on Schema class will
find no prefix on "ElectronicAddressString" element name and so, take the
namespace with prefix="", by doing this:

        String localName = typeName;
        String prefix = "";
        String ns = null;

        int colon = typeName.indexOf(':');

        if (colon >= 0) {
            localName = typeName.substring(colon + 1);
            prefix = typeName.substring(0,colon);
            ns = _namespaces.getNamespaceURI(prefix);
            if (ns == null)  {
                String err = "Schema#getType: ";
                err += "Namespace prefix not recognised '"+typeName+"'";
                throw new IllegalArgumentException(err);
            }
        }

*        //-- use default namespace if necessary
        if (ns == null) {
            ns = _namespaces.getNamespaceURI(prefix);
        }*

By doing this, on the imported schema, it gets ns being
http://www.w3.org/2001/XMLSchema.
This ns variable is passed to the getSimpleType method, which is where the
exception is thrown, by this:

        else if (namespace.equals(_schemaNamespace)) {
            *result= simpleTypesFactory.getBuiltInType(name);*
            if (result == null)  {
                String err = "getSimpleType: the simple type '"+name+
                                "' is not a built-in type as defined in XML
Schema specification.";
                    throw new IllegalArgumentException(err);
            }
        }

This getBuiltInType will return null as there is not a
ElectronicAddressString on built-in types.

To test it, you probably will make it if you import a Schema that has no
targetNamespace and declares simpleTypes with no prefixes.

Hope this helps.

I created the jira ticket and added all this info on there.

Thank you.
Fausto.

On Thu, Mar 13, 2008 at 6:23 AM, Werner Guttmann <[EMAIL PROTECTED]>
wrote:

> Sure.
>
> Werner
>
> Fausto wrote:
> > Ok.
> >
> > I will get the code and try to work that around... then I come to you
> > with possible solutions, ok?
> >
> > On Wed, Mar 12, 2008 at 11:15 AM, Ralf Joachim <[EMAIL PROTECTED]
> > <mailto:[EMAIL PROTECTED]>> wrote:
> >
> >     Hi Fausto,
> >
> >     anybody is allowed to do an anonymous checkout of castor. Take a
> look
> >     at: http://castor.codehaus.org/scm.html
> >
> >     Regards
> >     Ralf
> >
> >
> >     Fausto schrieb:
> >      > Ok, I will try to do that.
> >      > Do I have access to the entire codebase, anyway? Or can I do
> >     something
> >      > to have it?
> >      >
> >      > On Tue, Mar 11, 2008 at 6:07 PM, Werner Guttmann
> >      > <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
> >     <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>>
> >     wrote:
> >      >
> >      >     Fausto,
> >      >
> >      >     can you please create a new Jira issue at
> >      >
> >      >     http://jira.codehaus.org/browse/CASTOR
> >      >
> >      >     and attach a working JUnit test case that I can use to replay
> >     your
> >      >     problem ? I am not sure whether we are looking at a bug or
> >     not, but I'd
> >      >     need something to 'play with' to get an educated opinion.
> >      >
> >      >     Regards
> >      >     Werner
> >      >
> >      >     Fausto wrote:
> >      >     > I am having a problem while reading a schema which includes
> >     other
> >      >     schema.
> >      >     > I cannot send the schema information due to business
> >     policies, but
> >      >     I can
> >      >     > create samples.
> >      >     >
> >      >     > My schema goes like this:
> >      >     >
> >      >     > On SchemaOne.xsd:
> >      >     >
> >      >     > <xs:schema xmlns:careq="http://my.schema.SchemaOne.xsd
> >      >     > <http://my.schema.schemaone.xsd/>"
> >      >     > xmlns:xs="http://www.w3.org/2001/XMLSchema";
> >      >     > targetNamespace="http://my.schema.one <
> http://my.schema.one/>"
> >      >     > elementFormDefault="unqualified
> >      >     > " attributeFormDefault="unqualified" version="1.0">
> >      >     >     <xs:include schemaLocation="SchemaTwo.xsd"/>
> >      >     >
> >      >     > On SchemaTwo.xsd:
> >      >     >
> >      >     > <xs:schema xmlns:mv="http://my.schema.SchemaTwo.xsd
> >      >     > <http://my.schema.schematwo.xsd/>"
> >      >     > xmlns:xs="http://www.w3.org/2001/XMLSchema";
> >      >     > elementFormDefault="unqualified"
> >     attributeFormDefault="unqualified"
> >      >     > version="1.0">
> >      >     > (...)
> >      >     >     <xs:simpleType name="MySimpleType">
> >      >     >         <xs:annotation>
> >      >     >
> >     <xs:documentation>------------------</xs:documentation>
> >      >     >
> >     <xs:documentation>------------------</xs:documentation>
> >      >     >         </xs:annotation>
> >      >     >         <xs:restriction base="xs:string">
> >      >     >             <xs:maxLength value="100"/>
> >      >     >         </xs:restriction>
> >      >     >     </xs:simpleType>
> >      >     > (...)
> >      >     >
> >      >     > SchemaOne.xsd does not use the MySimpleType.
> >      >     >
> >      >     > When I try the method read() from a SchemaReader, I get
> >     this error:
> >      >     >
> >      >     > org.exolab.castor.xml.schema.SchemaException: An error
> >     occured at
> >      >     line:
> >      >     > 53: getSimpleType: the simple type 'MySimpleType' is not a
> >      >     built-in type
> >      >     > as defined in XML Schema specification.
> >      >     >     at
> >      >     >
> >      >
> >     org.exolab.castor.xml.schema.reader.ImportUnmarshaller.<init>(
> ImportUnmarshaller.java:203)
> >      >     >     at
> >      >     >
> >      >
> >     org.exolab.castor.xml.schema.reader.SchemaUnmarshaller.startElement(
> SchemaUnmarshaller.java:519)
> >      >     >     at
> >      >     >
> >      >
> >     org.exolab.castor.xml.schema.reader.Sax2ComponentReader.startElement
> (Sax2ComponentReader.java:255)
> >      >     >     at
> >      >     org.apache.xerces.parsers.AbstractSAXParser.startElement
> (Unknown
> >      >     > Source)
> >      >     >     at
> >      >     >
> >      >
> >     org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement
> (Unknown
> >      >     > Source)
> >      >     >     at
> >      >     >
> >      >
> >
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement
> (Unknown
> >      >     > Source)
> >      >     >     at
> >      >     >
> >      >
> >
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch
> (Unknown
> >      >     > Source)
> >      >     >     at
> >      >     >
> >      >
> >     org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument
> (Unknown
> >      >     > Source)
> >      >     >     at
> >     org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> >      >     Source)
> >      >     >     at
> >     org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> >      >     Source)
> >      >     >     at org.apache.xerces.parsers.XMLParser.parse(Unknown
> >     Source)
> >      >     >     at
> >     org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown
> >      >     Source)
> >      >     >     at
> >      >     >
> >      >
> >     org.exolab.castor.xml.schema.reader.SchemaReader.read(
> SchemaReader.java:248)
> >      >     > ( front-end stack trace )
> >      >     > Caused by: org.exolab.castor.xml.schema.SchemaException: An
> >     error
> >      >     > occured at line: 53: getSimpleType: the simple type
> >      >     > 'ElectronicAddressString' is not a built-in type as defined
> >     in XML
> >      >     > Schema specification.
> >      >     >     at
> >      >     >
> >      >
> >     org.exolab.castor.xml.schema.reader.Sax2ComponentReader.startElement
> (Sax2ComponentReader.java:258)
> >      >     >     at
> >      >     org.apache.xerces.parsers.AbstractSAXParser.startElement
> (Unknown
> >      >     > Source)
> >      >     >     at
> >      >     >
> >      >
> >     org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement
> (Unknown
> >      >     > Source)
> >      >     >     at
> >      >     >
> >      >
> >
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement
> (Unknown
> >      >     > Source)
> >      >     >     at
> >      >     >
> >      >
> >
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch
> (Unknown
> >      >     > Source)
> >      >     >     at
> >      >     >
> >      >
> >     org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument
> (Unknown
> >      >     > Source)
> >      >     >     at
> >     org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> >      >     Source)
> >      >     >     at
> >     org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> >      >     Source)
> >      >     >     at org.apache.xerces.parsers.XMLParser.parse(Unknown
> >     Source)
> >      >     >     at
> >     org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown
> >      >     Source)
> >      >     >     at
> >      >     >
> >      >
> >     org.exolab.castor.xml.schema.reader.ImportUnmarshaller.<init>(
> ImportUnmarshaller.java:197)
> >      >     >     ... 41 more
> >      >     >
> >      >     >
> >      >     > I've looked at internet and found something like "this
> happens
> >      >     when the
> >      >     > schema namespace is the same as
> >     http://www.w3.org/2001/XMLSchema";, but
> >      >     > this is not what happens.
> >      >     >
> >      >     > However, the SchemaTwo.xsd does not have a targetNamespace
> >     defined
> >      >     and I
> >      >     > was thinking that if this could be a bug.
> >      >     >
> >      >     > I do not have access to the entire codebase, but I could
> >     find this on
> >      >     > fisheye.codhaus.org <http://fisheye.codhaus.org>
> >     <http://fisheye.codhaus.org>
> >      >     <http://fisheye.codhaus.org/>:
> >      >     >
> >      >     >         SimpleType result = null;
> >      >     >         if (ns == null) {
> >      >     >
> >      >     >             //-- first check user-defined types
> >      >     >             result = (SimpleType)_simpleTypes.get(name);
> >      >     >             if (result != null) {
> >      >     >                 //-- resolve deferred type if necessary
> >      >     >                 if (result.getType() != result) {
> >      >     >                     //-- can result.getType ever return
> null?
> >      >     >                     //-- We can check, just in case.
> >      >     >                     if (result.getType() != null) {
> >      >     >                         result =
> (SimpleType)result.getType();
> >      >     >                         result.setParent(this);
> >      >     >                         _simpleTypes.put(name, result);
> >      >     >                     }
> >      >     >                 }
> >      >     >             }
> >      >     >             //-- otherwise try built-in types
> >      >     >             else {
> >      >     >                 result=
> >     simpleTypesFactory.getBuiltInType(name);
> >      >     >                 //if we have a built-in type not declared
> >     in the good
> >      >     > namespace -> Exception
> >      >     > *                if ( (result != null) &&
> >      >     > (_namespaces.contains(DEFAULT_SCHEMA_NS))) {
> >      >     >                     String err = "getSimpleType: the simple
> >     type
> >      >     '"+name+
> >      >     >                                 "' has not been declared in
> >     XML Schema
> >      >     > namespace.";*
> >      >     >                     throw new
> IllegalArgumentException(err);
> >      >     >                 }
> >      >     >             }
> >      >     >         }
> >      >     >         else if (ns.equals(_schemaNamespace)) {
> >      >     >             result=
> >     simpleTypesFactory.getBuiltInType(canonicalName);
> >      >     >            * if (result == null)  {*
> >      >     > *                 String err = "getSimpleType: the simple
> type
> >      >     > '"+canonicalName+
> >      >     >                                 "' is not a built-in type
> as
> >      >     defined in
> >      >     > XML Schema specification.";*
> >      >     >                     throw new
> IllegalArgumentException(err);
> >      >     >                 }
> >      >     >         }
> >      >     >
> >      >     > There might be a bug with the xsd having no namespace? In
> what
> >      >     cases the
> >      >     > result is null?
> >      >     > Do you need more information?
> >      >     >
> >      >     > I need to solve this as soon as I can, because even setting
> >      >     > setValidation(false); on the reader does not work.
> >      >     >
> >      >     > Thank you,
> >      >     > Fausto.
> >      >
> >      >
> >      >
> >
> ---------------------------------------------------------------------
> >      >     To unsubscribe from this list, please visit:
> >      >
> >      >        http://xircles.codehaus.org/manage_email
> >      >
> >      >
> >      >
> >      >
> >      >
> >      > --
> >      >
> >      > Obrigado,
> >      > Fausto.
> >
> >     --
> >
> >     Syscon Ingenieurbüro für Meß- und Datentechnik GmbH
> >     Ralf Joachim
> >     Raiffeisenstraße 11
> >     72127 Kusterdingen
> >     Germany
> >
> >     Tel.   +49 7071 3690 52
> >     Mobil: +49 173 9630135
> >     Fax    +49 7071 3690 98
> >
> >     Internet: www.syscon.eu
> >     E-Mail: [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
> >
> >     Sitz der Gesellschaft: D-72127 Kusterdingen
> >     Registereintrag: Amtsgericht Stuttgart, HRB 382295
> >     Geschäftsleitung: Jens Joachim, Ralf Joachim
> >
> >
> ---------------------------------------------------------------------
> >     To unsubscribe from this list, please visit:
> >
> >        http://xircles.codehaus.org/manage_email
> >
> >
> >
> >
> >
> > --
> >
> > Obrigado,
> > Fausto.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
>
>    http://xircles.codehaus.org/manage_email
>
>
>


-- 

Obrigado,
Fausto.

Reply via email to