向每个JAXB bean添加@XmlRootElement有什么问题吗



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

  1. 这是"无缝"编组的好方法吗
  2. 这样做会有后果吗

我们使用Java 1.6、用于jaxb的EclipseLink/MOXy、用于REST的Jersey 1.x和Tomcat应用服务器。我们的bean是使用xjc从XMLSchema文件生成的,并在生成时使用annox添加注释。

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

在每个JAXB bean中添加@XmlRootElement有什么问题吗?

否。


我们希望能够在Result 中任意包含任何JAXB bean

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

  • http://blog.bdoughan.com/2010/08/using-xmlanyelement-to-build-generic.html

我们将其用作REST VO(例如作为元素),而没有每个不同类型的单独编组方法包括在内。

我担心的是,你得到的数据看起来不会像你想要的那样。SOAP有一个信封消息格式,数据在正文中。一般来说,REST没有这个功能。当我访问RESTful端点时,我通常不希望有某种封装数据的信封。

最新更新