2012-01-02 14 views
7

Hi StackOverflow światowejdodawanie adnotacji do klasy wiązania JAXB od schematu

Chcę określić w XSD, że określony element może być używany jako XmlRootElement przez JAXB.

Wiem, jak dodać adnotację do wygenerowanej klasy: chcę tylko określić, że element może zostać wygenerowany jako element główny przed wygenerowaniem kodu.

Używam zewnętrznych dostosowań JAXB (pliki .xjb). Celem jest tutaj nie modyfikowanie schematów (ponieważ definiują standardy).

Ktoś wie, jak to zrobić? Dzięki!

NJ

+0

Więc chcesz zmodyfikować schemat, czy też nie (niektóre niespójności w swoim pytaniu)? – home

+0

Nie, chcę dodać dodatkowe dostosowywanie w pliku .xjb. – njames

+0

może początek odpowiedzi http://codereview.stackexchange.com/questions/1877/jaxb-xjc-code-generation-adding-xmlroement-and-joda-datetime – njames

Odpowiedz

15

Problem rozwiązany.

Wtyczka JAXB Adnotacja http://confluence.highsource.org/display/J2B/Annotate+Plugin wykonać zadanie.

Dodaj poniższy fragment w pliku wiązania JAXB (zewnętrznego wiązania, czyli .xjb pliku):

<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> 

Nie zapomnij zadeklarować nazw:

<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> 

i użyj ANT lub MAVEN task http://confluence.highsource.org/display/J2B/User+Guide, aby kontynuować generowanie źródeł.

Wciąż szukam sposobu ręcznego określania (bez zadania xjc z użyciem ant lub maven) rozszerzeń JAXB, ale teraz działa. (Mam własny skrypt ANT, po co szukam, aby ręcznie wywołać XJC).

Mechanizm przedłużenie JAXB jest bardzo wygodne, mają wygląd to Basics JAXB2: http://confluence.highsource.org/display/J2B/Home

+2

jak dodać adnotacje, takie jak @something ({@ some ("a"), @ some ("b")})? – leet

+1

czy to nadal ma znaczenie? linki nie działają :( –

+0

Rzeczywiście confluence.highsource.org/... wydaje się niedostępne, ale czy szukałeś w Internecie? Na przykład z ... google? ==> https://github.com/highsource/jaxb2-adnotate-plugin – njames

Powiązane problemy