将@XmlRootElement添加到每个JAXB bean有什么顾虑吗?

时间:2014-01-09 22:20:05

标签: java jaxb jersey moxy

在我目前的项目中,我们使用JAXB bean进行Hibernate,并通过[REST API] [1]以XML和JSON格式发送数据。我们希望能够在我们用作REST VO的Result对象中任意包含任何JAXB bean(例如,作为<xsd:any>元素),而不必为每个可以包含的不同类型使用单独的编组方法。似乎最简单的方法是在每个bean上使用@XmlRootElement注释。

  1. 这是“无缝”编组的好方法吗?
  2. 这样做有后果吗?
  3. 我们正在使用Java 1.6,EclipseLink / MOXy用于jaxb,Jersey 1.x用于REST,以及Tomcat应用服务器。我们的bean是使用xjc从XML Schema文件生成的,并使用annox在生成时添加注释。

    [1]:在理想世界中,数据对象将与域对象分离,但这是小团队中的一个小项目,因此数据库和api之间的隔离不是必需的

1 个答案:

答案 0 :(得分:2)

  

是否有任何关于将@XmlRootElement添加到每个JAXB bean的问题?

没有


  

我们希望能够在Result

中任意包含任何JAXB bean

带有Result注释的字段/属性的通用@XmlAnyElement(lax=true)对象是创建通用消息的好方法,其中可以使用使用@XmlRootElement注释的任意有效负载对象。


  

我们使用REST VO(例如作为元素)而没有   可以是每种不同类型的单独编组方法   包括在内。

我担心的是你得到的数据看起来不像你想要的那样。 SOAP具有信封消息格式,其中数据位于正文中。通常REST没有这个。当我访问RESTful端点时,我通常不希望某种信封包裹数据。