Skip to content

Instantly share code, notes, and snippets.

@mkgl
Last active January 31, 2020 10:46
Show Gist options
  • Save mkgl/356f585b667ab86300e58004556d4850 to your computer and use it in GitHub Desktop.
Save mkgl/356f585b667ab86300e58004556d4850 to your computer and use it in GitHub Desktop.
List all REST resources effectively registered into Magnolia's RESTEasy runtime
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