2014-01-09 44 views
1

在我当前的项目中,我们使用JAXB beans for Hibernate,并通过[REST API] [1]以XML和JSON格式发送数据。我们希望能够在我们用作REST VO的Result对象中任意包含任何JAXB bean(例如,作为<xsd:any>元素),而不必为可能包含的每种不同类型分别编组。看起来最简单的方法是使每个bean都有@XmlRootElement注释。将@XmlRootElement添加到每个JAXB bean是否有任何问题?

  1. 这是“无缝”编组的好方法吗?
  2. 这样做有后果吗?

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

[1]:在理想世界中的数据对象将是从域对象分开,但是这是一个小团队的一个小项目,所以数据库和API之间的隔离是没有必要的

回答

2

是对每个JAXB bean添加@XmlRootElement有没有问题?


我们希望能够任意包括结果

的通用Result对象与字段/属性与@XmlAnyElement(lax=true)标注的是内部的任何JAXB豆可以使用用@XmlRootElement注释的任意有效载荷对象创建通用消息的好方法。


我们使用作为REST VO(例如作为元素),而无需为每个不同类型的,可能是包括一个 单独 编组方法。

我在这里担心的是您返回的数据不会按您希望的方式显示。 SOAP具有数据在主体中的信封消息格式。一般来说REST没有这个。当我访问RESTful端点时,我通常不会期望某种信封封装数据。

相关问题