2012-01-02 8 views
7

Hola mundo stackoverflow,añadir una anotación a una clase de unión JAXB de un esquema de

quiero especificar en un XSD que un elemento específico puede ser utilizado como un XmlRootElement por JAXB.

Sé cómo agregar la anotación a la clase generada: lo que quiero hacer es especificar que un elemento se puede generar como un elemento raíz antes de la generación del código.

Utilizo personalizaciones JAXB externas (archivos .xjb). El propósito es aquí no modificar los esquemas (ya que están definiendo estándares).

¿Alguien sabe cómo hacerlo? Gracias!

NJ

+0

Así que quieres modificar el esquema o no (algunas inconsistencias en su pregunta)? – home

+0

no, quiero agregar una personalización adicional en el archivo .xjb. – njames

+0

quizás un comienzo de respuesta http://codereview.stackexchange.com/questions/1877/jaxb-xjc-code-generation-adding-xmlrootelement-and-joda-datetime – njames

Respuesta

15

Problema resuelto.

El complemento JAXB Anotar http://confluence.highsource.org/display/J2B/Annotate+Plugin hace el trabajo.

Añadir el siguiente fragmento en su archivo de enlace jaxb (es decir, un archivo de enlace externo .xjb):

<jaxb:bindings schemaLocation="csw/2.0.2/CSW-discovery.xsd" node="/xs:schema"> 
    <jaxb:bindings node="xs:complexType[@name='GetRecordsType']"> 
    <annox:annotate> 
    <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" 
       name="GetRecordsType" /> 
</annox:annotate> 
    </jaxb:bindings> 
</jaxb:bindings> 

No se olvide de declarar los espacios de nombres:

<jaxb:bindings 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:annox="http://annox.dev.java.net" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd" 
    jaxb:extensionBindingPrefixes="xjc annox" version="2.1"> 
... 
</jaxb:bindings> 

Y el uso de una hormiga o la tarea MAVEN http://confluence.highsource.org/display/J2B/User+Guide para proceder con la generación de las fuentes.

Todavía busco cómo especificar manualmente (sin una tarea xjc con ant o maven) las extensiones de JAXB pero funciona ahora. (Tengo mi propio script ANT y por eso busco llamar manualmente a XJC).

El mecanismo de extensión JAXB es muy conveniente, echar un vistazo a lo básico JAXB2: http://confluence.highsource.org/display/J2B/Home

+2

cómo agregar anotaciones, como @ algo ({@ some ("a"), @ some ("b")})? – leet

+1

¿esto sigue siendo relevante? los enlaces no funcionan :( –

+0

Indeed confluence.highsource.org/... parece no estar disponible, pero ¿buscó en la Web? Por ejemplo, con ... google? ==> https://github.com/highsource/jaxb2-annotate-plugin – njames

Cuestiones relacionadas