了解JAXB @XmlRootElement批注

时间:2013-05-16 10:06:47

标签: java xml xsd jaxb marshalling

我使用tutorial here来理解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")

2 个答案:

答案 0 :(得分:23)

我建议使用包级别@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;

覆盖命名空间

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

了解更多信息

答案 1 :(得分:3)

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