Skip to content

ConcurrentModificationException when using SwaggerSpecFilter #1831

@srl295

Description

@srl295

When using a SwaggerSpecFilter, GET …/swagger.json fails when accessed by as few as 3 clients.

Partial stack trace (1.5.7):

[err] java.util.ConcurrentModificationException
[err]   at java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:711)
[err]   at java.util.LinkedHashMap$LinkedKeyIterator.next(LinkedHashMap.java:734)
[err]   at io.swagger.core.filter.SpecFilter.filterDefinitions(SpecFilter.java:200)
[err]   at io.swagger.core.filter.SpecFilter.filter(SpecFilter.java:86)
[err]   at io.swagger.jaxrs.listing.ApiListingResource.process(ApiListingResource.java:121)
[err]   at io.swagger.jaxrs.listing.ApiListingResource.getListingJson(ApiListingResource.java:154)
[err]   at io.swagger.jaxrs.listing.ApiListingResource.getListing(ApiListingResource.java:141)
[err]   at sun.reflect.GeneratedMethodAccessor168.invoke(Unknown Source)
[err]   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[err]   at java.lang.reflect.Method.invoke(Method.java:498)
[err]   at com.ibm.ws.jaxrs20.server.LibertyJaxRsServerFactoryBean.performInvocation(LibertyJaxRsServerFactoryBean.java:607)
[err]   at [internal classes]
[err]   at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
[err]   at com.ibm.websphere.jaxrs.server.IBMRestServlet.service(IBMRestServlet.java:99)
…

Code to reproduce:

        FilterFactory.setFilter(new SwaggerSpecFilter() {
            public boolean isPropertyAllowed(Model model, Property property, String propertyName,
                    Map<String, List<String>> params, Map<String, String> cookies, Map<String, List<String>> headers) {
                return true;
            }
            public boolean isParamAllowed(Parameter parameter, Operation operation, ApiDescription api,
                    Map<String, List<String>> params, Map<String, String> cookies, Map<String, List<String>> headers) {
                return true;
            }

            public boolean isOperationAllowed(Operation operation, ApiDescription api, Map<String, List<String>> params,
                    Map<String, String> cookies, Map<String, List<String>> headers) {
                return true;
            }
        });

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions