Понимание аннотации JAXB @XmlRootElement

Я использую учебник здесь для понимания JAXB.

Когда автор приходит к созданию корня документа, сценарист начинается следующим образом:

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

Хотя я буду вручную генерировать свои классы, а не позволять Eclipse делать это, я поставлю XSD с моим файлом jar (не упакованным внутри, а скорее в папку, содержащую файл jar), чтобы при запуске моего приложения оно будет проверять, был ли изменен документ XML.

Итак, в файле XSD targetNamespace будет de.vogella.xml.jaxb.model, потому что он был объявлен выше как @XmlRootElement(namespace = "de.vogella.xml.jaxb.model")?

Ответ 1

Я рекомендую использовать аннотацию уровня пакета @XmlSchema, чтобы указать квалификацию пространства имен для вашей модели. Аннотации уровня пакета идут в специальном классе package-info, который содержит точный контент, как показано ниже. Эта аннотация означает, что все элементы вашего документа без явного пространства имен будут использовать это пространство имен.

орг/пример/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;

Переопределение пространства имен

  • Вы можете переопределить пространство имен, указанное в @XmlSchema для всех свойств класса, используя аннотацию @XmlType.
  • Вы можете переопределить пространство имен для данного элемента, используя свойство namespace в аннотации @XmlRootElement или @XmlElement.

Дополнительная информация

Ответ 2

  • @XmlRootElement аннотация может использоваться для сопоставления типа класса или перечисления с типом XML.

  • Когда класс верхнего уровня или тип перечисления аннотируется аннотацией @XmlRootElement, его значение представляется как XML-элемент в документе XML.

  • Следуйте приведенному ниже примеру, чтобы получить больше информации:

Связать элемент с типом схемы XML

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