了解JAXB @XmlRootElement注释(Understanding JAXB @XmlRo

2019-09-03 15:48发布

我现在用的是这里的教程理解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")

Answer 1:

我建议使用封装级@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注解。

欲获得更多信息

  • http://blog.bdoughan.com/2010/08/jaxb-namespaces.html
  • http://blog.bdoughan.com/2012/07/jaxb-and-root-elements.html


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


文章来源: Understanding JAXB @XmlRootElement annotation