我们使用cxf 2.5.2和spring来公开和使用静态服务。
为了分发服务接口(interface)类,我们开始使用wadl2java目标(该目标基于给定的wadl文件生成接口(interface)类)

生成的wadl不包含正确的响应类型,因为我猜是这样,所以生成的接口(interface)都具有“Response”作为返回类型。

前任。如果restful get方法返回“List”,则生成的wadl仅包含以下段:
<response><representation mediaType="application/json"/></response>
并且从该wadl文件生成的相应接口(interface)包含返回类型为“Response”

有人可以建议采取什么措施来防止实际的响应类型丢失吗?
是否需要任何注释(例如ElementClass?如何使用它?)或提供程序?

当前代码:

@GET
@Path("/itemsForCategory")
@Produces("application/json")
@Description("getItemsForCategory")
public List<Item> getItemsForCategory(@QueryParam("category")String category) {

最佳答案

通用的“Response”返回类型似乎与您试图返回列表的事实无关。也就是说,即使使用“Item”作为返回类型,也会在生成的接口(interface)中导致返回类型为“Response”的方法。为了解决这个问题,您需要在WADL资源响应中添加element属性:

<response><representation mediaType="application/json" element="item"/></response>

如果您直接修改WADL,则此方法有效,可能会或可能不支持等效的JAX-RS批注。这也不能解决您返回列表的问题。我的建议(我以前使用过)是创建一个封装列表返回类型的包装器列表类型(例如ItemList)。

在这两种情况下,您都需要从下至上翻转至自上而下(即先使用WADL)实现。这应该还不错,因为您已经有了实现,并且可以使其实现所生成的接口(interface)。

为了澄清所有这些,我基于标准的JAX-RS“Bookstore”示例创建了一个简单的示例项目。您可以在github上查看pom(具有wadl2java配置)和实际的wadl。生成的代码也在那里(例如BookstoreidResource.java)。

关于java - CXF JAXRS |生成的wadl中不存在复杂的响应类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9408597/

10-12 03:04