Last active
January 31, 2020 10:46
-
-
Save mkgl/356f585b667ab86300e58004556d4850 to your computer and use it in GitHub Desktop.
List all REST resources effectively registered into Magnolia's RESTEasy runtime
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import info.magnolia.cms.filters.CompositeFilter | |
import info.magnolia.cms.filters.FilterManager | |
import info.magnolia.cms.filters.MgnlFilter | |
import info.magnolia.cms.filters.ServletDispatchingFilter | |
import info.magnolia.objectfactory.Components | |
import info.magnolia.rest.RestDispatcherServlet | |
import java.util.stream.Stream | |
ServletDispatchingFilter restFilter = findFilter("RestDispatcherServlet-wrapper") | |
RestDispatcherServlet restDispatcherServlet = restFilter.servlet | |
restDispatcherServlet.endpoints.entrySet().stream() | |
.sorted({ entry1, entry2 -> entry1.key.compareTo(entry2.key) }) | |
.forEachOrdered({ entry -> println "$entry.key\t${entry.value.getClass()}" }) | |
static MgnlFilter findFilter(String filterName) { | |
def filterManager = Components.getComponent(FilterManager.class) | |
def rootFilter = filterManager.getFilterDispatcher().getTargetFilter() | |
flattenFilters(rootFilter) | |
// .forEachOrdered({ it -> println("${getFilterName(it)}") }) | |
.filter({ it -> getFilterName(it).equals(filterName) }) | |
.findFirst() | |
.orElseThrow({ -> new NoSuchElementException("Couldn't find any filter with name $filterName") }) | |
} | |
static Stream<MgnlFilter> flattenFilters(MgnlFilter filter) { | |
return filter instanceof CompositeFilter ? | |
Stream.concat( | |
Stream.of(filter), | |
Stream.of(((CompositeFilter) filter).getFilters()) | |
.flatMap({ it -> flattenFilters(it) })) : | |
Stream.of(filter); | |
} | |
static String getFilterName(MgnlFilter filter) { | |
return filter instanceof ServletDispatchingFilter ? | |
"${((ServletDispatchingFilter) filter).servletName}-wrapper" : | |
filter.name | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment