java - CXF 贾克斯 |生成的 wadl 中不存在复杂的响应类型

标签 java rest cxf jax-rs wadl

我们使用 cxf 2.5.2 和 spring 来公开和使用 Restful 服务。 为了分发服务接口(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 资源响应中添加元素属性:

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

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

无论哪种情况,您都需要从自下而上转向自上而下(即,WADL 优先)实现。这应该不会太糟糕,因为您已经有了实现,您可以让它实现生成的接口(interface)。

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

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

相关文章:

java.lang.SecurityException : No active admin owned by uid 10047 for policy #4 on wipe data

node.js - REST API 安全性。 SSL 还是 OAuth2?

ios - 如何在没有外部库的情况下干净地将文件发布到 API 端点?

java - CXF JAX-WS 无法将参数发送到 Web 服务

java - 从 wsdl 生成 JAX-WS 客户端抽象接口(interface)

java - java可以处理由MS SQL Server RAISEERROR命令引起的异常吗?

java - 在 Eclipse 中获取我的项目的库

java - Gradle Android Studio

java - REST 中需要返回 2 组不同响应的 HTTP GET 响应的正确设计原则是什么

cxf - CXF简单前端服务类中如何访问HttpServletRequest