Esempio n. 1
0
  private static String serialize(DBBroker broker, Item item) throws SAXException, XPathException {
    Serializer serializer = broker.getSerializer();

    serializer.reset();
    String value;
    if (Type.subTypeOf(item.getType(), Type.NODE)) {
      value = serializer.serialize((NodeValue) item);
    } else {
      value = item.getStringValue();
    }
    return value;
  }
Esempio n. 2
0
 private String serialize(NodeValue node) throws SAXException {
   Serializer serializer = context.getBroker().getSerializer();
   serializer.reset();
   serializer.setProperties(OUTPUT_PROPERTIES);
   return serializer.serialize(node);
 }
Esempio n. 3
0
  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);
      }
    }
  }