了解 JAXB @XmlRootElement注释

2022-09-03 18:09:44

我在这里使用教程来理解 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来做,但我将提供一个带有我的jar文件(不打包在里面,而是在包含jar文件的文件夹中),这样当我的应用程序启动时,它将验证XML文档是否被篡改。XSD

因此,在 XSD 文件中,将是因为上面声明为 ?targetNamespacede.vogella.xml.jaxb.model@XmlRootElement(namespace = "de.vogella.xml.jaxb.model")


答案 1

我建议使用包级别批注来指定模型的命名空间限定。包级别批注位于一个名为的特殊类中,该类包含如下所示的确切内容。该批注将意味着文档中没有给出显式命名空间的所有元素都将使用该命名空间。@XmlSchemapackage-info

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;

重写命名空间

  • 您可以使用注释重写类中所有属性的 中给定的命名空间。@XmlSchema@XmlType
  • 可以使用 或 上的命名空间属性覆盖给定元素的命名空间。@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>

推荐