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)
+        );
+    }
 }

Reply via email to