在我目前的项目中,我们使用JAXB bean进行Hibernate,并通过[REST API] [1]以XML和JSON格式发送数据。我们希望能够在我们用作REST VO的Result对象中任意包含任何JAXB bean(例如,作为<xsd:any>
元素),而不必为每个可以包含的不同类型使用单独的编组方法。似乎最简单的方法是在每个bean上使用@XmlRootElement注释。
我们正在使用Java 1.6,EclipseLink / MOXy用于jaxb,Jersey 1.x用于REST,以及Tomcat应用服务器。我们的bean是使用xjc从XML Schema文件生成的,并使用annox在生成时添加注释。
[1]:在理想世界中,数据对象将与域对象分离,但这是小团队中的一个小项目,因此数据库和api之间的隔离不是必需的
答案 0 :(得分:2)
是否有任何关于将@XmlRootElement添加到每个JAXB bean的问题?
没有
我们希望能够在Result
中任意包含任何JAXB bean
带有Result
注释的字段/属性的通用@XmlAnyElement(lax=true)
对象是创建通用消息的好方法,其中可以使用使用@XmlRootElement
注释的任意有效负载对象。
我们使用REST VO(例如作为元素)而没有 可以是每种不同类型的单独编组方法 包括在内。
我担心的是你得到的数据看起来不像你想要的那样。 SOAP具有信封消息格式,其中数据位于正文中。通常REST没有这个。当我访问RESTful端点时,我通常不希望某种信封包裹数据。