set HTTP status code before writing the result
Change-Id: I46adb4aeaaa1ada6669b7535bb6d0879a26bc319
Reviewed-on: https://asterix-gerrit.ics.uci.edu/1134
Sonar-Qube: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Michael Blow <mblow@apache.org>
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/QueryServiceServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/QueryServiceServlet.java
index b4097d1..3b69dd1 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/QueryServiceServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/QueryServiceServlet.java
@@ -342,7 +342,7 @@
printField(pw, ErrorField.CODE.str(), "1");
final String msg = rootCause.getMessage();
printField(pw, ErrorField.MSG.str(),
- JSONUtil.escape(rootCause.getClass().getName() + ": " + msg != null ? msg : ""), addStack);
+ JSONUtil.escape(rootCause.getClass().getName() + ": " + (msg != null ? msg : "")), addStack);
if (addStack) {
StringWriter sw = new StringWriter();
PrintWriter stackWriter = new PrintWriter(sw);
@@ -453,10 +453,10 @@
GlobalConfig.ASTERIX_LOGGER.log(Level.SEVERE, result);
+ response.setStatus(respCode);
response.getWriter().print(result);
if (response.getWriter().checkError()) {
LOGGER.warning("Error flushing output writer");
}
- response.setStatus(respCode);
}
}
diff --git a/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/aql/TestExecutor.java b/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/aql/TestExecutor.java
index 3e16802..52237d8 100644
--- a/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/aql/TestExecutor.java
+++ b/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/aql/TestExecutor.java
@@ -250,21 +250,25 @@
}
}
+ protected HttpResponse executeAndCheckHttpRequest(HttpUriRequest method) throws Exception {
+ return checkResponse(executeHttpRequest(method));
+ }
+
protected HttpResponse executeHttpRequest(HttpUriRequest method) throws Exception {
HttpClient client = HttpClients.custom()
.setRetryHandler(StandardHttpRequestRetryHandler.INSTANCE)
.build();
- HttpResponse httpResponse;
-
try {
- httpResponse = client.execute(method);
+ return client.execute(method);
} catch (Exception e) {
GlobalConfig.ASTERIX_LOGGER.log(Level.SEVERE, e.getMessage(), e);
e.printStackTrace();
throw e;
}
- int statusCode = httpResponse.getStatusLine().getStatusCode();
- if (statusCode != HttpStatus.SC_OK) {
+ }
+
+ protected HttpResponse checkResponse(HttpResponse httpResponse) throws Exception {
+ if (httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
// QQQ For now, we are indeed assuming we get back JSON errors.
// In future this may be changed depending on the requested
// output format sent to the servlet.
@@ -294,7 +298,7 @@
HttpUriRequest method = constructHttpMethod(str, url, "query", false, params);
// Set accepted output response type
method.setHeader("Accept", fmt.mimeType());
- HttpResponse response = executeHttpRequest(method);
+ HttpResponse response = executeAndCheckHttpRequest(method);
return response.getEntity().getContent();
}
@@ -368,7 +372,7 @@
public InputStream executeClusterStateQuery(OutputFormat fmt, String url) throws Exception {
HttpUriRequest request = RequestBuilder.get(url).setHeader("Accept", fmt.mimeType()).build();
- HttpResponse response = executeHttpRequest(request);
+ HttpResponse response = executeAndCheckHttpRequest(request);
return response.getEntity().getContent();
}
@@ -381,7 +385,7 @@
.build();
// Execute the method.
- executeHttpRequest(request);
+ executeAndCheckHttpRequest(request);
}
// Executes AQL in either async or async-defer mode.
@@ -393,7 +397,7 @@
.setHeader("Accept", fmt.mimeType())
.build();
- HttpResponse response = executeHttpRequest(request);
+ HttpResponse response = executeAndCheckHttpRequest(request);
InputStream resultStream = response.getEntity().getContent();
String theHandle = IOUtils.toString(resultStream, "UTF-8");
@@ -412,7 +416,7 @@
.setHeader("Accept", fmt.mimeType())
.build();
- HttpResponse response = executeHttpRequest(request);
+ HttpResponse response = executeAndCheckHttpRequest(request);
return response.getEntity().getContent();
}
@@ -429,7 +433,7 @@
.build();
// Execute the method.
- executeHttpRequest(request);
+ executeAndCheckHttpRequest(request);
}
// Method that reads a DDL/Update/Query File