From 3f6966d1b7cd812e8d6c797ff0c8287a81f17e41 Mon Sep 17 00:00:00 2001
From: Patrick Dowler <patrick.dowler@nrc-cnrc.gc.ca>
Date: Tue, 16 Dec 2014 15:57:35 -0800
Subject: [PATCH] fixed NPE during error reporting

---
 .../cadc/ac/server/web/ACSearchRunner.java    | 32 +++++++++++++------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ACSearchRunner.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ACSearchRunner.java
index dd85e15a..1e064e62 100755
--- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ACSearchRunner.java
+++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ACSearchRunner.java
@@ -100,6 +100,8 @@ import ca.nrc.cadc.uws.server.JobRunner;
 import ca.nrc.cadc.uws.server.JobUpdater;
 import ca.nrc.cadc.uws.server.SyncOutput;
 import ca.nrc.cadc.uws.util.JobLogInfo;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
 import java.util.ArrayList;
 
 public class ACSearchRunner implements JobRunner
@@ -370,16 +372,7 @@ public class ACSearchRunner implements JobRunner
             logInfo.setMessage(t.getMessage());
             log.error("FAIL", t);
             
-            syncOut.setResponseCode(500);
-            syncOut.setHeader("Content-Type", "text/plain");
-            try
-            {
-                syncOut.getOutputStream().write(t.getMessage().getBytes());
-            }
-            catch (IOException e)
-            {
-                log.warn("Could not write response to output stream", e);
-            }
+            writeError(syncOut, 500, t);
             
 //            ErrorSummary errorSummary =
 //                new ErrorSummary(t.getMessage(), ErrorType.FATAL);
@@ -396,4 +389,23 @@ public class ACSearchRunner implements JobRunner
         }
     }
     
+    private void writeError(SyncOutput syncOutput, int code, Throwable t)
+    {
+        try
+        {
+            syncOutput.setResponseCode(code);
+            syncOut.setHeader("Content-Type", "text/plain");
+            OutputStream ostream = syncOut.getOutputStream();
+            if (ostream != null)
+            {
+                OutputStreamWriter w = new OutputStreamWriter(ostream);
+                w.write(t.toString());
+                w.flush();
+            }
+        }
+        catch (IOException e)
+        {
+            log.warn("Could not write response to output stream", e);
+        }
+    }
 }
-- 
GitLab