You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ex...@apache.org on 2023/12/16 20:46:41 UTC
(nifi) branch support/nifi-1.x updated: NIFI-12408 Added Pretty Print Property to AttributesToJSON
This is an automated email from the ASF dual-hosted git repository.
exceptionfactory pushed a commit to branch support/nifi-1.x
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/support/nifi-1.x by this push:
new 96b0b122bb NIFI-12408 Added Pretty Print Property to AttributesToJSON
96b0b122bb is described below
commit 96b0b122bbb79c8daa910ba611cfb99478e0460c
Author: dan-s1 <ds...@gmail.com>
AuthorDate: Wed Dec 13 18:27:17 2023 +0000
NIFI-12408 Added Pretty Print Property to AttributesToJSON
This closes #8156
Signed-off-by: David Handermann <ex...@apache.org>
(cherry picked from commit 1ddb5c185a35fe42370211f4cf1c9113f74e9f00)
---
.../nifi/processors/standard/AttributesToJSON.java | 25 +++++++++++++++++-----
1 file changed, 20 insertions(+), 5 deletions(-)
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/AttributesToJSON.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/AttributesToJSON.java
index 91a5448380..b35eab51b5 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/AttributesToJSON.java
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/AttributesToJSON.java
@@ -19,6 +19,7 @@ package org.apache.nifi.processors.standard;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
import org.apache.commons.lang3.StringUtils;
import org.apache.nifi.annotation.behavior.EventDriven;
import org.apache.nifi.annotation.behavior.InputRequirement;
@@ -161,18 +162,29 @@ public class AttributesToJSON extends AbstractProcessor {
.defaultValue(AttributesToJSON.JsonHandlingStrategy.ESCAPED.getValue())
.build();
+ public static final PropertyDescriptor PRETTY_PRINT = new PropertyDescriptor.Builder()
+ .name("Pretty Print")
+ .displayName("Pretty Print")
+ .description("Apply pretty print formatting to the output.")
+ .required(true)
+ .allowableValues("true", "false")
+ .defaultValue("false")
+ .dependsOn(DESTINATION, DESTINATION_CONTENT)
+ .build();
+
public static final Relationship REL_SUCCESS = new Relationship.Builder().name("success")
.description("Successfully converted attributes to JSON").build();
public static final Relationship REL_FAILURE = new Relationship.Builder().name("failure")
.description("Failed to convert attributes to JSON").build();
+ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private List<PropertyDescriptor> properties;
private Set<Relationship> relationships;
- private static final ObjectMapper objectMapper = new ObjectMapper();
private volatile Set<String> attributesToRemove;
private volatile Set<String> attributes;
private volatile Boolean nullValueForEmptyString;
private volatile boolean destinationContent;
+ private volatile ObjectWriter objectWriter;
private volatile Pattern pattern;
private volatile JsonHandlingStrategy jsonHandlingStrategy;
@@ -185,6 +197,7 @@ public class AttributesToJSON extends AbstractProcessor {
properties.add(INCLUDE_CORE_ATTRIBUTES);
properties.add(NULL_VALUE_FOR_EMPTY_STRING);
properties.add(JSON_HANDLING_STRATEGY);
+ properties.add(PRETTY_PRINT);
this.properties = Collections.unmodifiableList(properties);
final Set<Relationship> relationships = new HashSet<>();
@@ -267,6 +280,8 @@ public class AttributesToJSON extends AbstractProcessor {
attributes = buildAtrs(context.getProperty(ATTRIBUTES_LIST).getValue());
nullValueForEmptyString = context.getProperty(NULL_VALUE_FOR_EMPTY_STRING).asBoolean();
destinationContent = DESTINATION_CONTENT.equals(context.getProperty(DESTINATION).getValue());
+ final boolean prettyPrint = context.getProperty(PRETTY_PRINT).asBoolean();
+ objectWriter = destinationContent && prettyPrint ? OBJECT_MAPPER.writerWithDefaultPrettyPrinter() : OBJECT_MAPPER.writer();
jsonHandlingStrategy = JsonHandlingStrategy.valueOf(context.getProperty(JSON_HANDLING_STRATEGY).getValue());
if(context.getProperty(ATTRIBUTES_REGEX).isSet()) {
@@ -284,17 +299,17 @@ public class AttributesToJSON extends AbstractProcessor {
final Map<String, Object> atrList = buildAttributesMapForFlowFile(original, attributes, attributesToRemove, nullValueForEmptyString, pattern);
try {
- Map<String, Object> formattedAttributes = getFormattedAttributes(atrList);
+ final Map<String, Object> formattedAttributes = getFormattedAttributes(atrList);
if (destinationContent) {
FlowFile conFlowfile = session.write(original, (in, out) -> {
try (OutputStream outputStream = new BufferedOutputStream(out)) {
- outputStream.write(objectMapper.writeValueAsBytes(formattedAttributes));
+ objectWriter.writeValue(outputStream, formattedAttributes);
}
});
conFlowfile = session.putAttribute(conFlowfile, CoreAttributes.MIME_TYPE.key(), APPLICATION_JSON);
session.transfer(conFlowfile, REL_SUCCESS);
} else {
- FlowFile atFlowfile = session.putAttribute(original, JSON_ATTRIBUTE_NAME, objectMapper.writeValueAsString(formattedAttributes));
+ FlowFile atFlowfile = session.putAttribute(original, JSON_ATTRIBUTE_NAME, OBJECT_MAPPER.writeValueAsString(formattedAttributes));
session.transfer(atFlowfile, REL_SUCCESS);
}
} catch (JsonProcessingException e) {
@@ -312,7 +327,7 @@ public class AttributesToJSON extends AbstractProcessor {
for (Map.Entry<String, Object> entry : flowFileAttributes.entrySet()) {
String value = (String) entry.getValue();
if (StringUtils.isNotBlank(value) && (isPossibleJsonArray(value) || isPossibleJsonObject(value))) {
- formattedAttributes.put(entry.getKey(), objectMapper.readTree(value));
+ formattedAttributes.put(entry.getKey(), OBJECT_MAPPER.readTree(value));
} else {
formattedAttributes.put(entry.getKey(), value);
}