2011-09-20 163 views
6

Tome los siguientes servicios por XSD simplificada:ayuda por favor: xjc lanza "Dos declaraciones causan una colisión en la clase ObjectFactory"

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema targetNamespace="com.acme" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Widget"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element 
        minOccurs="0" name="color" nillable="true" type="xs:string" /> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="WidgetColor" type="xs:string" /> 
</xs:schema> 

A continuación, intente lo siguiente:

xjc test.xsd 

Usted debe siempre tener la siguiente excepción:

parsing a schema... 
compiling a schema... 
[ERROR] Two declarations cause a collision in the ObjectFactory class. 
    line 11 of file:/C:/test.xsd 

[ERROR] (Related to above error) This is the other declaration. 
    line 7 of file:/C:/test.xsd 

Failed to produce code. 

cuenta de que hay un nombre de elemento "Widget "que es un ComplexType y tiene elementos llamados" color ". También hay, en el mismo nivel que el elemento "Widget", un elemento simple llamado "WidgetColor".

Lo que es más sorprendente es que si quita el atributo minOcurrencias = "0" O que quita el atributo nillable = "true" de la secuencia de elemento de "color", xjc compila el esquema exitosamente.

¿Alguien ha visto este problema o puede sugerir una solución?

Gracias,

Mike.

Respuesta

6

Bueno, finalmente descubrí cómo solucionar mi problema. Se basa en utilizar un enlace personalizado para especificar un nombre de clase distinto para una de las declaraciones.

contenido de la costumbre-binding.xjb

<?xml version="1.0" encoding="UTF-8"?> 
<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <bindings schemaLocation="test.xsd"> 
     <bindings node="//xs:element[@name='WidgetColor']"> 
      <class name="BaseWidgetColor" /> 
     </bindings> 
    </bindings> 
</bindings> 

Operación:

C:\>xjc -b custom-binding.xjb test.xsd 
parsing a schema... 
compiling a schema... 
acme\com\BaseWidgetColor.java 
acme\com\ObjectFactory.java 
acme\com\Widget.java 
acme\com\package-info.java 

Patience et longueur de temps valente mieux Que rabia et acharnement ...!

Cuestiones relacionadas