@Override protected void doHandleStatelessRequest(Request req, Response res) { String repo = (String) req.getAttributes().get("repo"); String docid = (String) req.getAttributes().get("docid"); DOMDocumentFactory domFactory = new DOMDocumentFactory(); DOMDocument result = (DOMDocument) domFactory.createDocument(); if (repo == null || repo.equals("*")) { try { Element serversNode = result.createElement("avalaibleServers"); result.setRootElement((org.dom4j.Element) serversNode); RepositoryManager repositoryManager = Framework.getLocalService(RepositoryManager.class); for (String repositoryName : repositoryManager.getRepositoryNames()) { Element server = result.createElement("server"); server.setAttribute("title", repositoryName); server.setAttribute("url", getRelURL(repositoryName, "*")); serversNode.appendChild(server); } res.setEntity(result.asXML(), MediaType.TEXT_XML); res.getEntity().setCharacterSet(CharacterSet.UTF_8); return; } catch (DOMException e) { handleError(result, res, e); return; } } else { DocumentModel dm; boolean init = initRepository(res, repo); boolean isRoot = false; try { if (init) { if (docid == null || docid.equals("*")) { dm = session.getRootDocument(); isRoot = true; } else { dm = session.getDocument(new IdRef(docid)); } } else { handleError(res, "Unable to init repository"); return; } } catch (NuxeoException e) { handleError(res, e); return; } Element current = result.createElement("document"); try { current.setAttribute("title", dm.getTitle()); } catch (DOMException | NuxeoException e) { handleError(res, e); } current.setAttribute("type", dm.getType()); current.setAttribute("id", dm.getId()); current.setAttribute("name", dm.getName()); if (isRoot) { current.setAttribute("url", getRelURL(repo, "")); } else { current.setAttribute("url", getRelURL(repo, dm.getRef().toString())); } result.setRootElement((org.dom4j.Element) current); if (dm.isFolder()) { // Element childrenElem = result.createElement("children"); // root.appendChild(childrenElem); DocumentModelList children; try { children = session.getChildren(dm.getRef()); } catch (NuxeoException e) { handleError(result, res, e); return; } for (DocumentModel child : children) { Element el = result.createElement("document"); try { el.setAttribute("title", child.getTitle()); } catch (DOMException e) { handleError(res, e); } catch (NuxeoException e) { handleError(res, e); } el.setAttribute("type", child.getType()); el.setAttribute("id", child.getId()); el.setAttribute("name", child.getName()); el.setAttribute("url", getRelURL(repo, child.getRef().toString())); current.appendChild(el); } } res.setEntity(result.asXML(), MediaType.TEXT_XML); res.getEntity().setCharacterSet(CharacterSet.UTF_8); } }