This is an automated email from the ASF dual-hosted git repository.

fjtiradosarti pushed a commit to branch main
in repository 
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git


The following commit(s) were added to refs/heads/main by this push:
     new 89d58a73a7 [Fix #4138] Protocol is not supported in function metadata 
(#4139)
89d58a73a7 is described below

commit 89d58a73a78911634c04288dbc5e5fdc460ae88c
Author: Francisco Javier Tirado Sarti 
<[email protected]>
AuthorDate: Thu Dec 11 17:09:35 2025 +0100

    [Fix #4138] Protocol is not supported in function metadata (#4139)
    
    Signed-off-by: fjtirado <[email protected]>
---
 .../kie/kogito/internal/utils/ConversionUtils.java |  2 +-
 .../workflow/parser/types/RestTypeHandler.java     |  1 +
 .../kogito/workitem/rest/RestWorkItemHandler.java  | 23 ++++++++--------
 .../workitem/rest/RestWorkItemHandlerUtils.java    |  5 ++++
 .../workitem/rest/RestWorkItemHandlerTest.java     | 32 ++++++++++++++++++++++
 5 files changed, 51 insertions(+), 12 deletions(-)

diff --git 
a/api/kogito-api/src/main/java/org/kie/kogito/internal/utils/ConversionUtils.java
 
b/api/kogito-api/src/main/java/org/kie/kogito/internal/utils/ConversionUtils.java
index def8ee02b9..a5c848c09e 100644
--- 
a/api/kogito-api/src/main/java/org/kie/kogito/internal/utils/ConversionUtils.java
+++ 
b/api/kogito-api/src/main/java/org/kie/kogito/internal/utils/ConversionUtils.java
@@ -228,7 +228,7 @@ public class ConversionUtils {
      * @return
      */
     public static boolean isEmpty(String value) {
-        return Objects.isNull(value) || value.isBlank();
+        return value == null || value.isBlank();
     }
 
     /**
diff --git 
a/kogito-serverless-workflow/kogito-serverless-workflow-rest-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/types/RestTypeHandler.java
 
b/kogito-serverless-workflow/kogito-serverless-workflow-rest-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/types/RestTypeHandler.java
index aceca4c073..d05dfd9a7a 100644
--- 
a/kogito-serverless-workflow/kogito-serverless-workflow-rest-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/types/RestTypeHandler.java
+++ 
b/kogito-serverless-workflow/kogito-serverless-workflow-rest-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/types/RestTypeHandler.java
@@ -66,6 +66,7 @@ public class RestTypeHandler extends WorkItemTypeHandler {
                 .workParameter(RestWorkItemHandler.METHOD, method)
                 .workParameter(RestWorkItemHandler.USER, 
runtimeRestApi(functionDef, USER_PROP, context.getContext()))
                 .workParameter(RestWorkItemHandler.PASSWORD, 
runtimeRestApi(functionDef, PASSWORD_PROP, context.getContext()))
+                .workParameter(RestWorkItemHandler.PROTOCOL, 
runtimeRestApi(functionDef, "protocol", context.getContext()))
                 .workParameter(RestWorkItemHandler.HOST, 
runtimeRestApi(functionDef, "host", context.getContext()))
                 .workParameter(RestWorkItemHandler.PORT, 
runtimeRestApi(functionDef, PORT, context.getContext(), Integer.class,
                         
context.getContext().getApplicationProperty(APP_PROPERTIES_FUNCTIONS_BASE + 
PORT).map(Integer::parseInt).orElse(null)))
diff --git 
a/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/RestWorkItemHandler.java
 
b/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/RestWorkItemHandler.java
index 8e7ff73d1f..5fe35b92a3 100644
--- 
a/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/RestWorkItemHandler.java
+++ 
b/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/RestWorkItemHandler.java
@@ -91,6 +91,8 @@ public class RestWorkItemHandler extends 
DefaultKogitoWorkItemHandler {
     public static final String PATH_PARAM_RESOLVER = "PathParamResolver";
     public static final String AUTH_METHOD = "AuthMethod";
     public static final String TARGET_TYPE = "TargetType";
+    private static final String HTTP_PROTOCOL = "http";
+    private static final String HTTPS_PROTOCOL = "https";
 
     public static final String REQUEST_TIMEOUT_IN_MILLIS = "RequestTimeout";
 
@@ -162,28 +164,24 @@ public class RestWorkItemHandler extends 
DefaultKogitoWorkItemHandler {
         } catch (MalformedURLException ex) {
             logger.debug("Parameter endpoint {} is not valid uri {}", 
endPoint, ex.getMessage());
         }
-
         if (isEmpty(protocol)) {
-            protocol = getParam(parameters, PROTOCOL, String.class, "http");
-            logger.debug("Protocol not specified, using {}", protocol);
+            protocol = getParam(parameters, PROTOCOL);
         }
-
-        boolean isSsl = protocol.equalsIgnoreCase("https");
-
         if (isEmpty(host)) {
             host = getParam(parameters, HOST, String.class, "localhost");
-            logger.debug("Host not specified, using {}", host);
         }
         if (port == -1) {
-            port = getParam(parameters, PORT, Integer.class, isSsl ? 
DEFAULT_SSL_PORT : DEFAULT_PORT);
-            logger.debug("Port not specified, using {}", port);
+            port = getParam(parameters, PORT, Integer.class, isHttps(protocol) 
? DEFAULT_SSL_PORT : DEFAULT_PORT);
         }
         if (isEmpty(path)) {
             path = endPoint;
             logger.debug("Path is empty, using whole endpoint {}", endPoint);
         }
+        if (isEmpty(protocol)) {
+            protocol = port == DEFAULT_SSL_PORT ? HTTPS_PROTOCOL : 
HTTP_PROTOCOL;
+        }
         logger.debug("Invoking request with protocol {} host {} port {} and 
endpoint {}", protocol, host, port, path);
-        WebClient client = isSsl ? httpsClient : httpClient;
+        WebClient client = isHttps(protocol) ? httpsClient : httpClient;
         HttpRequest<Buffer> request = client.request(method, port, host, path);
         requestDecorators.forEach(d -> d.decorate(workItem, parameters, 
request));
         authDecorators.forEach(d -> d.decorate(workItem, parameters, request));
@@ -196,6 +194,10 @@ public class RestWorkItemHandler extends 
DefaultKogitoWorkItemHandler {
                 Collections.singletonMap(RESULT, resultHandler.apply(response, 
targetInfo, ContextFactory.fromItem(workItem)))));
     }
 
+    private boolean isHttps(String protocol) {
+        return HTTPS_PROTOCOL.equalsIgnoreCase(protocol);
+    }
+
     private static HttpResponse<Buffer> sendBody(HttpRequest<Buffer> request, 
Object body, Duration requestTimeout) {
         return requestTimeout == null ? sendBody(request, body) : 
sendBodyTimeout(request, body, requestTimeout);
     }
@@ -258,5 +260,4 @@ public class RestWorkItemHandler extends 
DefaultKogitoWorkItemHandler {
         logger.info("Cannot find definition for variable {}", varName);
         return null;
     }
-
 }
diff --git 
a/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/RestWorkItemHandlerUtils.java
 
b/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/RestWorkItemHandlerUtils.java
index 60bc8bb78a..5834726cf4 100644
--- 
a/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/RestWorkItemHandlerUtils.java
+++ 
b/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/RestWorkItemHandlerUtils.java
@@ -26,6 +26,8 @@ import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
 import org.kie.kogito.internal.process.workitem.WorkItemExecutionException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import io.vertx.ext.web.client.WebClientOptions;
 import io.vertx.mutiny.core.buffer.Buffer;
@@ -35,6 +37,8 @@ import static 
org.kie.kogito.internal.utils.ConversionUtils.convert;
 
 public class RestWorkItemHandlerUtils {
 
+    private final static Logger logger = 
LoggerFactory.getLogger(RestWorkItemHandlerUtils.class);
+
     private RestWorkItemHandlerUtils() {
     }
 
@@ -53,6 +57,7 @@ public class RestWorkItemHandlerUtils {
 
     public static <T> T getParam(Map<String, Object> parameters, String 
paramName, Class<T> type, T defaultValue) {
         Object value = parameters.remove(paramName);
+        logger.debug("Rest parameter name {} value is {}", paramName, value);
         return value == null ? defaultValue : convert(value, type, v -> 
v.toString().toUpperCase());
     }
 
diff --git 
a/kogito-workitems/kogito-rest-workitem/src/test/java/org/kogito/workitem/rest/RestWorkItemHandlerTest.java
 
b/kogito-workitems/kogito-rest-workitem/src/test/java/org/kogito/workitem/rest/RestWorkItemHandlerTest.java
index a3054e743a..578868cd63 100644
--- 
a/kogito-workitems/kogito-rest-workitem/src/test/java/org/kogito/workitem/rest/RestWorkItemHandlerTest.java
+++ 
b/kogito-workitems/kogito-rest-workitem/src/test/java/org/kogito/workitem/rest/RestWorkItemHandlerTest.java
@@ -83,6 +83,12 @@ public class RestWorkItemHandlerTest {
     @Mock
     private HttpRequest<Buffer> request;
 
+    @Mock
+    private HttpRequest<Buffer> sslRequest;
+
+    @Mock
+    private HttpResponse<Buffer> sslResponse;
+
     private KogitoWorkItemImpl workItem;
 
     @Mock
@@ -111,6 +117,10 @@ public class RestWorkItemHandlerTest {
         ObjectMapper mapper = new ObjectMapper();
         when(webClient.request(any(HttpMethod.class), eq(8080), 
eq("localhost"), anyString()))
                 .thenReturn(request);
+        when(sslClient.request(any(HttpMethod.class), eq(443), 
eq("localhost"), anyString())).thenReturn(sslRequest);
+        when(sslRequest.sendAndAwait()).thenReturn(sslResponse);
+        
when(sslResponse.bodyAsJson(ObjectNode.class)).thenReturn(ObjectMapperFactory.get().createObjectNode().put("num",
 2));
+        when(sslResponse.statusCode()).thenReturn(200);
 
         when(request.sendJsonAndAwait(any())).thenReturn(response);
         when(request.sendAndAwait()).thenReturn(response);
@@ -120,6 +130,7 @@ public class RestWorkItemHandlerTest {
         workItem = new KogitoWorkItemImpl();
         workItem.setId("2");
         parameters = workItem.getParameters();
+        parameters.put(RestWorkItemHandler.PROTOCOL, "http");
         parameters.put(RestWorkItemHandler.HOST, "localhost");
         parameters.put(RestWorkItemHandler.PORT, 8080);
         parameters.put(RestWorkItemHandler.URL, "/results/sum");
@@ -272,7 +283,20 @@ public class RestWorkItemHandlerTest {
         ObjectNode bodyMap = bodyCaptor.getValue();
         assertThat(bodyMap.get("id").asInt()).isEqualTo(26);
         assertThat(bodyMap.get("name").asText()).isEqualTo("pepe");
+    }
 
+    @Test
+    public void testSSLRequestProtocol() {
+        parameters.remove(RestWorkItemHandler.PORT);
+        parameters.put(RestWorkItemHandler.PROTOCOL, "https");
+        assertSSLResult(handler.transitionToPhase(manager, workItem, 
handler.startingTransition(parameters)));
+    }
+
+    @Test
+    public void testSSLRequestPort() {
+        parameters.remove(RestWorkItemHandler.PROTOCOL);
+        parameters.put(RestWorkItemHandler.PORT, 443);
+        assertSSLResult(handler.transitionToPhase(manager, workItem, 
handler.startingTransition(parameters)));
     }
 
     public void assertResult(Optional<WorkItemTransition> transition) {
@@ -282,4 +306,12 @@ public class RestWorkItemHandlerTest {
         assertThat(result).isInstanceOf(ObjectNode.class);
         assertThat(((ObjectNode) result).get("num").asInt()).isOne();
     }
+
+    public void assertSSLResult(Optional<WorkItemTransition> transition) {
+        Map<String, Object> results = transition.get().data();
+        assertThat(results).hasSize(1).containsKey(RestWorkItemHandler.RESULT);
+        Object result = results.get(RestWorkItemHandler.RESULT);
+        assertThat(result).isInstanceOf(ObjectNode.class);
+        assertThat(((ObjectNode) result).get("num").asInt()).isEqualTo(2);
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to