title: Tomcat permission denied when trying to write a file
body: <p>I am trying to send a zip via tomcat server. But when I try to access <a href="http://localhost:8094/fetna-project-rest/webapi/retdoc/10" rel="nofollow">http://localhost:8094/fetna-project-rest/webapi/retdoc/10</a> I got a permission error which I included in the bottom. I run the server on ubuntu. Can you please help me? My source codes are here:</p>
  
  <pre><code>public static void addToZipFile(String fileName, ZipOutputStream zos) throws FileNotFoundException, IOException {
  
      System.out.println("Writing '" + fileName + "' to zip file");
  
      File file = new File(fileName);
      if (!file.exists()) {
          file.createNewFile();
      }
  
      FileInputStream fis;
      fis = new FileInputStream(file);
      ZipEntry zipEntry = new ZipEntry(fileName);
      zos.putNextEntry(zipEntry);
  
      byte[] bytes = new byte[1024];
      int length;
      while ((length = fis.read(bytes)) &gt;= 0) {
          zos.write(bytes, 0, length);
      }
  
      zos.closeEntry();
      fis.close();
  }
  
  @GET
  @Path("retdoc/{id}")
  @Produces(MediaType.APPLICATION_OCTET_STREAM)
  public Response retrieveDocument(@PathParam("id") String ID) throws IOException {
  
      FileOutputStream fos = new FileOutputStream("test.zip");
      ZipOutputStream zos = new ZipOutputStream(fos);
  
      String file1Name = "test.txt";
  
      addToZipFile(file1Name, zos);
      zos.close();
      fos.close();
      File zippedFile = new File("test.zip");
      return Response.ok(FileUtils.readFileToByteArray(zippedFile))
              .type("application/zip")
              .header("Content-Disposition", "attachment; filename=\"retrievedDocuments.zip\"")
              .build();
  }
  </code></pre>
  
  <p>and my stacktrace:</p>
  
  <pre><code>message org.glassfish.jersey.server.ContainerException: java.io.FileNotFoundException: test.zip (Permission denied)
  
  description The server encountered an internal error that prevented it from fulfilling this request.
  
  exception
  
  javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.io.FileNotFoundException: test.zip (Permission denied)
      org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:487)
      org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425)
      org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383)
      org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336)
      org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223)
      org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  root cause
  
  org.glassfish.jersey.server.ContainerException: java.io.FileNotFoundException: test.zip (Permission denied)
      org.glassfish.jersey.servlet.internal.ResponseWriter.rethrow(ResponseWriter.java:278)
      org.glassfish.jersey.servlet.internal.ResponseWriter.failure(ResponseWriter.java:260)
      org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:509)
      org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:334)
      org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
      org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
      org.glassfish.jersey.internal.Errors.process(Errors.java:315)
      org.glassfish.jersey.internal.Errors.process(Errors.java:297)
      org.glassfish.jersey.internal.Errors.process(Errors.java:267)
      org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
      org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305)
      org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)
      org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:471)
      org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425)
      org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383)
      org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336)
      org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223)
      org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  root cause
  
  java.io.FileNotFoundException: test.zip (Permission denied)
      java.io.FileOutputStream.open(Native Method)
      java.io.FileOutputStream.&lt;init&gt;(FileOutputStream.java:221)
      java.io.FileOutputStream.&lt;init&gt;(FileOutputStream.java:110)
      org.eu.srdc.ehealth.MyResource.retrieveDocument(MyResource.java:78)
      sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      java.lang.reflect.Method.invoke(Method.java:606)
      org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
      org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144)
      org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161)
      org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160)
      org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99)
      org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389)
      org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347)
      org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102)
      org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326)
      org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
      org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
      org.glassfish.jersey.internal.Errors.process(Errors.java:315)
      org.glassfish.jersey.internal.Errors.process(Errors.java:297)
      org.glassfish.jersey.internal.Errors.process(Errors.java:267)
      org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
      org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305)
      org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)
      org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:471)
      org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425)
      org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383)
      org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336)
      org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223)
      org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  note The full stack trace of the root cause is available in the Apache Tomcat/8.0.30 logs.
  </code></pre>