Repository: incubator-reef Updated Branches: refs/heads/master b9b8dca4a -> ce017df22
[REEF-781] Fix NPE on receiving filename query without arguments This PR addresses the followings issues in HttpServerReefEventHandler: * Fix NullPointerException on `filename` query without arguments * Use typed list to avoid dynamic type-casting * Remove mixed use of both `getWriter()` and `getOutputStream()' JIRA: [REEF-781](https://issues.apache.org/jira/browse/REEF-781) Pull Request: Closes #520 Project: http://git-wip-us.apache.org/repos/asf/incubator-reef/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-reef/commit/ce017df2 Tree: http://git-wip-us.apache.org/repos/asf/incubator-reef/tree/ce017df2 Diff: http://git-wip-us.apache.org/repos/asf/incubator-reef/diff/ce017df2 Branch: refs/heads/master Commit: ce017df225ab618d654585d9c23b32aa3f0e265c Parents: b9b8dca Author: Dongjoon Hyun <[email protected]> Authored: Wed Sep 23 17:50:41 2015 +0900 Committer: Dongjoon Hyun <[email protected]> Committed: Mon Oct 5 04:45:50 2015 +0900 ---------------------------------------------------------------------- .../webserver/HttpServerReefEventHandler.java | 39 ++++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/ce017df2/lang/java/reef-webserver/src/main/java/org/apache/reef/webserver/HttpServerReefEventHandler.java ---------------------------------------------------------------------- diff --git a/lang/java/reef-webserver/src/main/java/org/apache/reef/webserver/HttpServerReefEventHandler.java b/lang/java/reef-webserver/src/main/java/org/apache/reef/webserver/HttpServerReefEventHandler.java index ad6f9b0..dfa3362 100644 --- a/lang/java/reef-webserver/src/main/java/org/apache/reef/webserver/HttpServerReefEventHandler.java +++ b/lang/java/reef-webserver/src/main/java/org/apache/reef/webserver/HttpServerReefEventHandler.java @@ -29,6 +29,7 @@ import org.apache.reef.util.logging.LogParser; import org.apache.reef.util.logging.LoggingScopeFactory; import org.apache.reef.util.logging.LoggingScopeImpl; import org.apache.reef.wake.EventHandler; + import javax.inject.Inject; import javax.servlet.ServletException; import javax.servlet.http.HttpServletResponse; @@ -38,6 +39,7 @@ import java.net.InetSocketAddress; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.Arrays; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -169,20 +171,22 @@ public final class HttpServerReefEventHandler implements HttpHandler { writeLines(response, result, "Current Stages..."); break; case "logfile": - final List names = parsedHttpRequest.getQueryMap().get("filename"); + final List<String> names = parsedHttpRequest.getQueryMap().get("filename"); + final PrintWriter writer = response.getWriter(); if (names == null || names.size() == 0) { - response.getWriter().println(String.format("File name is not provided")); - } - - final String fileName = (String)names.get(0); - if (!fileName.equals(driverStdoutFile) && !fileName.equals(driverStderrFile)) { - response.getWriter().println(String.format("Unsupported file names: [%s] ", fileName)); - } - try { - final byte[] outputBody = readFile((String) names.get(0)).getBytes(StandardCharsets.UTF_8); - response.getOutputStream().write(outputBody); - } catch(final IOException e) { - response.getWriter().println(String.format("Cannot find the log file: [%s].", fileName)); + writer.println("File name is not provided"); + } else { + final String fileName = names.get(0); + if (!fileName.equals(driverStdoutFile) && !fileName.equals(driverStderrFile)) { + writer.println(String.format("Unsupported file names: [%s] ", fileName)); + } else { + try { + final byte[] outputBody = readFile(fileName).getBytes(StandardCharsets.UTF_8); + writer.print(Arrays.toString(outputBody)); + } catch (final IOException e) { + writer.println(String.format("Cannot find the log file: [%s].", fileName)); + } + } } break; // TODO[JIRA REEF-798] Use this provider in the HTTP @@ -280,7 +284,7 @@ public final class HttpServerReefEventHandler implements HttpHandler { * Get all evaluator ids and send it back to response as JSON. */ private void writeEvaluatorsJsonOutput(final HttpServletResponse response) throws IOException { - LOG.log(Level.INFO, "HttpServerReefEventHandler getEvaluators is called"); + LOG.log(Level.INFO, "HttpServerReefEventHandler writeEvaluatorsJsonOutput is called"); try { final EvaluatorListSerializer serializer = Tang.Factory.getTang().newInjector().getInstance(EvaluatorListSerializer.class); @@ -302,7 +306,7 @@ public final class HttpServerReefEventHandler implements HttpHandler { */ private void writeEvaluatorsWebOutput(final HttpServletResponse response) throws IOException { - LOG.log(Level.INFO, "HttpServerReefEventHandler getEvaluators is called"); + LOG.log(Level.INFO, "HttpServerReefEventHandler writeEvaluatorsWebOutput is called"); final PrintWriter writer = response.getWriter(); @@ -329,6 +333,9 @@ public final class HttpServerReefEventHandler implements HttpHandler { * Write Driver Info as JSON string to Response. */ private void writeDriverJsonInformation(final HttpServletResponse response) throws IOException { + + LOG.log(Level.INFO, "HttpServerReefEventHandler writeDriverJsonInformation invoked."); + try { final DriverInfoSerializer serializer = Tang.Factory.getTang().newInjector().getInstance(DriverInfoSerializer.class); @@ -355,7 +362,7 @@ public final class HttpServerReefEventHandler implements HttpHandler { */ private void writeDriverWebInformation(final HttpServletResponse response) throws IOException { - LOG.log(Level.INFO, "HttpServerReefEventHandler writeDriverInformation invoked."); + LOG.log(Level.INFO, "HttpServerReefEventHandler writeDriverWebInformation invoked."); final PrintWriter writer = response.getWriter();
