@GET public Spaces getSpaces( @PathParam("wikiName") String wikiName, @QueryParam("start") @DefaultValue("0") Integer start, @QueryParam("number") @DefaultValue("-1") Integer number) throws XWikiException, QueryException, ComponentLookupException { String database = Utils.getXWikiContext(componentManager).getDatabase(); Spaces spaces = objectFactory.createSpaces(); /* This try is just needed for executing the finally clause. */ try { Utils.getXWikiContext(componentManager).setDatabase(wikiName); List<String> spaceNames = queryManager .getNamedQuery("getSpaces") .addFilter(componentManager.<QueryFilter>getInstance(QueryFilter.class, "hidden")) .setOffset(start) .setLimit(number) .execute(); for (String spaceName : spaceNames) { String homeId = Utils.getPageId(wikiName, spaceName, "WebHome"); Document home = null; XWiki xwikiApi = Utils.getXWikiApi(componentManager); if (xwikiApi.hasAccessLevel("view", homeId)) { if (xwikiApi.exists(homeId)) { home = Utils.getXWikiApi(componentManager).getDocument(homeId); } spaces .getSpaces() .add( DomainObjectFactory.createSpace( objectFactory, uriInfo.getBaseUri(), wikiName, spaceName, home)); } } } finally { Utils.getXWikiContext(componentManager).setDatabase(database); } return spaces; }