我们使用 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/