Force URL Mapping Registration
Last modified by Raphaël Jakse on 2026/06/02 17:55
| Force URL Mapping to register again |
| Type | |
| Category | Other |
| Developed by | |
| Rating | |
| License | GNU Lesser General Public License 2.1 |
Table of contents
Description
Sometimes, the URL Mapping module fails to registrer upon extension installs.
If it happens, Here is the snippet you can use to force it to register again:
{{groovy}}
import org.xwiki.observation.EventListener;
import org.xwiki.contrib.urlmapping.internal.URLMappingResourceReferenceHandler;
import java.lang.reflect.Method;
import org.xwiki.resource.ResourceReferenceHandler;
import org.xwiki.component.util.DefaultParameterizedType;
import org.xwiki.resource.ResourceType;
if (request.fixurlmappingwithlistener) {
println("\nFIXING url-mapping\n")
services.component.getContextComponentManager().getInstance(EventListener.class, "urlprefixhandler").onEvent(null, null, null);
println("\nFIXED url-mapping\n")
} else if (request.fixurlmappingwithreflection) {
println("\nFIXING url-mapping\n")
Method setSupportedTypes = URLMappingResourceReferenceHandler.class.getDeclaredMethod("setSupportedTypes", Collection.class)
setSupportedTypes.setAccessible(true);
ResourceReferenceHandler urlMappingHandler = services.component.getContextComponentManager().getInstance(
new DefaultParameterizedType(null,ResourceReferenceHandler.class, ResourceType.class),
"urlmapping");
setSupportedTypes.invoke(urlMappingHandler, ["olddocs"]);
println("\nFIXED url-mapping\n")
}
if (!request.fixurlmappingwithlistener) {
println "\n\n{{html}}\n<p><a href='?fixurlmappingwithlistener=1' class='btn btn-primary'>Fix using listener</a> <a href='?fixurlmappingwithreflection=1' class='btn btn-primary'>Fix using reflection</a></p>{{/html}}\n";
}
{{/groovy}}
{{groovy}}
import org.xwiki.resource.ResourceReferenceHandler;
import org.xwiki.component.util.DefaultParameterizedType;
import org.xwiki.resource.ResourceType;
ResourceReferenceHandler urlMappingHandler = services.component.getContextComponentManager().getInstance(
new DefaultParameterizedType(null,ResourceReferenceHandler.class, ResourceType.class),
"urlmapping");
println("\nURL Mapping currently handles the following prefixes: " + urlMappingHandler.getSupportedResourceReferences())
{{/groovy}}
{{groovy}}
import org.xwiki.contrib.urlmapping.URLMappingPrefixHandler;
import org.apache.commons.lang3.StringUtils;
import java.util.stream.Collectors;
List<URLMappingPrefixHandler> handlers = services.component.getContextComponentManager().getInstanceList(URLMappingPrefixHandler.class);
List<String> types = handlers.stream()
.map(URLMappingPrefixHandler::getPrefix)
.filter(Objects::nonNull)
.map(prefix -> StringUtils.strip(prefix, "/"))
.collect(Collectors.toList());
println("\n\nURL Mapping would support these types after fixing: " + types);
{{/groovy}}