2013-05-16 14 views
11

Używam tutorial here do zrozumienia JAXB.Opis adnotacji JAXB @XmlRootElement

Gdy pisarz pochodzi stworzyć główny dokumentu, pisarz zaczyna się jak poniżej:

//This statement means that class "Bookstore.java" is the root-element of our example 
@XmlRootElement(namespace = "de.vogella.xml.jaxb.model") 
public class Bookstore { 
     ... 
} 

Chociaż będę ręcznie generowania moje zajęcia zamiast pozwolić Eclipse to zrobić, będę dostarczyć XSD z mój plik JAR (nie zapakowany wewnątrz, ale raczej w folderze zawierającym plik jar), aby po uruchomieniu mojej aplikacji sprawdzać, czy dokument XML został zmodyfikowany.

Tak więc w pliku XSD targetNamespace będzie de.vogella.xml.jaxb.model, ponieważ został zadeklarowany powyżej jako @XmlRootElement(namespace = "de.vogella.xml.jaxb.model")?

Odpowiedz

20

Zalecam stosowanie adnotacji o poziomie pakietu @XmlSchema, aby określić kwalifikację obszaru nazw dla danego modelu. Adnotacja na poziomie pakietu znajduje się w specjalnej klasie o nazwie package-info, która zawiera dokładną treść, jak pokazano poniżej. Ta adnotacja oznacza, że ​​wszystkie elementy w dokumencie bez jawnej przestrzeni nazw będą używać tej przestrzeni nazw.

org/example/foo/package-info.java

@XmlSchema(
    namespace = "http://www.example.org/foo", 
    elementFormDefault = XmlNsForm.QUALIFIED) 
package org.example.foo; 

import javax.xml.bind.annotation.XmlNsForm; 
import javax.xml.bind.annotation.XmlSchema; 

Zastępowanie przestrzeni nazw

  • Można zastąpić nazw podanych w @XmlSchema dla wszystkich właściwości w klasie przy użyciu adnotacji @XmlType.
  • Można zastąpić obszar nazw dla danego elementu, używając właściwości obszaru nazw w adnotacji @XmlRootElement lub @XmlElement.

Aby uzyskać więcej informacji

+0

Ah rozumiem, co mówisz .... dla pakiet, który zawiera różne klasy XML-to-Java, muszę utworzyć klasę 'package-info' i zmodyfikować powyższą zawartość w razie potrzeby? **Chłodny!**. Zajrzę do tego, co powiedziałeś ** ale ** co z moim pierwotnym pytaniem?:) Czy moja konkluzja była poprawna? –

+0

@LittleChild - Otrzymasz schemat XML z tym, że 'de.vogella.xml.jaxb.model' jest docelową przestrzenią nazw, która definiuje element' bookstore'. Problem polega na tym, że klasa nie dziedziczy przestrzeni nazw podanej w adnotacji '@ XmlRootElement', aby wygenerować ją w innym schemacie XML. –

+0

zasadniczo dlatego, że 'elementFormDefault' nie jest ustawiony na' kwalifikowany'? i oh, schemat również zostanie napisany odręcznie. –

2
  • @XmlRootElement adnotacja może być używany do mapowania enum klasy lub typu do typu XML.

  • Gdy klasa najwyższego poziomu lub typ wyliczeniowy jest opatrzony adnotacją @XmlRootElement, wówczas jej wartość jest reprezentowana jako element XML w dokumencie XML.

  • Postępuj zgodnie z przykładem podanym poniżej, aby uzyskać więcej pomysł:

skojarzyć z elementów typu XML Schema

// Example: Code fragment 
@XmlRootElement 
class Point { 
    int x; 
    int y; 
    Point(int _x,int _y) {x=_x;y=_y;} 
} 

//Example: Code fragment corresponding to XML output 
marshal(new Point(3,5), System.out); 


<!-- Example: XML output --> 
<point> 
    <x> 3 </x> 
    <y> 5 </y> 
</point> 
Powiązane problemy