Repository: nifi Updated Branches: refs/heads/master 92062f9be -> ecb81ec11
NIFI-1362 Set mime.type attribute on response FlowFile based on InvokeHTTP response Content-Type Signed-off-by: Aldrin Piri <ald...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/ecb81ec1 Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/ecb81ec1 Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/ecb81ec1 Branch: refs/heads/master Commit: ecb81ec113e20f3850fd3f7080da2360035cabd8 Parents: 92062f9 Author: Jeremy Dyer <jdy...@gmail.com> Authored: Thu Jan 14 23:16:55 2016 -0500 Committer: Aldrin Piri <ald...@apache.org> Committed: Fri Jan 15 16:40:36 2016 -0500 ---------------------------------------------------------------------- .../nifi/processors/standard/InvokeHTTP.java | 8 +++- .../standard/util/TestInvokeHttpCommon.java | 41 ++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi/blob/ecb81ec1/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/InvokeHTTP.java ---------------------------------------------------------------------- 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 4e5c22d..44f76e5 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 @@ -556,7 +556,7 @@ public final class InvokeHTTP extends AbstractProcessor { throw new IllegalStateException("Status code unknown, connection hasn't been attempted."); } - // Create a map of the status attributes that are always written to the request and reponse FlowFiles + // Create a map of the status attributes that are always written to the request and response FlowFiles Map<String, String> statusAttributes = new HashMap<>(); statusAttributes.put(STATUS_CODE, String.valueOf(statusCode)); statusAttributes.put(STATUS_MESSAGE, statusMessage); @@ -602,7 +602,7 @@ public final class InvokeHTTP extends AbstractProcessor { responseFlowFile = session.create(); } - // write the status attributes + // write attributes to response flowfile responseFlowFile = session.putAllAttributes(responseFlowFile, statusAttributes); // write the response headers as attributes @@ -612,6 +612,10 @@ public final class InvokeHTTP extends AbstractProcessor { // transfer the message body to the payload // can potentially be null in edge cases if (bodyExists) { + // write content type attribute to response flowfile if it is available + if (responseBody.contentType() != null) { + responseFlowFile = session.putAttribute(responseFlowFile, CoreAttributes.MIME_TYPE.key(), responseBody.contentType().toString()); + } if (teeInputStream != null) { responseFlowFile = session.importFrom(teeInputStream, responseFlowFile); } else { http://git-wip-us.apache.org/repos/asf/nifi/blob/ecb81ec1/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/util/TestInvokeHttpCommon.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/util/TestInvokeHttpCommon.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/util/TestInvokeHttpCommon.java index cf14e08..3464f14 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/util/TestInvokeHttpCommon.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/util/TestInvokeHttpCommon.java @@ -226,6 +226,47 @@ public abstract class TestInvokeHttpCommon { } @Test + public void testOutputResponseSetMimeTypeToResponseContentType() throws Exception { + addHandler(new GetOrHeadHandler()); + + String statusUrl = "/status/200"; + runner.setProperty(InvokeHTTP.PROP_URL, url + statusUrl); + runner.setProperty(InvokeHTTP.PROP_METHOD, "GET"); + runner.setProperty(InvokeHTTP.PROP_OUTPUT_RESPONSE_REGARDLESS,"true"); + runner.setProperty(InvokeHTTP.PROP_PUT_OUTPUT_IN_ATTRIBUTE,"outputBody"); + + 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); + + // expected in request status.code and status.message + // original flow file (+attributes) + final MockFlowFile bundle = runner.getFlowFilesForRelationship(InvokeHTTP.REL_SUCCESS_REQ).get(0); + bundle.assertContentEquals("Hello".getBytes("UTF-8")); + bundle.assertAttributeEquals(InvokeHTTP.STATUS_CODE, "200"); + bundle.assertAttributeEquals(InvokeHTTP.STATUS_MESSAGE, "OK"); + bundle.assertAttributeEquals("outputBody", statusUrl); + bundle.assertAttributeEquals("Foo", "Bar"); + + // expected in response + // status code, status message, all headers from server response --> ff attributes + // server response message body into payload of ff + final MockFlowFile bundle1 = runner.getFlowFilesForRelationship(InvokeHTTP.REL_RESPONSE).get(0); + bundle1.assertContentEquals(statusUrl.getBytes("UTF-8")); + bundle1.assertAttributeEquals(InvokeHTTP.STATUS_CODE, "200"); + bundle1.assertAttributeEquals(InvokeHTTP.STATUS_MESSAGE, "OK"); + bundle1.assertAttributeEquals("Foo", "Bar"); + bundle1.assertAttributeEquals("Content-Type", "text/plain; charset=ISO-8859-1"); + bundle1.assertAttributeEquals("mime.type", "text/plain; charset=ISO-8859-1"); + } + + @Test public void testOutputResponseRegardlessWithOutputInAttributeLarge() throws Exception { addHandler(new GetLargeHandler());