This is an automated email from the ASF dual-hosted git repository.
exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new 185364704e NIFI-15191 Standardized property names in WebSocket,
Workday, Event Log, and Zendesk (#10516)
185364704e is described below
commit 185364704edb04294ccec7ba268083a6e762c537
Author: dan-s1 <[email protected]>
AuthorDate: Wed Nov 12 16:56:47 2025 -0500
NIFI-15191 Standardized property names in WebSocket, Workday, Event Log,
and Zendesk (#10516)
Signed-off-by: David Handermann <[email protected]>
---
.../processors/attributes/UpdateAttribute.java | 9 ++++--
.../processors/websocket/ConnectWebSocket.java | 13 +++++---
.../nifi/processors/websocket/ListenWebSocket.java | 13 +++++---
.../nifi/processors/websocket/PutWebSocket.java | 25 +++++++++------
.../processors/websocket/TestListenWebSocket.java | 11 +++----
.../nifi/websocket/jetty/JettyWebSocketServer.java | 3 +-
.../windows/event/log/ConsumeWindowsEventLog.java | 25 +++++++++------
.../nifi/processors/workday/GetWorkdayReport.java | 13 +++++---
.../nifi/common/zendesk/ZendeskProperties.java | 37 +++++++++++-----------
.../apache/nifi/processors/zendesk/GetZendesk.java | 29 ++++++++++++-----
.../nifi/processors/zendesk/PutZendeskTicket.java | 28 ++++++++++++++--
.../nifi/services/zendesk/ZendeskRecordSink.java | 31 +++++++++++++++---
12 files changed, 161 insertions(+), 76 deletions(-)
diff --git
a/nifi-extension-bundles/nifi-update-attribute-bundle/nifi-update-attribute-processor/src/main/java/org/apache/nifi/processors/attributes/UpdateAttribute.java
b/nifi-extension-bundles/nifi-update-attribute-bundle/nifi-update-attribute-processor/src/main/java/org/apache/nifi/processors/attributes/UpdateAttribute.java
index f3a583a46d..378a720528 100644
---
a/nifi-extension-bundles/nifi-update-attribute-bundle/nifi-update-attribute-processor/src/main/java/org/apache/nifi/processors/attributes/UpdateAttribute.java
+++
b/nifi-extension-bundles/nifi-update-attribute-bundle/nifi-update-attribute-processor/src/main/java/org/apache/nifi/processors/attributes/UpdateAttribute.java
@@ -45,6 +45,7 @@ import org.apache.nifi.expression.ExpressionLanguageScope;
import org.apache.nifi.flowfile.FlowFile;
import org.apache.nifi.flowfile.attributes.CoreAttributes;
import org.apache.nifi.logging.ComponentLog;
+import org.apache.nifi.migration.PropertyConfiguration;
import org.apache.nifi.processor.AbstractProcessor;
import org.apache.nifi.processor.ProcessContext;
import org.apache.nifi.processor.ProcessSession;
@@ -221,8 +222,7 @@ public class UpdateAttribute extends AbstractProcessor
implements Searchable {
.build();
public static final PropertyDescriptor CANONICAL_VALUE_LOOKUP_CACHE_SIZE =
new PropertyDescriptor.Builder()
- .name("canonical-value-lookup-cache-size")
- .displayName("Cache Value Lookup Cache Size")
+ .name("Cache Value Lookup Cache Size")
.description("Specifies how many canonical lookup values should be
stored in the cache")
.addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR)
.defaultValue("100")
@@ -574,6 +574,11 @@ public class UpdateAttribute extends AbstractProcessor
implements Searchable {
session.transfer(flowFilesToTransfer, REL_SUCCESS);
}
+ @Override
+ public void migrateProperties(PropertyConfiguration config) {
+ config.renameProperty("canonical-value-lookup-cache-size",
CANONICAL_VALUE_LOOKUP_CACHE_SIZE.getName());
+ }
+
//Evaluates the specified Criteria on the specified flowfile. Clones the
// specified flow file for each rule that is applied.
private boolean evaluateCriteria(final ProcessSession session, final
ProcessContext context, final Criteria criteria, final FlowFile flowfile, final
Map<FlowFile,
diff --git
a/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/main/java/org/apache/nifi/processors/websocket/ConnectWebSocket.java
b/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/main/java/org/apache/nifi/processors/websocket/ConnectWebSocket.java
index c424e467b5..bbd35e49c1 100644
---
a/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/main/java/org/apache/nifi/processors/websocket/ConnectWebSocket.java
+++
b/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/main/java/org/apache/nifi/processors/websocket/ConnectWebSocket.java
@@ -24,6 +24,7 @@ import org.apache.nifi.annotation.behavior.WritesAttributes;
import org.apache.nifi.annotation.documentation.CapabilityDescription;
import org.apache.nifi.annotation.documentation.Tags;
import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.migration.PropertyConfiguration;
import org.apache.nifi.processor.ProcessContext;
import org.apache.nifi.processor.Relationship;
import org.apache.nifi.processor.util.StandardValidators;
@@ -62,16 +63,14 @@ import static
org.apache.nifi.processors.websocket.WebSocketProcessorAttributes.
public class ConnectWebSocket extends AbstractWebSocketGatewayProcessor {
public static final PropertyDescriptor PROP_WEBSOCKET_CLIENT_SERVICE = new
PropertyDescriptor.Builder()
- .name("websocket-client-controller-service")
- .displayName("WebSocket Client ControllerService")
+ .name("WebSocket Client Controller Service")
.description("A WebSocket CLIENT Controller Service which can
connect to a WebSocket server.")
.required(true)
.identifiesControllerService(WebSocketClientService.class)
.build();
public static final PropertyDescriptor PROP_WEBSOCKET_CLIENT_ID = new
PropertyDescriptor.Builder()
- .name("websocket-client-id")
- .displayName("WebSocket Client Id")
+ .name("WebSocket Client Id")
.description("The client ID to identify WebSocket session." +
" It should be unique within the WebSocket Client
Controller Service." +
" Otherwise, it throws WebSocketConfigurationException
when it gets started.")
@@ -99,6 +98,12 @@ public class ConnectWebSocket extends
AbstractWebSocketGatewayProcessor {
return PROPERTY_DESCRIPTORS;
}
+ @Override
+ public void migrateProperties(PropertyConfiguration config) {
+ config.renameProperty("websocket-client-controller-service",
PROP_WEBSOCKET_CLIENT_SERVICE.getName());
+ config.renameProperty("websocket-client-id",
PROP_WEBSOCKET_CLIENT_ID.getName());
+ }
+
@Override
protected WebSocketService getWebSocketService(final ProcessContext
context) {
return context.getProperty(PROP_WEBSOCKET_CLIENT_SERVICE)
diff --git
a/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/main/java/org/apache/nifi/processors/websocket/ListenWebSocket.java
b/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/main/java/org/apache/nifi/processors/websocket/ListenWebSocket.java
index fd1a840262..49b2d41c8b 100644
---
a/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/main/java/org/apache/nifi/processors/websocket/ListenWebSocket.java
+++
b/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/main/java/org/apache/nifi/processors/websocket/ListenWebSocket.java
@@ -25,6 +25,7 @@ import
org.apache.nifi.annotation.documentation.CapabilityDescription;
import org.apache.nifi.annotation.documentation.Tags;
import org.apache.nifi.components.PropertyDescriptor;
import org.apache.nifi.components.ValidationResult;
+import org.apache.nifi.migration.PropertyConfiguration;
import org.apache.nifi.processor.ProcessContext;
import org.apache.nifi.processor.Relationship;
import org.apache.nifi.processor.util.StandardValidators;
@@ -60,16 +61,14 @@ import static
org.apache.nifi.processors.websocket.WebSocketProcessorAttributes.
public class ListenWebSocket extends AbstractWebSocketGatewayProcessor {
public static final PropertyDescriptor PROP_WEBSOCKET_SERVER_SERVICE = new
PropertyDescriptor.Builder()
- .name("websocket-server-controller-service")
- .displayName("WebSocket Server ControllerService")
+ .name("WebSocket Server Controller Service")
.description("A WebSocket SERVER Controller Service which can
accept WebSocket requests.")
.required(true)
.identifiesControllerService(WebSocketServerService.class)
.build();
public static final PropertyDescriptor PROP_SERVER_URL_PATH = new
PropertyDescriptor.Builder()
- .name("server-url-path")
- .displayName("Server URL Path")
+ .name("Server URL Path")
.description("The WetSocket URL Path on which this processor
listens to. Must starts with '/', e.g. '/example'.")
.required(true)
.addValidator(StandardValidators.NON_BLANK_VALIDATOR)
@@ -100,6 +99,12 @@ public class ListenWebSocket extends
AbstractWebSocketGatewayProcessor {
return PROPERTY_DESCRIPTORS;
}
+ @Override
+ public void migrateProperties(PropertyConfiguration config) {
+ config.renameProperty("websocket-server-controller-service",
PROP_WEBSOCKET_SERVER_SERVICE.getName());
+ config.renameProperty("server-url-path",
PROP_SERVER_URL_PATH.getName());
+ }
+
@Override
protected WebSocketService getWebSocketService(final ProcessContext
context) {
return
context.getProperty(PROP_WEBSOCKET_SERVER_SERVICE).asControllerService(WebSocketService.class);
diff --git
a/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/main/java/org/apache/nifi/processors/websocket/PutWebSocket.java
b/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/main/java/org/apache/nifi/processors/websocket/PutWebSocket.java
index b403050eff..377f4478ee 100644
---
a/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/main/java/org/apache/nifi/processors/websocket/PutWebSocket.java
+++
b/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/main/java/org/apache/nifi/processors/websocket/PutWebSocket.java
@@ -34,6 +34,7 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
+import org.apache.nifi.migration.PropertyConfiguration;
import org.apache.nifi.util.StringUtils;
import org.apache.nifi.annotation.behavior.SystemResourceConsideration;
import org.apache.nifi.annotation.behavior.InputRequirement;
@@ -76,8 +77,7 @@ import org.apache.nifi.websocket.WebSocketService;
public class PutWebSocket extends AbstractProcessor {
public static final PropertyDescriptor PROP_WS_SESSION_ID = new
PropertyDescriptor.Builder()
- .name("websocket-session-id")
- .displayName("WebSocket Session Id")
+ .name("WebSocket Session Id")
.description("A NiFi Expression to retrieve the session id. If not
specified, a message will be " +
"sent to all connected WebSocket peers for the WebSocket
controller service endpoint.")
.required(true)
@@ -87,9 +87,8 @@ public class PutWebSocket extends AbstractProcessor {
.build();
public static final PropertyDescriptor PROP_WS_CONTROLLER_SERVICE_ID = new
PropertyDescriptor.Builder()
- .name("websocket-controller-service-id")
- .displayName("WebSocket ControllerService Id")
- .description("A NiFi Expression to retrieve the id of a WebSocket
ControllerService.")
+ .name("WebSocket Controller Service Id")
+ .description("A NiFi Expression to retrieve the id of a WebSocket
Controller Service.")
.required(true)
.addValidator(StandardValidators.NON_BLANK_VALIDATOR)
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
@@ -97,9 +96,8 @@ public class PutWebSocket extends AbstractProcessor {
.build();
public static final PropertyDescriptor PROP_WS_CONTROLLER_SERVICE_ENDPOINT
= new PropertyDescriptor.Builder()
- .name("websocket-endpoint-id")
- .displayName("WebSocket Endpoint Id")
- .description("A NiFi Expression to retrieve the endpoint id of a
WebSocket ControllerService.")
+ .name("WebSocket Endpoint Id")
+ .description("A NiFi Expression to retrieve the endpoint id of a
WebSocket Controller Service.")
.required(true)
.addValidator(StandardValidators.NON_BLANK_VALIDATOR)
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
@@ -107,8 +105,7 @@ public class PutWebSocket extends AbstractProcessor {
.build();
public static final PropertyDescriptor PROP_WS_MESSAGE_TYPE = new
PropertyDescriptor.Builder()
- .name("websocket-message-type")
- .displayName("WebSocket Message Type")
+ .name("WebSocket Message Type")
.description("The type of message content: TEXT or BINARY")
.required(true)
.addValidator(StandardValidators.NON_BLANK_VALIDATOR)
@@ -234,6 +231,14 @@ public class PutWebSocket extends AbstractProcessor {
}
+ @Override
+ public void migrateProperties(PropertyConfiguration config) {
+ config.renameProperty("websocket-session-id",
PROP_WS_SESSION_ID.getName());
+ config.renameProperty("websocket-controller-service-id",
PROP_WS_CONTROLLER_SERVICE_ID.getName());
+ config.renameProperty("websocket-endpoint-id",
PROP_WS_CONTROLLER_SERVICE_ENDPOINT.getName());
+ config.renameProperty("websocket-message-type",
PROP_WS_MESSAGE_TYPE.getName());
+ }
+
private void transferToFailure(final ProcessSession processSession,
FlowFile flowfile, final String value) {
flowfile = processSession.putAttribute(flowfile,
ATTR_WS_FAILURE_DETAIL, value);
processSession.transfer(flowfile, REL_FAILURE);
diff --git
a/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/test/java/org/apache/nifi/processors/websocket/TestListenWebSocket.java
b/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/test/java/org/apache/nifi/processors/websocket/TestListenWebSocket.java
index 798e95643a..7297fbf0df 100644
---
a/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/test/java/org/apache/nifi/processors/websocket/TestListenWebSocket.java
+++
b/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/test/java/org/apache/nifi/processors/websocket/TestListenWebSocket.java
@@ -50,8 +50,8 @@ import static
org.apache.nifi.processors.websocket.WebSocketProcessorAttributes.
import static
org.apache.nifi.processors.websocket.WebSocketProcessorAttributes.ATTR_WS_REMOTE_ADDRESS;
import static
org.apache.nifi.processors.websocket.WebSocketProcessorAttributes.ATTR_WS_SESSION_ID;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
@@ -102,12 +102,9 @@ public class TestListenWebSocket {
runner.setProperty(ListenWebSocket.PROP_WEBSOCKET_SERVER_SERVICE,
serviceId);
runner.setProperty(ListenWebSocket.PROP_SERVER_URL_PATH, endpointId);
- try {
- runner.run();
- fail("Should fail with validation error.");
- } catch (AssertionError e) {
- assertTrue(e.toString().contains("'server-url-path' is invalid
because Must starts with"));
- }
+ final AssertionError assertionError =
assertThrows(AssertionError.class, runner::run);
+ final String expected = "'%s' is invalid because Must starts
with".formatted(ListenWebSocket.PROP_SERVER_URL_PATH.getName());
+ assertTrue(assertionError.toString().contains(expected));
}
@Test
diff --git
a/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-services-jetty/src/main/java/org/apache/nifi/websocket/jetty/JettyWebSocketServer.java
b/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-services-jetty/src/main/java/org/apache/nifi/websocket/jetty/JettyWebSocketServer.java
index fdb872915e..37deb027e2 100644
---
a/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-services-jetty/src/main/java/org/apache/nifi/websocket/jetty/JettyWebSocketServer.java
+++
b/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-services-jetty/src/main/java/org/apache/nifi/websocket/jetty/JettyWebSocketServer.java
@@ -155,8 +155,7 @@ public class JettyWebSocketServer extends
AbstractJettyWebSocketService implemen
public static final PropertyDescriptor USERS_PROPERTIES_FILE = new
PropertyDescriptor.Builder()
- .name("users-properties-file")
- .displayName("Users Properties File")
+ .name("Users Properties File")
.description("Specify a property file containing users for Basic
Authentication using HashLoginService. "
+ "See
http://www.eclipse.org/jetty/documentation/current/configuring-security.html
for detail.")
.required(false)
diff --git
a/nifi-extension-bundles/nifi-windows-event-log-bundle/nifi-windows-event-log-processors/src/main/java/org/apache/nifi/processors/windows/event/log/ConsumeWindowsEventLog.java
b/nifi-extension-bundles/nifi-windows-event-log-bundle/nifi-windows-event-log-processors/src/main/java/org/apache/nifi/processors/windows/event/log/ConsumeWindowsEventLog.java
index 589ba208b4..e628f74315 100644
---
a/nifi-extension-bundles/nifi-windows-event-log-bundle/nifi-windows-event-log-processors/src/main/java/org/apache/nifi/processors/windows/event/log/ConsumeWindowsEventLog.java
+++
b/nifi-extension-bundles/nifi-windows-event-log-bundle/nifi-windows-event-log-processors/src/main/java/org/apache/nifi/processors/windows/event/log/ConsumeWindowsEventLog.java
@@ -34,6 +34,7 @@ import org.apache.nifi.components.ValidationResult;
import org.apache.nifi.expression.ExpressionLanguageScope;
import org.apache.nifi.flowfile.FlowFile;
import org.apache.nifi.flowfile.attributes.CoreAttributes;
+import org.apache.nifi.migration.PropertyConfiguration;
import org.apache.nifi.processor.AbstractSessionFactoryProcessor;
import org.apache.nifi.processor.ProcessContext;
import org.apache.nifi.processor.ProcessSession;
@@ -71,8 +72,7 @@ public class ConsumeWindowsEventLog extends
AbstractSessionFactoryProcessor {
public static final int DEFAULT_MAX_QUEUE_SIZE = 1024;
public static final PropertyDescriptor CHANNEL = new
PropertyDescriptor.Builder()
- .name("channel")
- .displayName("Channel")
+ .name("Channel")
.required(true)
.defaultValue(DEFAULT_CHANNEL)
.description("The Windows Event Log Channel to listen to.")
@@ -81,8 +81,7 @@ public class ConsumeWindowsEventLog extends
AbstractSessionFactoryProcessor {
.build();
public static final PropertyDescriptor QUERY = new
PropertyDescriptor.Builder()
- .name("query")
- .displayName("XPath Query")
+ .name("XPath Query")
.required(true)
.defaultValue(DEFAULT_XPATH)
.description("XPath Query to filter events. (See
https://msdn.microsoft.com/en-us/library/windows/desktop/dd996910(v=vs.85).aspx
for examples.)")
@@ -91,8 +90,7 @@ public class ConsumeWindowsEventLog extends
AbstractSessionFactoryProcessor {
.build();
public static final PropertyDescriptor MAX_BUFFER_SIZE = new
PropertyDescriptor.Builder()
- .name("maxBuffer")
- .displayName("Maximum Buffer Size")
+ .name("Maximum Buffer Size")
.required(true)
.defaultValue(Integer.toString(DEFAULT_MAX_BUFFER))
.description("The individual Event Log XMLs are rendered to a
buffer." +
@@ -101,8 +99,7 @@ public class ConsumeWindowsEventLog extends
AbstractSessionFactoryProcessor {
.build();
public static final PropertyDescriptor MAX_EVENT_QUEUE_SIZE = new
PropertyDescriptor.Builder()
- .name("maxQueue")
- .displayName("Maximum queue size")
+ .name("Maximum Queue Size")
.required(true)
.defaultValue(Integer.toString(DEFAULT_MAX_QUEUE_SIZE))
.description("Events are received asynchronously and must be
output as FlowFiles when the processor is triggered." +
@@ -111,8 +108,7 @@ public class ConsumeWindowsEventLog extends
AbstractSessionFactoryProcessor {
.build();
public static final PropertyDescriptor INACTIVE_DURATION_TO_RECONNECT =
new PropertyDescriptor.Builder()
- .name("inactiveDurationToReconnect")
- .displayName("Inactive duration to reconnect")
+ .name("Inactive Duration to Reconnect")
.description("If no new event logs are processed for the specified
time period," +
" this processor will try reconnecting to recover from a
state where any further messages cannot be consumed." +
" Such situation can happen if Windows Event Log service
is restarted, or ERROR_EVT_QUERY_RESULT_STALE (15011) is returned." +
@@ -185,6 +181,15 @@ public class ConsumeWindowsEventLog extends
AbstractSessionFactoryProcessor {
}
}
+ @Override
+ public void migrateProperties(PropertyConfiguration config) {
+ config.renameProperty("channel", CHANNEL.getName());
+ config.renameProperty("query", QUERY.getName());
+ config.renameProperty("maxBuffer", MAX_BUFFER_SIZE.getName());
+ config.renameProperty("maxQueue", MAX_EVENT_QUEUE_SIZE.getName());
+ config.renameProperty("inactiveDurationToReconnect",
INACTIVE_DURATION_TO_RECONNECT.getName());
+ }
+
private WEvtApi loadWEvtApi() {
try {
return WEvtApi.INSTANCE;
diff --git
a/nifi-extension-bundles/nifi-workday-bundle/nifi-workday-processors/src/main/java/org/apache/nifi/processors/workday/GetWorkdayReport.java
b/nifi-extension-bundles/nifi-workday-bundle/nifi-workday-processors/src/main/java/org/apache/nifi/processors/workday/GetWorkdayReport.java
index c328ed3120..179f336f4b 100644
---
a/nifi-extension-bundles/nifi-workday-bundle/nifi-workday-processors/src/main/java/org/apache/nifi/processors/workday/GetWorkdayReport.java
+++
b/nifi-extension-bundles/nifi-workday-bundle/nifi-workday-processors/src/main/java/org/apache/nifi/processors/workday/GetWorkdayReport.java
@@ -30,6 +30,7 @@ import org.apache.nifi.components.AllowableValue;
import org.apache.nifi.components.PropertyDescriptor;
import org.apache.nifi.flowfile.FlowFile;
import org.apache.nifi.flowfile.attributes.CoreAttributes;
+import org.apache.nifi.migration.PropertyConfiguration;
import org.apache.nifi.oauth2.OAuth2AccessTokenProvider;
import org.apache.nifi.processor.AbstractProcessor;
import org.apache.nifi.processor.ProcessContext;
@@ -161,16 +162,14 @@ public class GetWorkdayReport extends AbstractProcessor {
.build();
protected static final PropertyDescriptor RECORD_READER_FACTORY = new
PropertyDescriptor.Builder()
- .name("record-reader")
- .displayName("Record Reader")
+ .name("Record Reader")
.description("Specifies the Controller Service to use for parsing
incoming data and determining the data's schema.")
.identifiesControllerService(RecordReaderFactory.class)
.required(false)
.build();
protected static final PropertyDescriptor RECORD_WRITER_FACTORY = new
PropertyDescriptor.Builder()
- .name("record-writer")
- .displayName("Record Writer")
+ .name("Record Writer")
.description("The Record Writer to use for serializing Records to an
output FlowFile.")
.identifiesControllerService(RecordSetWriterFactory.class)
.dependsOn(RECORD_READER_FACTORY)
@@ -296,6 +295,12 @@ public class GetWorkdayReport extends AbstractProcessor {
}
}
+ @Override
+ public void migrateProperties(PropertyConfiguration config) {
+ config.renameProperty("record-reader",
RECORD_READER_FACTORY.getName());
+ config.renameProperty("record-writer",
RECORD_WRITER_FACTORY.getName());
+ }
+
/*
* If we have no FlowFile, and all incoming connections are self-loops
then we can continue on.
* However, if we have no FlowFile and we have connections coming from
other Processors, then
diff --git
a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-common/src/main/java/org/apache/nifi/common/zendesk/ZendeskProperties.java
b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-common/src/main/java/org/apache/nifi/common/zendesk/ZendeskProperties.java
index 5c84c5b7ca..719c52a9b3 100644
---
a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-common/src/main/java/org/apache/nifi/common/zendesk/ZendeskProperties.java
+++
b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-common/src/main/java/org/apache/nifi/common/zendesk/ZendeskProperties.java
@@ -35,17 +35,25 @@ public final class ZendeskProperties {
private ZendeskProperties() { }
+ public static final String OBSOLETE_WEB_CLIENT_SERVICE_PROVIDER =
"web-client-service-provider";
+ public static final String OBSOLETE_ZENDESK_SUBDOMAIN =
"zendesk-subdomain";
+ public static final String OBSOLETE_ZENDESK_USER = "zendesk-user";
+ public static final String OBSOLETE_ZENDESK_AUTHENTICATION_TYPE =
"zendesk-authentication-type-name";
+ public static final String OBSOLETE_ZENDESK_AUTHENTICATION_CREDENTIAL =
"zendesk-authentication-value-name";
+ public static final String OBSOLETE_ZENDESK_TICKET_COMMENT_BODY =
"zendesk-comment-body";
+ public static final String OBSOLETE_ZENDESK_TICKET_SUBJECT =
"zendesk-subject";
+ public static final String OBSOLETE_ZENDESK_TICKET_PRIORITY =
"zendesk-priority";
+ public static final String OBSOLETE_ZENDESK_TICKET_TYPE = "zendesk-type";
+
public static final PropertyDescriptor WEB_CLIENT_SERVICE_PROVIDER = new
PropertyDescriptor.Builder()
- .name("web-client-service-provider")
- .displayName("Web Client Service Provider")
+ .name("Web Client Service Provider")
.description("Controller service for HTTP client operations.")
.identifiesControllerService(WebClientServiceProvider.class)
.required(true)
.build();
public static final PropertyDescriptor ZENDESK_SUBDOMAIN = new
PropertyDescriptor.Builder()
- .name("zendesk-subdomain")
- .displayName("Subdomain Name")
+ .name("Subdomain Name")
.description("Name of the Zendesk subdomain.")
.expressionLanguageSupported(FLOWFILE_ATTRIBUTES)
.required(true)
@@ -53,8 +61,7 @@ public final class ZendeskProperties {
.build();
public static final PropertyDescriptor ZENDESK_USER = new
PropertyDescriptor.Builder()
- .name("zendesk-user")
- .displayName("User Name")
+ .name("User Name")
.description("Login user to Zendesk subdomain.")
.expressionLanguageSupported(FLOWFILE_ATTRIBUTES)
.required(true)
@@ -62,16 +69,14 @@ public final class ZendeskProperties {
.build();
public static final PropertyDescriptor ZENDESK_AUTHENTICATION_TYPE = new
PropertyDescriptor.Builder()
- .name("zendesk-authentication-type-name")
- .displayName("Authentication Type")
+ .name("Authentication Type")
.description("Type of authentication to Zendesk API.")
.required(true)
.allowableValues(ZendeskAuthenticationType.class)
.build();
public static final PropertyDescriptor ZENDESK_AUTHENTICATION_CREDENTIAL =
new PropertyDescriptor.Builder()
- .name("zendesk-authentication-value-name")
- .displayName("Authentication Credential")
+ .name("Authentication Credential")
.description("Password or authentication token for Zendesk login
user.")
.expressionLanguageSupported(FLOWFILE_ATTRIBUTES)
.sensitive(true)
@@ -80,8 +85,7 @@ public final class ZendeskProperties {
.build();
public static final PropertyDescriptor ZENDESK_TICKET_COMMENT_BODY = new
PropertyDescriptor.Builder()
- .name("zendesk-comment-body")
- .displayName("Comment Body")
+ .name("Comment Body")
.description("The content or the path to the comment body in the
incoming record.")
.addValidator(StandardValidators.NON_BLANK_VALIDATOR)
.expressionLanguageSupported(FLOWFILE_ATTRIBUTES)
@@ -89,24 +93,21 @@ public final class ZendeskProperties {
.build();
public static final PropertyDescriptor ZENDESK_TICKET_SUBJECT = new
PropertyDescriptor.Builder()
- .name("zendesk-subject")
- .displayName("Subject")
+ .name("Subject")
.description("The content or the path to the subject in the
incoming record.")
.addValidator(StandardValidators.NON_BLANK_VALIDATOR)
.expressionLanguageSupported(FLOWFILE_ATTRIBUTES)
.build();
public static final PropertyDescriptor ZENDESK_TICKET_PRIORITY = new
PropertyDescriptor.Builder()
- .name("zendesk-priority")
- .displayName("Priority")
+ .name("Priority")
.description("The content or the path to the priority in the
incoming record.")
.addValidator(StandardValidators.NON_BLANK_VALIDATOR)
.expressionLanguageSupported(FLOWFILE_ATTRIBUTES)
.build();
public static final PropertyDescriptor ZENDESK_TICKET_TYPE = new
PropertyDescriptor.Builder()
- .name("zendesk-type")
- .displayName("Type")
+ .name("Type")
.description("The content or the path to the type in the incoming
record.")
.addValidator(StandardValidators.NON_BLANK_VALIDATOR)
.expressionLanguageSupported(FLOWFILE_ATTRIBUTES)
diff --git
a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/src/main/java/org/apache/nifi/processors/zendesk/GetZendesk.java
b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/src/main/java/org/apache/nifi/processors/zendesk/GetZendesk.java
index 8db539f434..9c42b1e551 100644
---
a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/src/main/java/org/apache/nifi/processors/zendesk/GetZendesk.java
+++
b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/src/main/java/org/apache/nifi/processors/zendesk/GetZendesk.java
@@ -37,6 +37,7 @@ import org.apache.nifi.components.PropertyDescriptor;
import org.apache.nifi.components.ValidationContext;
import org.apache.nifi.components.ValidationResult;
import org.apache.nifi.flowfile.FlowFile;
+import org.apache.nifi.migration.PropertyConfiguration;
import org.apache.nifi.processor.ProcessContext;
import org.apache.nifi.processor.ProcessSession;
import org.apache.nifi.processor.Relationship;
@@ -59,6 +60,11 @@ import static
com.fasterxml.jackson.core.JsonToken.FIELD_NAME;
import static com.fasterxml.jackson.core.JsonToken.VALUE_NULL;
import static java.util.Collections.singletonMap;
import static
org.apache.nifi.annotation.behavior.InputRequirement.Requirement.INPUT_FORBIDDEN;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_WEB_CLIENT_SERVICE_PROVIDER;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_AUTHENTICATION_CREDENTIAL;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_AUTHENTICATION_TYPE;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_SUBDOMAIN;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_USER;
import static
org.apache.nifi.common.zendesk.ZendeskProperties.WEB_CLIENT_SERVICE_PROVIDER;
import static
org.apache.nifi.common.zendesk.ZendeskProperties.ZENDESK_AUTHENTICATION_CREDENTIAL;
import static
org.apache.nifi.common.zendesk.ZendeskProperties.ZENDESK_AUTHENTICATION_TYPE;
@@ -86,30 +92,25 @@ public class GetZendesk extends AbstractZendesk {
static final int HTTP_TOO_MANY_REQUESTS = 429;
static final String ZENDESK_EXPORT_METHOD_NAME = "zendesk-export-method";
- static final String ZENDESK_RESOURCE_NAME = "zendesk-resource";
- static final String ZENDESK_QUERY_START_TIMESTAMP_NAME =
"zendesk-query-start-timestamp";
private static final Set<Relationship> RELATIONSHIPS = Set.of(REL_SUCCESS);
public static final PropertyDescriptor ZENDESK_EXPORT_METHOD = new
PropertyDescriptor.Builder()
- .name(ZENDESK_EXPORT_METHOD_NAME)
- .displayName("Export Method")
+ .name("Export Method")
.description("Method for incremental export.")
.required(true)
.allowableValues(ZendeskExportMethod.class)
.build();
public static final PropertyDescriptor ZENDESK_RESOURCE = new
PropertyDescriptor.Builder()
- .name(ZENDESK_RESOURCE_NAME)
- .displayName("Resource")
+ .name("Resource")
.description("The particular Zendesk resource which is meant to be
exported.")
.required(true)
.allowableValues(ZendeskResource.class)
.build();
public static final PropertyDescriptor ZENDESK_QUERY_START_TIMESTAMP = new
PropertyDescriptor.Builder()
- .name(ZENDESK_QUERY_START_TIMESTAMP_NAME)
- .displayName("Query Start Timestamp")
+ .name("Query Start Timestamp")
.description("Initial timestamp to query Zendesk API from in Unix
timestamp seconds format.")
.addValidator(POSITIVE_LONG_VALIDATOR)
.expressionLanguageSupported(FLOWFILE_ATTRIBUTES)
@@ -187,6 +188,18 @@ public class GetZendesk extends AbstractZendesk {
}
}
+ @Override
+ public void migrateProperties(PropertyConfiguration config) {
+ config.renameProperty(OBSOLETE_WEB_CLIENT_SERVICE_PROVIDER,
WEB_CLIENT_SERVICE_PROVIDER.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_SUBDOMAIN,
ZENDESK_SUBDOMAIN.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_USER, ZENDESK_USER.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_AUTHENTICATION_TYPE,
ZENDESK_AUTHENTICATION_TYPE.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_AUTHENTICATION_CREDENTIAL,
ZENDESK_AUTHENTICATION_CREDENTIAL.getName());
+ config.renameProperty(ZENDESK_EXPORT_METHOD_NAME,
ZENDESK_EXPORT_METHOD.getName());
+ config.renameProperty("zendesk-resource", ZENDESK_RESOURCE.getName());
+ config.renameProperty("zendesk-query-start-timestamp",
ZENDESK_QUERY_START_TIMESTAMP.getName());
+ }
+
private URI createUri(ProcessContext context, ZendeskResource
zendeskResource, ZendeskExportMethod exportMethod) {
String resourcePath = zendeskResource.apiPath(exportMethod);
HttpUriBuilder uriBuilder = uriBuilder(resourcePath);
diff --git
a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/src/main/java/org/apache/nifi/processors/zendesk/PutZendeskTicket.java
b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/src/main/java/org/apache/nifi/processors/zendesk/PutZendeskTicket.java
index 40caee3efd..210b933cfa 100644
---
a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/src/main/java/org/apache/nifi/processors/zendesk/PutZendeskTicket.java
+++
b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-processors/src/main/java/org/apache/nifi/processors/zendesk/PutZendeskTicket.java
@@ -27,6 +27,7 @@ import
org.apache.nifi.common.zendesk.validation.JsonPointerPropertyNameValidato
import org.apache.nifi.components.PropertyDescriptor;
import org.apache.nifi.expression.ExpressionLanguageScope;
import org.apache.nifi.flowfile.FlowFile;
+import org.apache.nifi.migration.PropertyConfiguration;
import org.apache.nifi.processor.ProcessContext;
import org.apache.nifi.processor.ProcessSession;
import org.apache.nifi.processor.Relationship;
@@ -48,6 +49,15 @@ import java.util.Set;
import java.util.concurrent.TimeUnit;
import static
org.apache.nifi.common.zendesk.ZendeskProperties.APPLICATION_JSON;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_WEB_CLIENT_SERVICE_PROVIDER;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_AUTHENTICATION_CREDENTIAL;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_AUTHENTICATION_TYPE;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_SUBDOMAIN;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_TICKET_COMMENT_BODY;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_TICKET_PRIORITY;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_TICKET_SUBJECT;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_TICKET_TYPE;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_USER;
import static
org.apache.nifi.common.zendesk.ZendeskProperties.WEB_CLIENT_SERVICE_PROVIDER;
import static
org.apache.nifi.common.zendesk.ZendeskProperties.ZENDESK_AUTHENTICATION_CREDENTIAL;
import static
org.apache.nifi.common.zendesk.ZendeskProperties.ZENDESK_AUTHENTICATION_TYPE;
@@ -84,15 +94,13 @@ import static
org.apache.nifi.web.client.api.HttpResponseStatus.OK;
@WritesAttribute(attribute = ERROR_MESSAGE_ATTRIBUTE_NAME, description
= "The error message of from the response.")})
public class PutZendeskTicket extends AbstractZendesk {
- static final String ZENDESK_RECORD_READER_NAME = "zendesk-record-reader";
static final String ERROR_CODE_ATTRIBUTE_NAME = "error.code";
static final String ERROR_MESSAGE_ATTRIBUTE_NAME = "error.message";
private static final ObjectMapper mapper = new ObjectMapper();
static final PropertyDescriptor RECORD_READER = new
PropertyDescriptor.Builder()
- .name(ZENDESK_RECORD_READER_NAME)
- .displayName("Record Reader")
+ .name("Record Reader")
.description("Specifies the Controller Service to use for parsing
incoming data and determining the data's schema.")
.identifiesControllerService(RecordReaderFactory.class)
.build();
@@ -242,6 +250,20 @@ public class PutZendeskTicket extends AbstractZendesk {
handleResponse(session, flowFile, response, uri, startNanos);
}
+ @Override
+ public void migrateProperties(PropertyConfiguration config) {
+ config.renameProperty(OBSOLETE_WEB_CLIENT_SERVICE_PROVIDER,
WEB_CLIENT_SERVICE_PROVIDER.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_SUBDOMAIN,
ZENDESK_SUBDOMAIN.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_USER, ZENDESK_USER.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_AUTHENTICATION_TYPE,
ZENDESK_AUTHENTICATION_TYPE.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_AUTHENTICATION_CREDENTIAL,
ZENDESK_AUTHENTICATION_CREDENTIAL.getName());
+ config.renameProperty("zendesk-record-reader",
RECORD_READER.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_TICKET_COMMENT_BODY,
TICKET_COMMENT_BODY.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_TICKET_SUBJECT,
TICKET_SUBJECT.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_TICKET_PRIORITY,
TICKET_PRIORITY.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_TICKET_TYPE,
TICKET_TYPE.getName());
+ }
+
private void handleResponse(ProcessSession session, FlowFile flowFile,
HttpResponseEntity response, URI uri, long startNanos) {
if (response.statusCode() == CREATED.getCode() ||
response.statusCode() == OK.getCode()) {
flowFile = session.putAttribute(flowFile, MIME_TYPE.key(),
APPLICATION_JSON);
diff --git
a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-services/src/main/java/org/apache/nifi/services/zendesk/ZendeskRecordSink.java
b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-services/src/main/java/org/apache/nifi/services/zendesk/ZendeskRecordSink.java
index eab73b0b38..8da2cee8e8 100644
---
a/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-services/src/main/java/org/apache/nifi/services/zendesk/ZendeskRecordSink.java
+++
b/nifi-extension-bundles/nifi-zendesk-bundle/nifi-zendesk-services/src/main/java/org/apache/nifi/services/zendesk/ZendeskRecordSink.java
@@ -32,6 +32,7 @@ import org.apache.nifi.components.PropertyDescriptor;
import org.apache.nifi.controller.AbstractControllerService;
import org.apache.nifi.controller.ConfigurationContext;
import org.apache.nifi.expression.ExpressionLanguageScope;
+import org.apache.nifi.migration.PropertyConfiguration;
import org.apache.nifi.processor.util.StandardValidators;
import org.apache.nifi.record.sink.RecordSinkService;
import org.apache.nifi.serialization.WriteResult;
@@ -52,6 +53,15 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_WEB_CLIENT_SERVICE_PROVIDER;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_SUBDOMAIN;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_USER;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_AUTHENTICATION_TYPE;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_AUTHENTICATION_CREDENTIAL;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_TICKET_COMMENT_BODY;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_TICKET_SUBJECT;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_TICKET_PRIORITY;
+import static
org.apache.nifi.common.zendesk.ZendeskProperties.OBSOLETE_ZENDESK_TICKET_TYPE;
import static
org.apache.nifi.common.zendesk.ZendeskProperties.WEB_CLIENT_SERVICE_PROVIDER;
import static
org.apache.nifi.common.zendesk.ZendeskProperties.ZENDESK_AUTHENTICATION_CREDENTIAL;
import static
org.apache.nifi.common.zendesk.ZendeskProperties.ZENDESK_AUTHENTICATION_TYPE;
@@ -85,8 +95,7 @@ public class ZendeskRecordSink extends
AbstractControllerService implements Reco
private String type;
static final PropertyDescriptor CACHE_SIZE = new
PropertyDescriptor.Builder()
- .name("cache-size")
- .displayName("Cache Size")
+ .name("Cache Size")
.description("Specifies how many Zendesk ticket should be cached.")
.addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR)
.defaultValue("1000")
@@ -94,8 +103,7 @@ public class ZendeskRecordSink extends
AbstractControllerService implements Reco
.build();
static final PropertyDescriptor CACHE_EXPIRATION = new
PropertyDescriptor.Builder()
- .name("cache-expiration")
- .displayName("Cache Expiration")
+ .name("Cache Expiration")
.description("Specifies how long a Zendesk ticket that is cached
should remain in the cache.")
.addValidator(StandardValidators.TIME_PERIOD_VALIDATOR)
.defaultValue("1 hour")
@@ -203,6 +211,21 @@ public class ZendeskRecordSink extends
AbstractControllerService implements Reco
recordCache.invalidateAll();
}
+ @Override
+ public void migrateProperties(PropertyConfiguration config) {
+ config.renameProperty(OBSOLETE_WEB_CLIENT_SERVICE_PROVIDER,
WEB_CLIENT_SERVICE_PROVIDER.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_SUBDOMAIN,
ZENDESK_SUBDOMAIN.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_USER, ZENDESK_USER.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_AUTHENTICATION_TYPE,
ZENDESK_AUTHENTICATION_TYPE.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_AUTHENTICATION_CREDENTIAL,
ZENDESK_AUTHENTICATION_CREDENTIAL.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_TICKET_COMMENT_BODY,
ZENDESK_TICKET_COMMENT_BODY.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_TICKET_SUBJECT,
ZENDESK_TICKET_SUBJECT.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_TICKET_PRIORITY,
ZENDESK_TICKET_PRIORITY.getName());
+ config.renameProperty(OBSOLETE_ZENDESK_TICKET_TYPE,
ZENDESK_TICKET_TYPE.getName());
+ config.renameProperty("cache-size", CACHE_SIZE.getName());
+ config.renameProperty("cache-expiration", CACHE_EXPIRATION.getName());
+ }
+
private URI createUri(int numberOfTickets) {
final String resource = numberOfTickets > 1 ?
ZENDESK_CREATE_TICKETS_RESOURCE : ZENDESK_CREATE_TICKET_RESOURCE;
return uriBuilder(resource).build();