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