Skip to content

Commit 7bcdaad

Browse files
committed
Refactoring HTTP request builder
Signed-off-by: fjtirado <ftirados@redhat.com>
1 parent 22e9711 commit 7bcdaad

File tree

8 files changed

+134
-137
lines changed

8 files changed

+134
-137
lines changed

impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowUtils.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
import io.serverlessworkflow.api.types.OutputAs;
2222
import io.serverlessworkflow.api.types.SchemaUnion;
2323
import io.serverlessworkflow.api.types.SecretBasedAuthenticationPolicy;
24+
import io.serverlessworkflow.api.types.TaskBase;
25+
import io.serverlessworkflow.api.types.TaskTimeout;
26+
import io.serverlessworkflow.api.types.Timeout;
2427
import io.serverlessworkflow.api.types.TimeoutAfter;
2528
import io.serverlessworkflow.api.types.UriTemplate;
2629
import io.serverlessworkflow.api.types.Workflow;
@@ -34,6 +37,7 @@
3437
import java.net.URISyntaxException;
3538
import java.time.Duration;
3639
import java.util.Map;
40+
import java.util.Objects;
3741
import java.util.Optional;
3842
import org.slf4j.Logger;
3943
import org.slf4j.LoggerFactory;
@@ -208,6 +212,28 @@ public static WorkflowValueResolver<Duration> fromTimeoutAfter(
208212
}
209213
}
210214

215+
public static Optional<WorkflowValueResolver<Duration>> getTaskTimeout(
216+
WorkflowApplication appl, Workflow workflow, TaskBase task) {
217+
TaskTimeout timeout = task.getTimeout();
218+
if (timeout == null) {
219+
return Optional.empty();
220+
}
221+
Timeout timeoutDef = timeout.getTaskTimeoutDefinition();
222+
if (timeoutDef == null && timeout.getTaskTimeoutReference() != null) {
223+
timeoutDef =
224+
Objects.requireNonNull(
225+
Objects.requireNonNull(
226+
workflow.getUse().getTimeouts(),
227+
"Timeout reference "
228+
+ timeout.getTaskTimeoutReference()
229+
+ " specified, but use timeout was not defined")
230+
.getAdditionalProperties()
231+
.get(timeout.getTaskTimeoutReference()),
232+
"Timeout reference " + timeout.getTaskTimeoutReference() + "cannot be found");
233+
}
234+
return Optional.of(WorkflowUtils.fromTimeoutAfter(appl, timeoutDef.getAfter()));
235+
}
236+
211237
public static final String secretProp(WorkflowContext context, String secretName, String prop) {
212238
return (String) secret(context, secretName).get(prop);
213239
}

impl/core/src/main/java/io/serverlessworkflow/impl/executors/AbstractTaskExecutor.java

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
import io.serverlessworkflow.api.types.Input;
2525
import io.serverlessworkflow.api.types.Output;
2626
import io.serverlessworkflow.api.types.TaskBase;
27-
import io.serverlessworkflow.api.types.TaskTimeout;
28-
import io.serverlessworkflow.api.types.Timeout;
2927
import io.serverlessworkflow.api.types.Workflow;
3028
import io.serverlessworkflow.impl.TaskContext;
3129
import io.serverlessworkflow.impl.WorkflowApplication;
@@ -52,7 +50,6 @@
5250
import java.time.Instant;
5351
import java.util.Iterator;
5452
import java.util.Map;
55-
import java.util.Objects;
5653
import java.util.Optional;
5754
import java.util.concurrent.CancellationException;
5855
import java.util.concurrent.CompletableFuture;
@@ -124,28 +121,7 @@ protected AbstractTaskExecutorBuilder(
124121
getSchemaValidator(application.validatorFactory(), resourceLoader, export.getSchema());
125122
}
126123
this.ifFilter = application.expressionFactory().buildIfFilter(task);
127-
this.timeout = getTaskTimeout();
128-
}
129-
130-
private Optional<WorkflowValueResolver<Duration>> getTaskTimeout() {
131-
TaskTimeout timeout = task.getTimeout();
132-
if (timeout == null) {
133-
return Optional.empty();
134-
}
135-
Timeout timeoutDef = timeout.getTaskTimeoutDefinition();
136-
if (timeoutDef == null && timeout.getTaskTimeoutReference() != null) {
137-
timeoutDef =
138-
Objects.requireNonNull(
139-
Objects.requireNonNull(
140-
workflow.getUse().getTimeouts(),
141-
"Timeout reference "
142-
+ timeout.getTaskTimeoutReference()
143-
+ " specified, but use timeout was not defined")
144-
.getAdditionalProperties()
145-
.get(timeout.getTaskTimeoutReference()),
146-
"Timeout reference " + timeout.getTaskTimeoutReference() + "cannot be found");
147-
}
148-
return Optional.of(WorkflowUtils.fromTimeoutAfter(application, timeoutDef.getAfter()));
124+
this.timeout = WorkflowUtils.getTaskTimeout(application, workflow, task);
149125
}
150126

