我现在用的是这里的教程理解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")
我建议使用封装级@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
关联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>