了解JAXB @XmlRootElement批注

Lit*_*ild 13 java xml xsd jaxb marshalling

我在这里使用教程来理解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 {
       ...
}  
Run Code Online (Sandbox Code Playgroud)

虽然我将手动生成我的类而不是让Eclipse这样做,但我将提供一个XSD带有我的jar文件(不在内部打包,而是在包含jar文件的文件夹中),这样当我的应用程序启动时,它将验证XML文档是否已被篡改.

那么,在XSD文件中,targetNamespacede.vogella.xml.jaxb.model 因为它在上面声明为@XmlRootElement(namespace = "de.vogella.xml.jaxb.model")

bdo*_*han 24

我建议使用包级别@XmlSchema注释为您的模型指定命名空间限定.包级别注释在一个称为package-info包含确切内容的特殊类中,如下所示.该注释将意味着文档中没有给定显式命名空间的所有元素都将使用该命名空间.

组织/示例/富/ 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;
Run Code Online (Sandbox Code Playgroud)

覆盖命名空间

  • 您可以@XmlSchema使用@XmlType注释覆盖类中所有属性中给出的命名空间.
  • 您可以使用@XmlRootElement@XmlElement注释上的namespace属性覆盖给定元素的命名空间.

欲获得更多信息


Kru*_*tik 5

  • @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>
Run Code Online (Sandbox Code Playgroud)