151127
protected final TransitionInfoBuilder next(

impl/http/src/main/java/io/serverlessworkflow/impl/executors/http/AbstractHttpExecutorBuilder.java

Lines changed: 0 additions & 71 deletions
This file was deleted.

impl/http/src/main/java/io/serverlessworkflow/impl/executors/http/AbstractRequestSupplier.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public WorkflowModel apply(
5252
private void validateStatus(TaskContext task, Response response, HttpModelConverter converter) {
5353
Family statusFamily = response.getStatusInfo().getFamily();
5454

55-
if (statusFamily != SUCCESSFUL || (!this.redirect && statusFamily == REDIRECTION)) {
55+
if (statusFamily != SUCCESSFUL && (!this.redirect || statusFamily != REDIRECTION)) {
5656
throw new WorkflowException(
5757
converter
5858
.errorFromResponse(WorkflowError.communication(response.getStatus(), task), response)

impl/http/src/main/java/io/serverlessworkflow/impl/executors/http/CallableTaskHttpExecutorBuilder.java

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,54 +23,64 @@
2323
import io.serverlessworkflow.api.types.TaskBase;
2424
import io.serverlessworkflow.impl.WorkflowDefinition;
2525
import io.serverlessworkflow.impl.WorkflowMutablePosition;
26+
import io.serverlessworkflow.impl.WorkflowUtils;
27+
import io.serverlessworkflow.impl.WorkflowValueResolver;
28+
import io.serverlessworkflow.impl.executors.CallableTask;
2629
import io.serverlessworkflow.impl.executors.CallableTaskBuilder;
27-
import java.util.Optional;
30+
import java.net.URI;
2831

29-
public class CallableTaskHttpExecutorBuilder extends AbstractHttpExecutorBuilder
30-
implements CallableTaskBuilder<CallHTTP> {
32+
public class CallableTaskHttpExecutorBuilder implements CallableTaskBuilder<CallHTTP> {
33+
34+
private HttpExecutorBuilder builder;
35+
private WorkflowValueResolver<URI> uriSupplier;
3136

3237
@Override
3338
public void init(CallHTTP task, WorkflowDefinition definition, WorkflowMutablePosition position) {
39+
40+
builder = HttpExecutorBuilder.builder(definition);
3441
final HTTPArguments httpArgs = task.getWith();
3542
final Endpoint endpoint = httpArgs.getEndpoint();
3643

37-
this.authProvider =
38-
endpoint.getEndpointConfiguration() == null
39-
? Optional.empty()
40-
: AuthProviderFactory.getAuth(
41-
definition, endpoint.getEndpointConfiguration().getAuthentication());
44+
if (endpoint.getEndpointConfiguration() != null) {
45+
builder.withAuth(endpoint.getEndpointConfiguration().getAuthentication());
46+
}
4247

43-
this.targetSupplier = getTargetSupplier(definition.resourceLoader().uriSupplier(endpoint));
48+
uriSupplier = definition.resourceLoader().uriSupplier(endpoint);
4449

4550
if (httpArgs.getHeaders() != null) {
46-
this.headersMap =
51+
builder.withHeaders(
4752
buildMapResolver(
4853
definition.application(),
4954
httpArgs.getHeaders().getRuntimeExpression(),
5055
httpArgs.getHeaders().getHTTPHeaders() != null
5156
? httpArgs.getHeaders().getHTTPHeaders().getAdditionalProperties()
52-
: null);
57+
: null));
5358
}
5459

5560
if (httpArgs.getQuery() != null) {
56-
queryMap =
61+
builder.withQueryMap(
5762
buildMapResolver(
5863
definition.application(),
5964
httpArgs.getQuery().getRuntimeExpression(),
6065
httpArgs.getQuery().getHTTPQuery() != null
6166
? httpArgs.getQuery().getHTTPQuery().getAdditionalProperties()
62-
: null);
67+
: null));
6368
}
64-
this.requestFunction =
65-
buildRequestSupplier(
66-
httpArgs.getMethod().toUpperCase(),
67-
httpArgs.getBody(),
68-
httpArgs.isRedirect(),
69-
definition.application());
69+
70+
builder.withBody(httpArgs.getBody());
71+
builder.withMethod(httpArgs.getMethod().toUpperCase());
72+
builder.redirect(httpArgs.isRedirect());
73+
builder.timeout(
74+
WorkflowUtils.getTaskTimeout(definition.application(), definition.workflow(), task));
7075
}
7176

7277
@Override
7378
public boolean accept(Class<? extends TaskBase> clazz) {
7479
return clazz.equals(CallHTTP.class);
7580
}
81+
82+
@Override
83+
public CallableTask build() {
84+
return builder.build(uriSupplier);
85+
}
7686
}

impl/http/src/main/java/io/serverlessworkflow/impl/executors/http/HttpClientResolver.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@
1616
package io.serverlessworkflow.impl.executors.http;
1717

1818
import io.serverlessworkflow.impl.TaskContext;
19+
import io.serverlessworkflow.impl.WorkflowApplication;
1920
import io.serverlessworkflow.impl.WorkflowContext;
2021
import jakarta.ws.rs.client.Client;
2122
import jakarta.ws.rs.client.ClientBuilder;
23+
import java.time.Duration;
24+
import java.util.Optional;
2225

2326
public class HttpClientResolver {
2427

@@ -29,10 +32,16 @@ private static class DefaultHolder {
2932
}
3033

3134
public static Client client(WorkflowContext workflowContext, TaskContext taskContext) {
32-
return workflowContext
33-
.definition()
34-
.application()
35-
.<Client>additionalObject(HTTP_CLIENT_PROVIDER, workflowContext, taskContext)
35+
return client(workflowContext, taskContext, false, Optional.empty());
36+
}
37+
38+
public static Client client(
39+
WorkflowContext workflowContext,
40+
TaskContext taskContext,
41+
boolean redirect,
42+
Optional<Duration> timeout) {
43+
WorkflowApplication appl = workflowContext.definition().application();
44+
return appl.<Client>additionalObject(HTTP_CLIENT_PROVIDER, workflowContext, taskContext)
3645
.orElseGet(() -> DefaultHolder.client);
3746
}
3847

0 commit comments

Comments
 (0)