diff --git a/javaUtilities/collaboration.dataserver/build.xml b/javaUtilities/collaboration.dataserver/build.xml index c1687df2a1..31bc9093f1 100644 --- a/javaUtilities/collaboration.dataserver/build.xml +++ b/javaUtilities/collaboration.dataserver/build.xml @@ -1,168 +1,145 @@ - - - - - - + + + + + + - - - - - + + + + + - - - - - - + - - - - - - - - - - - + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + - + + - - + - - + + - + + - - - + - - - - - - - - - - - - - + + + - - - - - - - + + + + + + + + + + + + + - - @{includes.file} - - - - - - - - - - - - No files found at @{source.base}/@{line}/@{source.suffix} - - - - - - + + + + + + + - - - + + @{includes.file} + + + + + + + + + + + + No files found at @{source.base}/@{line}/@{source.suffix} + + + + + + + + + + diff --git a/javaUtilities/collaboration.dataserver/src/com/raytheon/collaboration/dataserver/DataService.java b/javaUtilities/collaboration.dataserver/src/com/raytheon/collaboration/dataserver/DataService.java index 8dd4b17996..e7809757d7 100644 --- a/javaUtilities/collaboration.dataserver/src/com/raytheon/collaboration/dataserver/DataService.java +++ b/javaUtilities/collaboration.dataserver/src/com/raytheon/collaboration/dataserver/DataService.java @@ -23,7 +23,6 @@ import java.io.File; import java.io.IOException; import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -44,7 +43,8 @@ import com.raytheon.uf.common.http.AcceptHeaderValue; * * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- - * Feb 5, 2014 2756 bclement Initial creation + * Feb 05, 2014 2756 bclement Initial creation + * Mar 11, 2014 2827 bclement pass response object to FileManager in doGet * * * @@ -113,18 +113,17 @@ public class DataService extends HttpServlet { throw new RestException(HttpServletResponse.SC_NOT_FOUND, "No Such Resource: " + file.getAbsolutePath()); } - ServletOutputStream out = resp.getOutputStream(); if (file.isDirectory()) { if (acceptsXml(req)) { resp.setContentType(XML_CONTENT_TYPE); - manager.readDirectoryAsXml(file, out); + manager.readDirectoryAsXml(file, resp); } else { resp.setContentType(HTML_CONTENT_TYPE); - manager.readDirectoryAsHtml(file, out); + manager.readDirectoryAsHtml(file, resp); } } else { resp.setContentType(BINARY_CONTENT_TYPE); - manager.readFile(file, out); + manager.readFile(file, resp); } } catch (IOException e) { log.warn("Problem handling GET", e); diff --git a/javaUtilities/collaboration.dataserver/src/com/raytheon/collaboration/dataserver/WebServerRunner.java b/javaUtilities/collaboration.dataserver/src/com/raytheon/collaboration/dataserver/WebServerRunner.java index 0adfc9d7fd..778ca4aff6 100644 --- a/javaUtilities/collaboration.dataserver/src/com/raytheon/collaboration/dataserver/WebServerRunner.java +++ b/javaUtilities/collaboration.dataserver/src/com/raytheon/collaboration/dataserver/WebServerRunner.java @@ -47,6 +47,7 @@ import com.raytheon.collaboration.dataserver.auth.ServerAuthManager; * ------------ ---------- ----------- -------------------------- * Feb 14, 2014 2756 bclement Initial creation * Feb 28, 2014 2756 bclement added authManager + * Mar 11, 2014 2827 bclement disabled sessions on servlet context handler * * * @@ -72,7 +73,7 @@ public class WebServerRunner implements Runnable { Config.PORT_DEFAULT)); ServletContextHandler context = new ServletContextHandler( - ServletContextHandler.SESSIONS); + ServletContextHandler.NO_SESSIONS); context.setContextPath("/"); server.setHandler(context); @@ -84,8 +85,7 @@ public class WebServerRunner implements Runnable { String datapath = Config.getPath(Config.DATAPATH_KEY, Config.DATAPATH_DEFAULT); - String pathspec = datapath - + "*"; + String pathspec = datapath + "*"; context.addServlet(new ServletHolder(new DataService(base)), pathspec); List methods = Arrays.asList(new PutAuthHandler( diff --git a/javaUtilities/collaboration.dataserver/src/com/raytheon/collaboration/dataserver/XmppServerConnection.java b/javaUtilities/collaboration.dataserver/src/com/raytheon/collaboration/dataserver/XmppServerConnection.java index f55f31f78c..5ebf996e1c 100644 --- a/javaUtilities/collaboration.dataserver/src/com/raytheon/collaboration/dataserver/XmppServerConnection.java +++ b/javaUtilities/collaboration.dataserver/src/com/raytheon/collaboration/dataserver/XmppServerConnection.java @@ -50,6 +50,7 @@ import com.raytheon.uf.common.xmpp.iq.SecurityToggleProvider; * Feb 14, 2014 2756 bclement Initial creation * Feb 28, 2014 2756 bclement added custom IQ packet support * Mar 04, 2014 2756 bclement added xmpp server retry + * Mar 11, 2014 2827 bclement changed (dis)connect messages from debug to info * * * @@ -97,7 +98,7 @@ public class XmppServerConnection implements Runnable { registerListeners(conn); this.conn.connect(); this.conn.login(user, password); - log.debug("Connected to XMPP server at address: " + xmppServerAddress); + log.info("Connected to XMPP server at address: " + xmppServerAddress); } /** @@ -188,7 +189,7 @@ public class XmppServerConnection implements Runnable { * disconnect from XMPP server */ public void disconnect() { - log.debug("Disconnecting from XMPP server"); + log.info("Disconnecting from XMPP server"); conn.disconnect(); } diff --git a/javaUtilities/collaboration.dataserver/src/com/raytheon/collaboration/dataserver/storage/FileManager.java b/javaUtilities/collaboration.dataserver/src/com/raytheon/collaboration/dataserver/storage/FileManager.java index 38fa32808b..06da743f0b 100644 --- a/javaUtilities/collaboration.dataserver/src/com/raytheon/collaboration/dataserver/storage/FileManager.java +++ b/javaUtilities/collaboration.dataserver/src/com/raytheon/collaboration/dataserver/storage/FileManager.java @@ -25,12 +25,12 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.io.OutputStreamWriter; import java.io.Writer; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import com.raytheon.collaboration.dataserver.RestException; @@ -50,6 +50,7 @@ import com.raytheon.uf.common.util.concurrent.KeyLocker; * ------------ ---------- ----------- -------------------------- * Feb 6, 2014 2756 bclement Initial creation * Feb 28, 2014 2756 bclement moved to storage package, made buffer size public + * Mar 11, 2014 2827 bclement read methods take servlet response object * * * @@ -213,31 +214,43 @@ public class FileManager { } /** - * Output file to stream + * Output file to servlet response * * @param file - * @param out + * @param resp * @throws IOException * @throws RestException */ - public void readFile(File file, OutputStream out) throws IOException, + public void readFile(File file, HttpServletResponse resp) + throws IOException, RestException { InputStream in = null; List locks = null; + ServletOutputStream out = null; try { locks = getReadLocks(file); - if ( !file.exists()){ + if ( !file.isFile()){ throw new RestException(HttpServletResponse.SC_NOT_FOUND, "No Such File: " + file.getAbsoluteFile()); } in = new FileInputStream(file); + /* + * We have to wait until we are sure we can read the file before we + * get the outputstream. This is because the act of getting the + * output stream commits to using it with a 200 response. If we + * throw an error, we won't be able to use the response object to + * send an error and we will send a 200 with an empty body + */ + out = resp.getOutputStream(); copy(in, out); } finally { unlock(locks); if (in != null) { in.close(); } - out.close(); + if (out != null) { + out.close(); + } } } @@ -267,25 +280,25 @@ public class FileManager { } /** - * Output contents of directory to stream in XML format + * Output contents of directory to response in XML format * * @param directory - * @param out + * @param resp * @throws IOException * @throws RestException */ - public void readDirectoryAsXml(File directory, OutputStream out) + public void readDirectoryAsXml(File directory, HttpServletResponse resp) throws IOException, RestException { List locks = null; Writer w = null; try { locks = getReadLocks(directory); - if (!directory.exists()) { + if (!directory.isDirectory()) { // someone else modified it while waiting for lock throw new RestException(HttpServletResponse.SC_NOT_FOUND, "No Such Directory: " + directory.getAbsolutePath()); } - w = new OutputStreamWriter(out, "UTF-8"); + w = resp.getWriter(); w.write("\n"); w.write(""); for (File f : directory.listFiles()) { @@ -325,25 +338,25 @@ public class FileManager { } /** - * Output contents of directory to stream in HTML format + * Output contents of directory to response in HTML format * * @param directory - * @param out + * @param resp * @throws IOException * @throws RestException */ - public void readDirectoryAsHtml(File directory, OutputStream out) + public void readDirectoryAsHtml(File directory, HttpServletResponse resp) throws IOException, RestException { List locks = null; Writer w = null; try { locks = getReadLocks(directory); - if (!directory.exists()) { + if (!directory.isDirectory()) { // someone else modified it while waiting for lock throw new RestException(HttpServletResponse.SC_NOT_FOUND, "No Such Directory: " + directory.getAbsolutePath()); } - w = new OutputStreamWriter(out, "UTF-8"); + w = resp.getWriter(); w.write("\n"); w.write(""); for (File f : directory.listFiles()) { @@ -379,7 +392,7 @@ public class FileManager { } /** - * Copy bytes from input to output + * Copy bytes from input to output. Flushes output after writing. * * @param in * @param out @@ -392,6 +405,7 @@ public class FileManager { while ((len = in.read(buff)) != -1) { out.write(buff, 0, len); } + out.flush(); } /**