From ebd8d8afb83b03c336180c18d00d3712bf8fe9a2 Mon Sep 17 00:00:00 2001 From: Athou Date: Wed, 17 Apr 2013 11:38:55 +0200 Subject: [PATCH] use application resources to find the annotation, as weld is proxying classes and annotation is not present on those --- .../frontend/rest/resources/AbstractREST.java | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/commafeed/frontend/rest/resources/AbstractREST.java b/src/main/java/com/commafeed/frontend/rest/resources/AbstractREST.java index 82b08d53..34b4925a 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/AbstractREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/AbstractREST.java @@ -12,6 +12,7 @@ import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Application; import javax.ws.rs.core.Context; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; @@ -19,6 +20,7 @@ import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.UriInfo; +import org.apache.commons.lang.StringUtils; import org.apache.wicket.ThreadContext; import org.apache.wicket.authentication.IAuthenticationStrategy; import org.apache.wicket.authroles.authorization.strategies.role.Roles; @@ -171,15 +173,26 @@ public abstract class AbstractREST { @GET @ApiOperation(value = "Returns information about API parameters", responseClass = "com.wordnik.swagger.core.Documentation") - public Response getHelp(@Context HttpHeaders headers, - @Context UriInfo uriInfo) { + public Response getHelp(@Context Application app, + @Context HttpHeaders headers, @Context UriInfo uriInfo) { TypeUtil.addAllowablePackage(Entries.class.getPackage().getName()); String apiVersion = ApiListingResource.API_VERSION; String swaggerVersion = SwaggerSpec.version(); String basePath = ApiListingResource .getBasePath(applicationSettingsService.get().getPublicUrl()); - Api api = getClass().getAnnotation(Api.class); + + Api api = null; + String path = prependSlash(uriInfo.getPath()); + for (Class klass : app.getClasses()) { + Api a = klass.getAnnotation(Api.class); + if (a != null && a.value() != null + && StringUtils.equals(prependSlash(a.value()), path)) { + api = a; + break; + } + } + if (api == null) { return Response .status(Status.NOT_FOUND) @@ -198,4 +211,11 @@ public abstract class AbstractREST { doc.setApiVersion(apiVersion); return Response.ok().entity(doc).build(); } + + private String prependSlash(String path) { + if (!path.startsWith("/")) { + path = "/" + path; + } + return path; + } }