Понимание аннотации 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>