I've created a small test that illustrates the problem I am having with
a much larger set of schemas.  In this example I'm trying to generate
castor objects for ZRoot.xsd and all the schemas it depends on.
According to xmlspy at least, these schemas are valid, also I am able to
generate these schemas successfully with castor 0.9.5.2.

 

This error occurs whether the -generateImportedSchemas flag is set or
not.

 

ZRoot.xsd is in namespace NS1.  It includes ZDoc.xsd also in NS1.  It
imports ZNS2Doc.xsd from namespace NS2.

ZDoc.xsd imports Zcommon.xsd from NS2.

ZNS2Doc.xsd includes Zcommon.xsd from NS2.

 

This is what happens when I go to generate ZRoot.xsd:

 

C:\src\dci>java -cp
C:\src\dci\schema;C:\src\dci\lib\castor-1.0.5.jar;C:\src\dci

\lib\xerces-J_1.4.0.jar org.exolab.castor.builder.SourceGeneratorMain -i
schema\

ZRoot.xsd -generateImportedSchemas -dest genZ

-- Imported XML Schemas will be processed automatically.

an element declaration already exists with the given name: personName

        at
org.exolab.castor.xml.schema.reader.ImportUnmarshaller.<init>(ImportU

nmarshaller.java:200)

        at
org.exolab.castor.xml.schema.reader.SchemaUnmarshaller.startElement(S

chemaUnmarshaller.java:519)

        at
org.exolab.castor.xml.schema.reader.Sax2ComponentReader.startElement(

Sax2ComponentReader.java:255)

        at
org.apache.xerces.parsers.SAXParser.startElement(SAXParser.java:1340)

 

        at
org.apache.xerces.validators.common.XMLValidator.callStartElement(XML

Validator.java:1197)

        at
org.apache.xerces.framework.XMLDocumentScanner.scanElement(XMLDocumen

tScanner.java:1862)

        at
org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.disp

atch(XMLDocumentScanner.java:1238)

        at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentS

canner.java:381)

        at
org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1035)

        at
org.exolab.castor.builder.SourceGenerator.generateSource(SourceGenera

tor.java:564)

        at
org.exolab.castor.builder.SourceGenerator.generateSource(SourceGenera

tor.java:497)

        at
org.exolab.castor.builder.SourceGeneratorMain.main(SourceGeneratorMai

n.java:245)

Caused by: an element declaration already exists with the given name:
personName

 

        at
org.exolab.castor.xml.schema.reader.Sax2ComponentReader.startElement(

Sax2ComponentReader.java:258)

        at
org.apache.xerces.parsers.SAXParser.startElement(SAXParser.java:1340)

 

        at
org.apache.xerces.validators.common.XMLValidator.callStartElement(XML

Validator.java:1197)

        at
org.apache.xerces.framework.XMLDocumentScanner.scanElement(XMLDocumen

tScanner.java:1862)

        at
org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.disp

atch(XMLDocumentScanner.java:1238)

        at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentS

canner.java:381)

        at
org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1035)

        at
org.exolab.castor.xml.schema.reader.ImportUnmarshaller.<init>(ImportU

nmarshaller.java:194)

        ... 11 more

Caused by: an element declaration already exists with the given name:
personName

 

        at
org.exolab.castor.xml.schema.reader.Sax2ComponentReader.startElement(

Sax2ComponentReader.java:258)

        at
org.apache.xerces.parsers.SAXParser.startElement(SAXParser.java:1340)

 

        at
org.apache.xerces.validators.common.XMLValidator.callStartElement(XML

Validator.java:1197)

        at
org.apache.xerces.framework.XMLDocumentScanner.scanElement(XMLDocumen

tScanner.java:1862)

        at
org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.disp

atch(XMLDocumentScanner.java:1238)

        at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentS

canner.java:381)

        at
org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1035)

        at
org.exolab.castor.xml.schema.reader.ImportUnmarshaller.<init>(ImportU

nmarshaller.java:194)

        at
org.exolab.castor.xml.schema.reader.SchemaUnmarshaller.startElement(S

chemaUnmarshaller.java:519)

        at
org.exolab.castor.xml.schema.reader.Sax2ComponentReader.startElement(

Sax2ComponentReader.java:255)

        at
org.apache.xerces.parsers.SAXParser.startElement(SAXParser.java:1340)

 

        at
org.apache.xerces.validators.common.XMLValidator.callStartElement(XML

Validator.java:1197)

        at
org.apache.xerces.framework.XMLDocumentScanner.scanElement(XMLDocumen

tScanner.java:1862)

        at
org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.disp

atch(XMLDocumentScanner.java:1238)

        at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentS

canner.java:381)

        at
org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1035)

        at
org.exolab.castor.builder.SourceGenerator.generateSource(SourceGenera

tor.java:564)

        at
org.exolab.castor.builder.SourceGenerator.generateSource(SourceGenera

tor.java:497)

        at
org.exolab.castor.builder.SourceGeneratorMain.main(SourceGeneratorMai

n.java:245)

Caused by: an element declaration already exists with the given name:
personName

 

        at
org.exolab.castor.xml.schema.reader.Sax2ComponentReader.startElement(

Sax2ComponentReader.java:258)

        at
org.apache.xerces.parsers.SAXParser.startElement(SAXParser.java:1340)

 

        at
