private void wipeDatabase() { DBBroker broker = null; Transaction tx = Database.requireTransaction(); try { broker = db.acquireBroker(); broker.removeCollection(tx.tx, broker.getCollection(XmldbURI.ROOT_COLLECTION_URI)); tx.commit(); } catch (PermissionDeniedException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } finally { tx.abortIfIncomplete(); db.releaseBroker(broker); } }
protected void handleGet( boolean returnContent, DBBroker broker, IncomingMessage request, OutgoingMessage response) throws BadRequestException, PermissionDeniedException, NotFoundException, EXistException { DocumentImpl resource = null; XmldbURI pathUri = XmldbURI.create(request.getPath()); try { resource = broker.getXMLResource(pathUri, Lock.READ_LOCK); if (resource == null) { String id = request.getParameter("id"); if (id != null) { id = id.trim(); if (id.length() == 0) { id = null; } } // Must be a collection Collection collection = broker.getCollection(pathUri); if (collection != null) { if (!collection.getPermissions().validate(broker.getUser(), Permission.READ)) { throw new PermissionDeniedException("Not allowed to read collection"); } DocumentImpl feedDoc = collection.getDocument(broker, FEED_DOCUMENT_URI); if (feedDoc == null) { throw new BadRequestException( "Collection " + request.getPath() + " is not an Atom feed."); } // Return the collection feed String charset = getContext().getDefaultCharset(); if (returnContent) { if (id == null) { response.setStatusCode(200); getFeed(broker, request.getPath(), response); } else { response.setStatusCode(200); getEntryById(broker, request.getPath(), id, response); } } else { response.setStatusCode(204); } } else { throw new NotFoundException("Resource " + request.getPath() + " not found"); } } else { // Do we have permission to read the resource if (!resource.getPermissions().validate(broker.getUser(), Permission.READ)) { throw new PermissionDeniedException("Not allowed to read resource"); } if (returnContent) { response.setStatusCode(200); if (resource.getResourceType() == DocumentImpl.BINARY_FILE) { response.setContentType(resource.getMetadata().getMimeType()); try { OutputStream os = response.getOutputStream(); broker.readBinaryResource((BinaryDocument) resource, os); os.flush(); } catch (IOException ex) { LOG.fatal("Cannot read resource " + request.getPath(), ex); throw new EXistException("I/O error on read of resource " + request.getPath(), ex); } } else { // xml resource Serializer serializer = broker.getSerializer(); serializer.reset(); String charset = getContext().getDefaultCharset(); // Serialize the document try { response.setContentType( resource.getMetadata().getMimeType() + "; charset=" + charset); Writer w = new OutputStreamWriter(response.getOutputStream(), charset); serializer.serialize(resource, w); w.flush(); w.close(); } catch (IOException ex) { LOG.fatal("Cannot read resource " + request.getPath(), ex); throw new EXistException("I/O error on read of resource " + request.getPath(), ex); } catch (SAXException saxe) { LOG.warn(saxe); throw new BadRequestException("Error while serializing XML: " + saxe.getMessage()); } } } else { response.setStatusCode(204); } } } finally { if (resource != null) { resource.getUpdateLock().release(Lock.READ_LOCK); } } }