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