@XMLRootElement与@XmlType
用@XMLRootElement和@XMLType注解类有@XMLRootElement @XMLType ? 我一直在使用@XMLType注解类,如果这个结构将在XML模式中被多次使用,并且在@XMLRootElement被使用一次,那么这是最好的方法吗? 
 一个不同的但相关的问题,我将在这里包括。  @XMLType注解有一个propOrder属性来指定它的元素出现的顺序 – 是否有@XMLRootElement的等价@XMLRootElement ? 
我将这些注释与JAX-WS批注一起使用来创buildWeb服务,如果这有所帮助的话。
  XmlRootElement和XmlType之间的区别是作用域的问题。 请记住,这个注释只是为了创build用于生成XML的模式的创build。  XmlRootElement表示全局元素(具有匿名或模式types): 
 <xs:element name=foo type="bar"> </xs:element> <-- schema type 
 而XmlType用来表示本地元素(具有匿名或复杂types): 
 <xs:complexType name=bar> </xs:complexType> <-- complex type 
本地/全局的主要区别在于对象将出现的模式层次结构,以及是否声明模式types或复杂types。 这两个注释的文档都写得很好,包括例子:
 XmlRootElement 
 XmlType 
 编辑:解决propOrder问题:如果您还声明本地types,则可以在全局元素上使用它: 
 @XmlRootElement (name="PersonElement") @XmlType (propOrder={"firstname", "lastname"}) public class People{ @XmlElement public String firstname; public String lastname; } 
这将产生如下的东西:
 <xs:element name="PersonElement" type="People"/> <xs:complexType name="People"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType> 
我一直在使用@XMLType注解类,如果这个结构将在XML模式中被多次使用,并且在@XMLRootElement中被使用一次,那么这是最好的方法吗?
 有一点要知道的是,不需要@XmlRootElement或@XmlType注解。 它们不等同于来自JPA的@Entity 。 您可以使用JAXB(JSR-222)实现,不需要任何注释: 
 下面我将解释@XmlRootElement和@XmlType作用。 
 @XmlRootElement 
 有时您的JAXB实现需要仅基于正在处理的XML元素来实例化对象。  @XmlRootElement注释是指定这种关联的主要方法。 请注意,如果一个类对应多个XML元素,则应该使用@XmlElementDecl注释, 
angular色#1 – 指定根对象
  @XmlRootElement主要用来指定根对象。 这是当你的JAXB实现开始解组一个XML文档时,它知道实例化哪个对象。 几乎所有后续的注释都将基于从父类收集的信息。 
富
 @XmlRootElement(name="root") public class Foo { private String name; } 
酒吧
 public class Bar { private String name; } 
XML
 <root> <name>Jane Doe</name> </root> 
演示
 Foo foo = (Foo) unmarshaller.unmarshal(xml); Bar bar = unmarshaller.unmarshal(xml, Bar.class).getValue(); 
angular色#2 – replace组
  @XmlElementRef注解将实例化的对象的types委托给元素的名称/ URI。 这使映射到替代组的概念来表示inheritance。 
angular色#3 – 任何内容
  @XmlAnyElement允许您映射XML文档的通配符部分。 如果指定@XmlAnyElement(lax=true)则与域对象关联的元素将被转换为相应的域对象。 
 @XmlType 
angular色#1 – Schema Gen
 默认情况下,将为JAXB上下文已知的每个Java类生成一个命名的复杂types。 您可以使用@XmlType注释来控制此types的名称,或指定通过将名称指定为""来生成一个匿名复杂types。 
ROLE#2 – inheritance和xsi:types
 默认情况下,JAXB利用xsi:type属性作为inheritance指示符。 此属性上的值对应于您在@XmlType注释中指定的名称和名称空间,或者是基于该类的默认值。 
ROLE#3 – Prop Order
 正如你所提到的,你可以使用@XmlType来指定属性顺序。 
angular色#4 – 工厂方法
  @XmlType允许你指定一个工厂类和/或方法,可以用来实例化域对象而不是默认的构造函数。 
一个不同的但相关的问题,我将在这里包括。 @XMLType注解有一个propOrder属性来指定它的元素出现的顺序 – 是否有@XMLRootElement的等价物?
 不, propOrder方面属于@XmlType注释。 这是有道理的,因为复杂的types负责指定(或缺乏)订单。 您当然可以同时使用这些注释。 
 @XmlRootElement @XmlType(propOrder={"foo", "bar"} public class Root { ... }