You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by pv...@apache.org on 2020/03/04 09:36:21 UTC
[nifi] branch master updated: NIFI-4970 - EOF Exception in
InvokeHttp when body's response is empty with gzip
This is an automated email from the ASF dual-hosted git repository.
pvillard pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/master by this push:
new bad254e NIFI-4970 - EOF Exception in InvokeHttp when body's response is empty with gzip
bad254e is described below
commit bad254ec5b3ea6ab70a9aed673158a21ec40c378
Author: Eduardo Fontes <ed...@gmail.com>
AuthorDate: Tue Mar 3 23:38:12 2020 -0300
NIFI-4970 - EOF Exception in InvokeHttp when body's response is empty with gzip
Signed-off-by: Pierre Villard <pi...@gmail.com>
This closes #4109.
---
.../nifi/processors/standard/InvokeHTTP.java | 2 +-
.../nifi/processors/standard/TestInvokeHTTP.java | 38 ++++++++++++++++++++++
2 files changed, 39 insertions(+), 1 deletion(-)
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/InvokeHTTP.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/InvokeHTTP.java
index 78cadab..b5c853c 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/InvokeHTTP.java
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/InvokeHTTP.java
@@ -842,7 +842,7 @@ public final class InvokeHTTP extends AbstractProcessor {
boolean outputBodyToRequestAttribute = (!isSuccess(statusCode) || putToAttribute) && requestFlowFile != null;
boolean outputBodyToResponseContent = (isSuccess(statusCode) && !putToAttribute) || context.getProperty(PROP_OUTPUT_RESPONSE_REGARDLESS).asBoolean();
ResponseBody responseBody = responseHttp.body();
- boolean bodyExists = responseBody != null;
+ boolean bodyExists = responseBody != null ? responseBody.contentLength() > 0 : false;
InputStream responseBodyStream = null;
SoftLimitBoundedByteArrayOutputStream outputStreamToRequestAttribute = null;
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestInvokeHTTP.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestInvokeHTTP.java
index ca04802..1a9ee10 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestInvokeHTTP.java
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestInvokeHTTP.java
@@ -268,4 +268,42 @@ public class TestInvokeHTTP extends TestInvokeHttpCommon {
assertNull(regexAttributesToSendField.get(processor));
}
+ @Test
+ public void testEmptyGzipHttpReponse() throws Exception {
+ addHandler(new EmptyGzipResponseHandler());
+
+ runner.setProperty(InvokeHTTP.PROP_URL, url);
+
+ createFlowFiles(runner);
+
+ runner.run();
+
+ runner.assertTransferCount(InvokeHTTP.REL_SUCCESS_REQ, 1);
+ runner.assertTransferCount(InvokeHTTP.REL_RESPONSE, 1);
+ runner.assertTransferCount(InvokeHTTP.REL_RETRY, 0);
+ runner.assertTransferCount(InvokeHTTP.REL_NO_RETRY, 0);
+ runner.assertTransferCount(InvokeHTTP.REL_FAILURE, 0);
+ runner.assertPenalizeCount(0);
+
+ //expected empty content in response FlowFile
+ final MockFlowFile bundle = runner.getFlowFilesForRelationship(InvokeHTTP.REL_RESPONSE).get(0);
+ bundle.assertContentEquals(new byte[0]);
+ bundle.assertAttributeEquals(InvokeHTTP.STATUS_CODE, "200");
+ bundle.assertAttributeEquals(InvokeHTTP.STATUS_MESSAGE, "OK");
+ bundle.assertAttributeEquals("Foo", "Bar");
+ bundle.assertAttributeEquals("Content-Type", "text/plain");
+ }
+
+ public static class EmptyGzipResponseHandler extends AbstractHandler {
+
+ @Override
+ public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
+ baseRequest.setHandled(true);
+ response.setStatus(200);
+ response.setContentLength(0);
+ response.setContentType("text/plain");
+ response.setHeader("Content-Encoding", "gzip");
+ }
+
+ }
}