There isn’t, but the thing is that the only thing that’s being cached is the 
initial build of the definition.

So when your app starts up, the scanning will happen, it’ll build the Swagger 
object, and won’t repeat that process.

Beyond that, every request should be filtered and not cached, which makes your 
issue odd.

 

Based on what you describe, it doesn’t seem likely that there’s another proxy 
in the way that does the caching, as it wouldn’t hit the filter at all… but 
just to be on the safe side, is there another proxy?

 

 

 

From: <[email protected]> on behalf of Bryan Nelson 
<[email protected]>
Reply-To: "[email protected]" 
<[email protected]>
Date: Tuesday, 20 June 2017 at 13:43
To: Swagger <[email protected]>
Subject: Re: Swagger-Core - Caching of Tag Data in Operations?

 

Good question.  I see the logs every time I make a request, though.  I can also 
step through it in the debugger and see that when entering a subsequent time 
the tags that were removed on the first request are gone immediately upon 
entering the method. 

 

Interestingly, I've also noticed the reverse situation occurring as well.  On 
some server startups I will filter and the filter won't actually remove the 
tags I'm trying to purge in the final json request.  I can see them being 
removed in the code as I log and step through, but they appear in the final 
request.  This definitely makes me think it is a caching issue.

 

Is there a way to specifically NOT cache?


On Tuesday, June 20, 2017 at 3:59:58 PM UTC-4, Ron wrote: 

Thanks for that. Before diving in too much, I see you have debugging logs. When 
you start the app and issue requests to get the definition, do you see those 
log lines for each call or only for the first?

 

 

 

From: <[email protected]> on behalf of Bryan Nelson 
<[email protected]>
Reply-To: "[email protected]" <[email protected]>
Date: Tuesday, 20 June 2017 at 12:09
To: Swagger <[email protected]>
Subject: Re: Swagger-Core - Caching of Tag Data in Operations?

 

Sure.  I can share all of the codez. 

 

import static org.apache.commons.collections.CollectionUtils.isEmpty;

import static org.apache.commons.collections.CollectionUtils.isNotEmpty;

import static org.apache.commons.collections.ListUtils.intersection;

import static org.apache.commons.collections.MapUtils.isEmpty;

import static org.apache.commons.lang3.StringUtils.isNotBlank;

 

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashSet;

import java.util.List;

import java.util.Map;

import java.util.Set;

 

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

 

import io.swagger.core.filter.AbstractSpecFilter;

import io.swagger.model.ApiDescription;

import io.swagger.models.Operation;

 

public class SwaggerTagFilterExample extends AbstractSpecFilter {

 

 private static final Logger logger = 
LoggerFactory.getLogger(SwaggerTagFilterExample.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);

 }

 

 @Override

 public boolean isOperationAllowed (Operation operation, ApiDescription api, 
Map<String, List<String>> paramMap, 
              Map<String, String> cookies,  Map<String, List<String>> headers) {

 

 logger.debug("--Entering--");

 

 boolean showOperation = false;

 

 List<String> nameParamList = null;

 List<String> tagValueList = null;

 

 try {

 

 // get all the tags from the json

 tagValueList = operation.getTags();

 

 logger.debug("The tag values are: {}", tagValueList);

 

 nameParamList = getParamList(paramMap, "names");

 

 // apply name filtering logic

 showOperation = isEmpty(nameParamList) ? true : 
applyNameFiltering(nameParamList, tagValueList);

 // remove all name tags for this operation that are not in the nameParamList

 if (showOperation) {

 operation.setTags(purgeUnrequestedNameTags(nameParamList, tagValueList));

 }

 

 } catch (Exception e) {

 

 logger.error("Var - nameParamList: {}", nameParamList);

 logger.error("Var - tagValueList: {}", tagValueList);

 

 logger.error("Exception occurred when verifying allowed operations - No 
swagger operation displayed for you!!");

 }

 

 logger.debug("--Exiting--");

 

 return showOperation;

 }

 

 

@Override

 public boolean isRemovingUnreferencedDefinitions() {

     return true;

 }

 

 

/** 

  * Returns the values from the paramMap that are associated with the paramName 
key as a List<String>.  

  * 

  * @param paramMap

  * @param paramName

  * @return

  */

 private List<String> getParamList(Map<String, List<String>> paramMap, String 
paramName) {

 logger.debug("--Entering--");

 logger.debug("Var - paramMap: " + (isEmpty(paramMap) ? null : 
paramMap.toString()));

 logger.debug("Var - paramName: " + paramName);

 List<String> paramList = null;

 try {

 if (paramMap.containsKey(paramName)) {  

 logger.debug("paramMap.get(paramName).isEmpty() is: {}", 
paramMap.get(paramName).isEmpty());

 

 if (isNotBlank(paramMap.get(paramName).get(0))) { 

 

 // get specific tags from the query param

 paramList = Arrays.asList(paramMap.get(paramName).get(0).split(","));

 }

 

 logger.debug("The {} params are: {}", paramName, paramList);

 

 } 

 } catch (Exception e) {

 logger.error("Var - paramList: {}", paramList);

 logger.error("Exception occurred when checking the filter values against the 
operation tags: {}", e);

 logger.error("Continuing flow...");

 }

 logger.debug("--Exiting--");

 return paramList;

 }

 

private final boolean applyNameFiltering(List<String> nameParamList, 
List<String> tagValueList) {

   logger.debug("--Entering--");

   logger.debug("Var - nameParamList: " + (isEmpty(nameParamList) ? null : 
nameParamList.toString()));

   logger.debug("Var - tagValueList: " + (isEmpty(tagValueList) ? null : 
tagValueList.toString()));

boolean matchFound = false;

try {

if (isNotEmpty(nameParamList) && isNotEmpty(tagValueList)) {

matchFound = isNotEmpty(intersection(nameParamList, tagValueList));

}

   } catch (Exception e) {

   logger.error("Var - matchFound: {}", matchFound);

   logger.error("Exception occurred when finding matching name tags: {}", e);

   logger.error("Continuing flow...");

   }

logger.debug("--Exiting--");

return matchFound;

}

/**

* 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<String> purgeUnrequestedNameTags(List<String> nameParamList, 
List<String> tagValueList) {

 

List<String> cleanNameTagValueList = new ArrayList<String>();

try {

if (isEmpty(nameParamList)) {

cleanNameTagValueList = tagValueList;

} else { 

for (String 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) || !TAG_NAME_SET.contains(tag)) {

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!

-- 
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.

-- 
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.


-- 
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.

Reply via email to