Understanding JAXB @XmlRootElement annotation

给你一囗甜甜゛ 提交于 2019-12-20 09:38:34

问题


I am using the tutorial here for understanding JAXB.

When the writer comes to create the root of the document, the writer begins as below:

//This statement means that class "Bookstore.java" is the root-element of our example
@XmlRootElement(namespace = "de.vogella.xml.jaxb.model")
public class Bookstore {
       ...
}  

Although I will be manually generating my classes rather than letting Eclipse do it, I will supply an XSD with my jar file (not packed inside but rather in the folder containing jar file) so that when my application starts, it will validate whether the XML document has been tampered with.

So, in the XSD file, the targetNamespace will be de.vogella.xml.jaxb.model because it was declared above as @XmlRootElement(namespace = "de.vogella.xml.jaxb.model") ?


回答1:


I recommend using the package level @XmlSchema annotation to specify the namespace qualification for you model. A package level annotation goes in a special class called package-info that contains the exact content as shown below. That annotation will mean that all elements in your document without an explicit namespace given will use that namespace.

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;

Overriding the Namespace

  • You can override the namespace given in the @XmlSchema for all properties in a class using the @XmlType annotation.
  • You can override the namespace for a given element using the namespace property on the @XmlRootElement or @XmlElement annotation.

For More Information

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



回答2:


  • @XmlRootElement annotation can be used to map a class or enum type to XML type.

  • When a top level class or an enum type is annotated with the @XmlRootElement annotation, then its value is represented as XML element in an XML document.

  • Follow the example given below to get more idea:

Associate an element with XML Schema type

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


来源:https://stackoverflow.com/questions/16584555/understanding-jaxb-xmlrootelement-annotation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!