2012-03-07 17 views
5

Tengo un XSD que contiene algo como:¿Cómo manejar elementos y atributos con el mismo nombre en xsd mientras se generan pojos usando jaxb?

<xs:complexType> 
    <xs:sequence minOccurs="0"> 
    <xs:element ref="HereIsTheProblem"/> 
    <xs:element ref="blaBla"/> 
    </xs:sequence> 
    <xs:attribute name="something" type="xs:string" use="required"> 
    <xs:annotation/> 
    </xs:attribute> 
    <xs:attribute name="somethingElse" type="xs:string"> 
    <xs:annotation/> 
    </xs:attribute> 
    <xs:attribute name="HereIsTheProblem" type="xs:string"> 
    <xs:annotation/> 
    </xs:attribute> 
</xs:complexType> 

ahora cuando trato de analizar el esquema utilizando jaxb para generar clases Java falla:

[ERROR] Element "{http://something.somemorething.com/etc/}HereIsTheProblem" shows up in more than one properties. 

cómo resolver esto sin hacer ninguna modificación en el esquema?

PD: mi versión 2.1.13 jaxb es

Respuesta

7

Es necesario utilizar un archivo de enlace que indica jaxb cómo debe manejar este conflicto de nombres. Por ejemplo, poner algo como esto en un archivo llamado algo así como bindings.xjb:

<jaxb:bindings version="2.1" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:com.fnf="http://www.fnf.com/xes"> 
    <jaxb:bindings schemaLocation="your schema location here" node="/xs:schema"> 
    <jaxb:bindings node="//XPath selector"> 
     <jaxb:property name="HereIsTheProblem2" /> 
    </jaxb:bindings> 
    </jaxb:bindings> 
</jaxb:bindings> 

no le puede proporcionar una solución completa sin un esquema completo

+1

es necesario especificar la unión de todo lo demás ¿bien? o solo las colisiones mientras jaxb maneja el resto, aclare. –

+0

no, solo la colisión es obligatoria. También puede modificar el resto, pero esto no es necesario. Básicamente debe usar un enlace para todo lo que impide que jaxb genere clases válidas. El propósito de los enlaces es desamuelar nombres idénticos. –

+1

muchas gracias, comenzaré a estudiarlo a partir de mañana, espero que ya no haya ningún problema al respecto. –

Cuestiones relacionadas