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"; xmlns:xs="
http://www.w3.org/2001/XMLSchema"; targetNamespace="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"; 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:

        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.

-- 

Obrigado,
Fausto.

Reply via email to