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]