I have a big schema with multiple levels with the same name. (I didn't write it!)
Here it is:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.CIP4.org/JDFSchema_1_1" xmlns:efi="http://www.efi.com/efijdf"
xmlns:ssi="http://www.creo.com/SSI/JDFExtensions.xsd" xmlns:jdf="http://www.CIP4.org/JDFSchema_1_1">
<xs:import namespace="http://www.efi.com/efijdf" schemaLocation="EFI-JDF.xsd" />
<xs:import namespace="http://www.creo.com/SSI/JDFExtensions.xsd" schemaLocation="SSiJDFExtensions.xsd" />
<xs:element name="JDF">
<xs:complexType>
<xs:sequence>
<xs:element name="Comment">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="AgentName" />
<xs:attribute type="xs:string" name="AgentVersion" />
<xs:attribute type="xs:dateTime" name="TimeStamp" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="AuditPool">
<xs:complexType>
<xs:sequence>
<xs:element name="Created">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="AgentName" />
<xs:attribute type="xs:string" name="AgentVersion" />
<xs:attribute type="xs:string" name="ID" />
<xs:attribute type="xs:dateTime" name="TimeStamp" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ResourcePool">
<xs:complexType>
<xs:sequence>
<xs:element name="Layout">
<xs:complexType>
<xs:sequence>
<xs:element name="Layout" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Layout">
<xs:complexType>
<xs:sequence>
<xs:element name="Media" type="jdf:MediaType" />
<xs:element name="TransferCurvePool">
<xs:complexType>
<xs:sequence>
<xs:element name="TransferCurveSet">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="CTM" use="optional" />
<xs:attribute type="xs:string" name="Name" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="Class" use="optional" />
</xs:complexType>
</xs:element>
<xs:element name="MediaRef">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="rRef" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Layout4" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element name="MarkObject">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="CTM" use="optional" />
<xs:attribute type="xs:string" name="ClipBox" use="optional" />
<xs:attribute type="xs:byte" name="Ord" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="ContentObject">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="CTM" use="optional" />
<xs:attribute type="xs:string" name="ClipBox" use="optional" />
<xs:attribute type="xs:byte" name="Ord" use="optional" />
<xs:attribute ref="ssi:Comp" />
<xs:attribute ref="ssi:TrimBox1" />
<xs:attribute type="xs:string" name="TrimCTM" use="optional" />
<xs:attribute type="xs:string" name="TrimSize" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:choice>
<xs:attribute ref="ssi:Dimension" />
<xs:attribute ref="ssi:MediaOrigin" />
<xs:attribute type="xs:string" name="Side" use="optional" />
<xs:attribute type="xs:string" name="Status" use="optional" />
<xs:attribute type="xs:string" name="SurfaceContentsBox" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute ref="ssi:WorkStyle" />
<xs:attribute type="xs:string" name="SheetName" use="optional" />
<xs:attribute type="xs:string" name="SurfaceContentsBox" use="optional" />
<xs:attribute type="xs:string" name="WorkStyle" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="SignatureName" use="optional" />
<xs:attribute type="xs:string" name="Status" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="Class" />
<xs:attribute type="xs:string" name="DescriptiveName" />
<xs:attribute type="xs:string" name="ID" />
<xs:attribute type="xs:string" name="PartIDKeys" />
<xs:attribute type="xs:string" name="Status" />
</xs:complexType>
</xs:element>
<xs:element name="Media" type="jdf:MediaType" />
<xs:element name="RunList" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="RunList2" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="LayoutElement" type="jdf:LayoutElementType" />
</xs:sequence>
<xs:attribute type="xs:byte" name="NPage" use="optional" />
<xs:attribute type="xs:string" name="Pages" use="optional" />
<xs:attribute type="xs:byte" name="Run" use="optional" />
<xs:attribute type="xs:string" name="Status" use="optional" />
</xs:complexType>
</xs:element>
<xs:element name="PageList" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="PageData" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="DescriptiveName" use="optional" />
<xs:attribute type="xs:string" name="PageIndex" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="Class" />
</xs:complexType>
</xs:element>
<xs:element name="LayoutElement" type="jdf:LayoutElementType" />
</xs:sequence>
<xs:attribute type="xs:string" name="Class" use="optional" />
<xs:attribute type="xs:string" name="ID" use="optional" />
<xs:attribute type="xs:byte" name="NPage" use="optional" />
<xs:attribute type="xs:string" name="PartIDKeys" use="optional" />
<xs:attribute type="xs:string" name="Status" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ResourceLinkPool">
<xs:complexType>
<xs:sequence>
<xs:element name="LayoutLink">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="Usage" />
<xs:attribute type="xs:string" name="rRef" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="RunListLink" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="ProcessUsage" use="optional" />
<xs:attribute type="xs:string" name="Usage" use="optional" />
<xs:attribute type="xs:string" name="rRef" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="MediaLink">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="Usage" />
<xs:attribute type="xs:string" name="rRef" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="Activation" />
<xs:attribute type="xs:string" name="CommentURL" />
<xs:attribute type="xs:string" name="DescriptiveName" />
<xs:attribute type="xs:string" name="ICSVersions" />
<xs:attribute type="xs:string" name="ID" />
<xs:attribute type="xs:string" name="JobID" />
<xs:attribute type="xs:string" name="JobPartID" />
<xs:attribute type="xs:float" name="MaxVersion" />
<xs:attribute type="xs:string" name="Status" />
<xs:attribute type="xs:string" name="Type" />
<xs:attribute type="xs:float" name="Version" />
</xs:complexType>
</xs:element>
<xs:complexType name="FileSpecType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute ref="efi:validatecontent" use="optional" />
<xs:attribute type="xs:string" name="MimeType" use="optional" />
<xs:attribute type="xs:string" name="URL" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="MediaType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="Brand" use="optional" />
<xs:attribute type="xs:string" name="Class" use="optional" />
<xs:attribute type="xs:string" name="DescriptiveName" use="optional" />
<xs:attribute type="xs:string" name="Dimension" use="optional" />
<xs:attribute type="xs:byte" name="Grade" use="optional" />
<xs:attribute type="xs:string" name="GrainDirection" use="optional" />
<xs:attribute type="xs:string" name="Manufacturer" use="optional" />
<xs:attribute type="xs:string" name="MediaType" use="optional" />
<xs:attribute type="xs:string" name="MediaUnit" use="optional" />
<xs:attribute type="xs:float" name="Thickness" use="optional" />
<xs:attribute type="xs:byte" name="Weight" use="optional" />
<xs:attribute type="xs:string" name="BackCoatings" use="optional" />
<xs:attribute type="xs:byte" name="Brightness" use="optional" />
<xs:attribute ref="efi:EFPaperCatalogID" use="optional" />
<xs:attribute type="xs:string" name="FrontCoatings" use="optional" />
<xs:attribute type="xs:string" name="HoleType" use="optional" />
<xs:attribute type="xs:string" name="ID" use="optional" />
<xs:attribute type="xs:string" name="MediaColorName" use="optional" />
<xs:attribute type="xs:byte" name="MediaSetCount" use="optional" />
<xs:attribute type="xs:string" name="MediaTypeDetails" use="optional" />
<xs:attribute type="xs:string" name="Opacity" use="optional" />
<xs:attribute type="xs:float" name="OpacityLevel" use="optional" />
<xs:attribute type="xs:string" name="PrePrinted" use="optional" />
<xs:attribute type="xs:string" name="ProductID" use="optional" />
<xs:attribute type="xs:byte" name="RecycledPercentage" use="optional" />
<xs:attribute type="xs:string" name="StockType" use="optional" />
<xs:attribute type="xs:string" name="Texture" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="LayoutElementType">
<xs:sequence>
<xs:element name="FileSpec" type="jdf:FileSpecType" />
</xs:sequence>
</xs:complexType>
</xs:schema>
EFI-JDF.xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.efi.com/efijdf">
<xs:attribute type="xs:string" name="EFPaperCatalogID" />
<xs:attribute type="xs:string" name="validatecontent" />
</xs:schema>
SSiJDFExtensions.xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.creo.com/SSI/JDFExtensions.xsd">
<xs:attribute type="xs:string" name="Comp" />
<xs:attribute type="xs:string" name="TrimBox1" />
<xs:attribute type="xs:string" name="Dimension" />
<xs:attribute type="xs:string" name="MediaOrigin" />
<xs:attribute type="xs:string" name="WorkStyle" />
</xs:schema>
Note the 3 elements with the name "Layout". I've tried using a xjb file to change the class name of each one, like this:
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.1">
<bindings schemaLocation="MetrixJDF.xsd" version="1.0">
<globalBindings localScoping="toplevel" />
<schemaBindings xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc">
<package name="com.metrixsoftware.vdp.jdf">
</package>
</schemaBindings>
<bindings node="//xs:element[@name='JDF']">
<bindings node="//xs:attribute[@ref='ssi:WorkStyle']">
<property name="ssiWorkStyle" />
</bindings>
</bindings>
<bindings
node="//xs:element[@name='ResourcePool']/xs:complexType/xs:sequence/xs:element[@name='Layout']/xs:complexType/xs:sequence/xs:element[@name='Layout']/xs:complexType/xs:sequence/xs:element[@name='Layout']">
<class name="Layout3" />
</bindings>
<bindings node="//xs:element[@name='ResourcePool']/xs:complexType/xs:sequence/xs:element[@name='Layout']/xs:complexType/xs:sequence/xs:element[@name='Layout']">
<class name="Layout2" />
</bindings>
<bindings node="//xs:element[@name='ResourcePool']/xs:complexType/xs:sequence/xs:element[@name='Layout']">
<class name="Layout1" />
</bindings>
</bindings>
</bindings>
That doesn't seem to work. I don't get any errors about the xjb file, but I still get these errors when I run xjc
:
parsing a schema...
compiling a schema...
[ERROR] A class/interface with the same name "com.metrixsoftware.vdp.jdf.Layout" is already in use. Use a class customization to resolve this conflict.
line 44 of file:/C:/Repo/Metrix/WEB-INF/classes/com/metrixsoftware/vdp/schemas/MetrixJDF.xsd
[ERROR] (Relevant to above error) another "Layout" is generated from here.
line 47 of file:/C:/Repo/Metrix/WEB-INF/classes/com/metrixsoftware/vdp/schemas/MetrixJDF.xsd
[ERROR] A class/interface with the same name "com.metrixsoftware.vdp.jdf.Layout" is already in use. Use a class customization to resolve this conflict.
line 44 of file:/C:/Repo/Metrix/WEB-INF/classes/com/metrixsoftware/vdp/schemas/MetrixJDF.xsd
[ERROR] (Relevant to above error) another "Layout" is generated from here.
line 50 of file:/C:/Repo/Metrix/WEB-INF/classes/com/metrixsoftware/vdp/schemas/MetrixJDF.xsd
[ERROR] Two declarations cause a collision in the ObjectFactory class.
line 50 of file:/C:/Repo/Metrix/WEB-INF/classes/com/metrixsoftware/vdp/schemas/MetrixJDF.xsd
[ERROR] (Related to above error) This is the other declaration.
line 44 of file:/C:/Repo/Metrix/WEB-INF/classes/com/metrixsoftware/vdp/schemas/MetrixJDF.xsd
[ERROR] Two declarations cause a collision in the ObjectFactory class.
line 44 of file:/C:/Repo/Metrix/WEB-INF/classes/com/metrixsoftware/vdp/schemas/MetrixJDF.xsd
[ERROR] (Related to above error) This is the other declaration.
line 47 of file:/C:/Repo/Metrix/WEB-INF/classes/com/metrixsoftware/vdp/schemas/MetrixJDF.xsd
Failed to produce code.
Version info:
$ "C:\Java\jdk1.6.0_45.64\bin\xjc.exe" -version
xjc version "JAXB 2.1.10 in JDK 6"
JavaTM Architecture for XML Binding(JAXB) Reference Implementation, (build JAXB 2.1.10 in JDK 6)
Please advise.
I did run into an error, but it was not during xjc compilation (using xjc 2.2.8-b130911.1802) but the generated Java code is illegal due to duplicate static class name Layout in ResourcePool. I could not resolve this using external binding either.
The following modification of the XML Schema -- which does not change the XML layout permits the generation of correct Java code:
<xs:element name="ResourcePool">
<xs:complexType>
<xs:sequence>
<xs:element name="Layout" type="jdf:LayoutLev1"/>
<!-- keep the remainder of the element as it is -->
New complex types:
<xs:complexType name="LayoutLev1">
<xs:sequence>
<xs:element name="Layout" type="jdf:LayoutLev2" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
<xs:attribute type="xs:string" name="Class" />
<xs:attribute type="xs:string" name="DescriptiveName" />
<xs:attribute type="xs:string" name="ID" />
<xs:attribute type="xs:string" name="PartIDKeys" />
<xs:attribute type="xs:string" name="Status" />
</xs:complexType>
<xs:complexType name="LayoutLev2">
<xs:sequence>
<xs:element name="Layout">
<!-- keep the rest till the end of complexType -->