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();
 

Reply via email to