org.apache.xerces.validators.common.XMLValidator.callStartElement(XML

Validator.java:1197)

        at
org.apache.xerces.framework.XMLDocumentScanner.scanElement(XMLDocumen

tScanner.java:1862)

        at
org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.disp

atch(XMLDocumentScanner.java:1238)

        at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentS

canner.java:381)

        at
org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1035)

        at
org.exolab.castor.xml.schema.reader.ImportUnmarshaller.<init>(ImportU

nmarshaller.java:194)

        at
org.exolab.castor.xml.schema.reader.SchemaUnmarshaller.startElement(S

chemaUnmarshaller.java:519)

        at
org.exolab.castor.xml.schema.reader.Sax2ComponentReader.startElement(

Sax2ComponentReader.java:255)

        at
org.apache.xerces.parsers.SAXParser.startElement(SAXParser.java:1340)

 

        at
org.apache.xerces.validators.common.XMLValidator.callStartElement(XML

Validator.java:1197)

        at
org.apache.xerces.framework.XMLDocumentScanner.scanElement(XMLDocumen

tScanner.java:1862)

        at
org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.disp

atch(XMLDocumentScanner.java:1238)

        at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentS

canner.java:381)

        at
org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1035)

        at
org.exolab.castor.builder.SourceGenerator.generateSource(SourceGenera

tor.java:564)

        at
org.exolab.castor.builder.SourceGenerator.generateSource(SourceGenera

tor.java:497)

        at
org.exolab.castor.builder.SourceGeneratorMain.main(SourceGeneratorMai

n.java:245)

 

C:\src\dci>

 

Here are the respective schemas (they are valid - at least according to
XMLspy):

 

ZRoot.xsd:

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema targetNamespace="http://www.kenklose.com/xmlns/NS1";
elementFormDefault="qualified" attributeFormDefault="unqualified"
version="1.1b" xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:ns2="http://www.kenklose.com/xmlns/NS2";
xmlns="http://www.kenklose.com/xmlns/NS1";>

            <xs:include schemaLocation="ZDoc.xsd"/>

            <xs:import namespace="http://www.kenklose.com/xmlns/NS2";
schemaLocation="ZNS2Doc.xsd"/>

            <xs:element name="Root">

                        <xs:complexType>

                                    <xs:sequence>

                                                <xs:element
name="RootsElement" type="xs:string"/>

                                                <xs:element
ref="ZDocElement" minOccurs="0" maxOccurs="unbounded"/>

                                                <xs:element
ref="ns2:ZNS2DocElement" minOccurs="0" maxOccurs="unbounded"/>

                                    </xs:sequence>

                        </xs:complexType>

            </xs:element>

</xs:schema>

 

ZDoc.xsd:

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema targetNamespace="http://www.kenklose.com/xmlns/NS1";
elementFormDefault="qualified" attributeFormDefault="unqualified"
version="1.1b" xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:ns2="http://www.kenklose.com/xmlns/NS2";
xmlns="http://www.kenklose.com/xmlns/NS1";>

            <xs:import namespace="http://www.kenklose.com/xmlns/NS2";
schemaLocation="Zcommon.xsd"/>

            <xs:element name="ZDocElement">

                        <xs:complexType>

                                    <xs:sequence>

                                                <xs:element
name="SomeElement" type="xs:string"/>

                                                <xs:element
name="Person" type="ns2:personNameType"/>

                                    </xs:sequence>

                        </xs:complexType>

            </xs:element>

</xs:schema>

 

ZNS2Doc.xsd:

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema targetNamespace="http://www.kenklose.com/xmlns/NS2";
elementFormDefault="qualified" attributeFormDefault="unqualified"
version="1.1b" xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns="http://www.kenklose.com/xmlns/NS2";>

            <xs:include schemaLocation="Zcommon.xsd"/>

            <xs:element name="ZNS2DocElement">

                        <xs:complexType>

                                    <xs:sequence>

                                                <xs:element
name="AnotherElement" type="xs:string"/>

                                                <xs:element
name="YetAnotherPerson" type="personNameType"/>

                                    </xs:sequence>

                        </xs:complexType>

            </xs:element>

</xs:schema>

 

ZCommon.xsd:

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema targetNamespace="http://www.kenklose.com/xmlns/NS2";
elementFormDefault="unqualified" attributeFormDefault="unqualified"
version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns="http://www.kenklose.com/xmlns/NS2";>

            <xs:element name="personName" type="personNameType"/>

            <xs:complexType name="personNameType">

                        <xs:sequence>

                                    <xs:element name="firstName"
type="xs:string" minOccurs="0"/>

                                    <xs:element name="lastName"
type="xs:string" minOccurs="0"/>

                        </xs:sequence>

            </xs:complexType>

</xs:schema>

 

Last, but not least is my castorbuilder.properties:

 

org.exolab.castor.builder.javaVersion=5.0

org.exolab.castor.builder.boundproperties=false

org.exolab.castor.builder.javaclassmapping=type

org.exolab.castor.builder.equalsmethod=false

org.exolab.castor.builder.primitivetowrapper=false

 

Is this a bug?  Or a bug in XMLspy for saying this is all valid?  Or a
bug in my understanding of namespaces and import and include?

 

Thanks

Ken

Reply via email to