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 af7d8478b4 NIFI-15273 Added custom Validator for WebSocket Message
Type for PutWebSocket (#10580)
af7d8478b4 is described below
commit af7d8478b4b48e737b0adf6cdcc92b9745dd3a0e
Author: dan-s1 <[email protected]>
AuthorDate: Mon Dec 1 15:00:55 2025 -0500
NIFI-15273 Added custom Validator for WebSocket Message Type for
PutWebSocket (#10580)
Signed-off-by: David Handermann <[email protected]>
---
.../nifi/processors/websocket/PutWebSocket.java | 24 +++++++++++++++++++++-
.../processors/websocket/TestPutWebSocket.java | 23 +++++++++++++++++++++
2 files changed, 46 insertions(+), 1 deletion(-)
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 377f4478ee..c3708e2fc7 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
@@ -33,7 +33,10 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
+import java.util.regex.Pattern;
+import org.apache.nifi.components.ValidationResult;
+import org.apache.nifi.components.Validator;
import org.apache.nifi.migration.PropertyConfiguration;
import org.apache.nifi.util.StringUtils;
import org.apache.nifi.annotation.behavior.SystemResourceConsideration;
@@ -104,11 +107,30 @@ public class PutWebSocket extends AbstractProcessor {
.defaultValue("${" + ATTR_WS_ENDPOINT_ID + "}")
.build();
+ private static final Pattern WEBSOCKETMESSAGE_TYPE_PATTERN =
Pattern.compile("^(?:BINARY|TEXT)$");
+ private static final Validator WEBSOCKETMESSAGE_TYPE_VALIDATOR = (subject,
input, context) -> {
+ final boolean matches =
WEBSOCKETMESSAGE_TYPE_PATTERN.matcher(input).matches();
+ if (matches || context.isExpressionLanguagePresent(input)) {
+ return (new ValidationResult.Builder())
+ .subject(subject)
+ .input(input)
+ .valid(true)
+ .build();
+ } else {
+ return (new ValidationResult.Builder())
+ .subject(subject)
+ .valid(false)
+ .explanation(String.format("%s must be either BINARY or
TEXT", subject))
+ .input(input)
+ .build();
+ }
+ };
+
public static final PropertyDescriptor PROP_WS_MESSAGE_TYPE = new
PropertyDescriptor.Builder()
.name("WebSocket Message Type")
.description("The type of message content: TEXT or BINARY")
.required(true)
- .addValidator(StandardValidators.NON_BLANK_VALIDATOR)
+ .addValidator(WEBSOCKETMESSAGE_TYPE_VALIDATOR)
.defaultValue(WebSocketMessage.Type.TEXT.toString())
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
.build();
diff --git
a/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/test/java/org/apache/nifi/processors/websocket/TestPutWebSocket.java
b/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/test/java/org/apache/nifi/processors/websocket/TestPutWebSocket.java
index dfdaf3c860..7d0cd8b88f 100644
---
a/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/test/java/org/apache/nifi/processors/websocket/TestPutWebSocket.java
+++
b/nifi-extension-bundles/nifi-websocket-bundle/nifi-websocket-processors/src/test/java/org/apache/nifi/processors/websocket/TestPutWebSocket.java
@@ -27,12 +27,16 @@ import org.apache.nifi.websocket.WebSocketMessage;
import org.apache.nifi.websocket.WebSocketService;
import org.apache.nifi.websocket.WebSocketSession;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.stream.Stream;
import static
org.apache.nifi.processors.websocket.WebSocketProcessorAttributes.ATTR_WS_CS_ID;
import static
org.apache.nifi.processors.websocket.WebSocketProcessorAttributes.ATTR_WS_ENDPOINT_ID;
@@ -266,5 +270,24 @@ public class TestPutWebSocket {
assertEquals(2, provenanceEvents.size());
}
+ @ParameterizedTest
+ @MethodSource("webSocketMessageTypeArgs")
+ void testWebSocketMessageType(String type, boolean valid) {
+ final TestRunner runner =
TestRunners.newTestRunner(PutWebSocket.class);
+ runner.setProperty(PutWebSocket.PROP_WS_MESSAGE_TYPE, type);
+
+ if (valid) {
+ runner.assertValid();
+ } else {
+ runner.assertNotValid();
+ }
+ }
+ private static Stream<Arguments> webSocketMessageTypeArgs() {
+ return Stream.of(
+ Arguments.argumentSet("Valid type TEXT",
WebSocketMessage.Type.TEXT.name(), true),
+ Arguments.argumentSet("Valid type BINARY",
WebSocketMessage.Type.BINARY.name(), true),
+ Arguments.argumentSet("Invalid type", "INVALID_TYPE", false)
+ );
+ }
}