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] <mailto:[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]>
> <mailto:[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]>>
> <mailto:[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>
> > <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]> <mailto:[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.