Aha!
The issue here was that I was still referencing an older version of the
Swagger jars in my workspace...specifically 1.5.10. Apparently the
*process(...)* method does not exist in the 1.5.10 version of
*BaseApiListingResource*; it made it's debut in 1.5.11. I upgraded all of
my local references to 1.5.15 and the compiler issue is resolved.
Should've thought to check that before...
On Thursday, June 22, 2017 at 2:30:23 PM UTC-4, Bryan Nelson wrote:
>
> Ok, I see how I can do it using both. All of the filter specific logic
> stays in the filter, and I basically moved the purging part into a class
> that extends ApiListingResource; I've included that code here below because
> I'm having an issue with it.
>
> The problem is that I'm having a compiler issue on the highlighted portion.
> I'm receiving this error:
>
> *The method process(Application, ServletContext, ServletConfig,
>> HttpHeaders, UriInfo) from the type BaseApiListingResource is not visible*
>
>
> I realize this might just be a Java question, rather than Swagger related,
> but I figured I'd post it here anyway. The part I don't understand is why
> I can reference getListingJsonResponse from within getListing just fine
> when it has the exact same visibility as process. I tried accessing
> process from within getListing as well, but I get the same error. What
> am I missing here?
>
> I'm soooo close...
>
> import static org.apache.commons.collections.CollectionUtils.isEmpty;
> import static org.apache.commons.collections.CollectionUtils.isNotEmpty;
> import static org.apache.commons.lang3.StringUtils.isNotBlank;
>
> import java.util.ArrayList;
> import java.util.HashSet;
> import java.util.List;
> import java.util.Map;
> import java.util.Set;
>
> import javax.servlet.ServletConfig;
> import javax.servlet.ServletContext;
> import javax.ws.rs.GET;
> import javax.ws.rs.PathParam;
> import javax.ws.rs.Produces;
> import javax.ws.rs.core.Application;
> import javax.ws.rs.core.Context;
> import javax.ws.rs.core.HttpHeaders;
> import javax.ws.rs.core.MediaType;
> import javax.ws.rs.core.MultivaluedMap;
> import javax.ws.rs.core.Response;
> import javax.ws.rs.core.UriInfo;
>
> import org.slf4j.Logger;
> import org.slf4j.LoggerFactory;
>
> import io.swagger.annotations.ApiOperation;
> import io.swagger.jaxrs.listing.ApiListingResource;
> import io.swagger.models.Swagger;
> import io.swagger.models.Tag;
> import io.swagger.models.Operation;
> import io.swagger.models.Path;
> import io.swagger.util.Json;
>
> @javax.ws.rs.Path("/internal/swagger/{type:json|yaml}")
> public class SwaggerTagFilterResourceExample extends ApiListingResource {
>
> private static final Logger logger =
> LoggerFactory.getLogger(SwaggerTagFilterResourceExample.class);
> private static final String TAG_NAME_ADMIN1 = "Bob";
> private static final String TAG_NAME_ADMIN2 = "Carl";
> private static final String TAG_NAME_ADMIN3 = "Frank";
> private static final String TAG_NAME_ADMIN4 = "Steve";
>
> private static final Set<String> TAG_NAME_SET = new HashSet<String>();
> static {
> TAG_NAME_SET.add(TAG_NAME_ADMIN1);
> TAG_NAME_SET.add(TAG_NAME_ADMIN2);
> TAG_NAME_SET.add(TAG_NAME_ADMIN3);
> TAG_NAME_SET.add(TAG_NAME_ADMIN4);
> }
> @Context
> ServletContext context;
>
> @GET
> @Produces({MediaType.APPLICATION_JSON, "application/yaml"})
> @ApiOperation(value = "The swagger definition in either JSON or YAML",
> hidden = true)
> public Response getListing(@Context Application app, @Context
> ServletConfig servletConfig, @Context HttpHeaders headers,
> @Context UriInfo uriInfo, @PathParam("type") String type) {
>
> if (isNotBlank(type) && type.trim().equalsIgnoreCase("yaml")) {
>
> logger.debug("Creating Swagger YAML...");
>
> return getListingYamlResponse(app, context, servletConfig,
> headers, uriInfo);
>
> } else {
>
> logger.debug("Creating Swagger JSON...");
>
> return getListingJsonResponse(app, context, servletConfig,
> headers, uriInfo);
> }
> }
>
> protected Response getListingJsonResponse(
> Application app,
> ServletContext servletContext,
> ServletConfig servletConfig,
> HttpHeaders headers,
> UriInfo uriInfo) {
>
> Swagger swagger = process(app, servletContext, servletConfig,
> headers, uriInfo);
>
> MultivaluedMap<String, String> queryParamMultivaluedMap =
> uriInfo.getQueryParameters();
> List<Tag> tagList = swagger.getTags();
> Map<String, Path> pathMap = swagger.getPaths();
> List<Tag> newTagList = new ArrayList<Tag>();
> List<String> newStringTagList = new ArrayList<String>();
>
> for (MultivaluedMap.Entry<String, List<String>> entry :
> queryParamMultivaluedMap.entrySet()) {
>
> if (entry.getKey().equalsIgnoreCase("names") &&
> isNotEmpty(entry.getValue())) {
>
> // remove all name tags from the top level Swagger object that are not in
> the names query parameter list
> swagger.setTags(purgeUnrequestedNameTags(entry.getValue(), tagList));
>
> // remove all name tags from each Operation object that are not in
> the names query parameter list
> for (Path path : pathMap.values()) {
>
> List<Operation> operationList = path.getOperations();
>
> for (Operation operation : operationList) {
>
> newTagList = purgeUnrequestedNameTags(entry.getValue(), tagList);
>
> for (Tag tag : newTagList) {
>
> newStringTagList.add(tag.getName());
> }
>
> operation.setTags(newStringTagList);
> }
> }
> }
> }
>
> if (swagger != null) {
> return
> Response.ok().entity(Json.mapper().writeValueAsString(swagger)).type(MediaType.APPLICATION_JSON_TYPE).build();
> } else {
> return Response.status(404).build();
> }
> }
>
> /**
> * Returns a purged list of name tags based upon the master set of name
> tags while
> * leaving non-name tags untouched.
> *
> * @param nameParamList
> * @param tagValueList
> * @return
> */
> private List<Tag> purgeUnrequestedNameTags(List<String> nameParamList,
> List<Tag> tagValueList) {
>
> List<Tag> cleanNameTagValueList = new ArrayList<Tag>();
> try {
> if (isEmpty(nameParamList)) {
> cleanNameTagValueList = tagValueList;
> } else {
> for (Tag tag : tagValueList) {
> // keep the name if it was passed in as a parameter (in the nameParamList),
> // but if it is a name tag and was NOT passed in then don't keep it; this
> also
> // makes sure that any non-name tags are also kept
> if (nameParamList.contains(tag.getName()) ||
> !TAG_NAME_SET.contains(tag.getName())) {
> cleanNameTagValueList.add(tag);
> }
> }
> }
> } catch (Exception e) {
> logger.error("Var - cleanNameTagValueList: {}", cleanNameTagValueList);
> logger.error("Exception occurred while purging erroneous name tags:
> {}", e);
> logger.error("Continuing flow...");
> }
> logger.debug("--Exiting--");
> return cleanNameTagValueList;
> }
> }
>
> Thanks!
>
> On Wednesday, June 21, 2017 at 4:35:21 PM UTC-4, Ron wrote:
>>
>> Possibly both, it depends on your logic.
>>
>
--
You received this message because you are subscribed to the Google Groups
"Swagger" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.