DocumentImpl resource = null; XmldbURI pathUri = XmldbURI.create(request.getPath()); try {  resource = broker.getXMLResource(pathUri, Lock.READ_LOCK);  if (resource == null) {   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."); }  String charset = getContext().getDefaultCharset(); response.setStatusCode(200); response.setContentType(Atom.MIME_TYPE+"; charset="+charset);  Serializer serializer = broker.getSerializer(); serializer.reset();   try { Writer w = new OutputStreamWriter(response.getOutputStream(),charset); serializer.serialize(feedDoc,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 { throw new NotFoundException("Resource " + request.getPath() + " not found"); } } else {  if (!resource.getPermissions().validate(broker.getUser(), Permission.READ)) { throw new PermissionDeniedException("Not allowed to read resource"); }  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 {  Serializer serializer = broker.getSerializer(); serializer.reset();  String charset = getContext().getDefaultCharset();  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()); } } } } finally { if (resource != null) { resource.getUpdateLock().release(Lock.READ_LOCK); } }
handleGet(true,broker,request,response);
   public void doGet(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) {                        // 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();               response.setStatusCode(200);               response.setContentType(Atom.MIME_TYPE+"; charset="+charset);                              Serializer serializer = broker.getSerializer();               serializer.reset();                              //Serialize the document               try {                  Writer w = new OutputStreamWriter(response.getOutputStream(),charset);                  serializer.serialize(feedDoc,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 {               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 (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());               }            }         }      } finally {         if (resource != null) {            resource.getUpdateLock().release(Lock.READ_LOCK);         }      }   }