Skip to content

Commit 47c8626

Browse files
committed
[Fix #1317] Setting stack trace to details and filling instance
Signed-off-by: fjtirado <ftirados@redhat.com>
1 parent dcc8f61 commit 47c8626

8 files changed

Lines changed: 43 additions & 63 deletions

File tree

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

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@
1515
*/
1616
package io.serverlessworkflow.impl;
1717

18+
import io.serverlessworkflow.impl.lifecycle.TaskFailedEvent;
19+
import io.serverlessworkflow.impl.lifecycle.WorkflowFailedEvent;
1820
import io.serverlessworkflow.types.Errors;
21+
import java.io.PrintWriter;
22+
import java.io.StringWriter;
1923

20-
public record WorkflowError(
21-
String type, int status, String instance, String title, String details) {
24+
public record WorkflowError(String type, int status, String instance, String title, String detail) {
2225

2326
public static Builder error(String type, int status) {
2427
return new Builder(type, status);
@@ -65,6 +68,35 @@ public static Builder timeout() {
6568
return error(Errors.TIMEOUT.toString(), Errors.TIMEOUT.status());
6669
}
6770

71+
public static WorkflowError error(TaskFailedEvent ev) {
72+
return error(ev.cause(), ev.taskContext().position());
73+
}
74+
75+
public static WorkflowError error(WorkflowFailedEvent ev) {
76+
return error(ev.cause(), null);
77+
}
78+
79+
private static WorkflowError error(Throwable cause, WorkflowPosition position) {
80+
return cause instanceof WorkflowException ex ? error(ex) : commonError(cause, position);
81+
}
82+
83+
private static WorkflowError commonError(Throwable cause, WorkflowPosition position) {
84+
StringWriter stackTrace = new StringWriter();
85+
try (PrintWriter writer = new PrintWriter(stackTrace)) {
86+
cause.printStackTrace(writer);
87+
return new WorkflowError(
88+
cause.getClass().getTypeName(),
89+
500,
90+
position == null ? null : position.jsonPointer(),
91+
cause.getMessage(),
92+
stackTrace.toString());
93+
}
94+
}
95+
96+
private static WorkflowError error(WorkflowException ex) {
97+
return ex.getWorkflowError();
98+
}
99+
68100
public static class Builder {
69101

70102
private final String type;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ private static boolean filterError(WorkflowError error, ErrorFilter errorFilter)
217217
&& (errorFilter.getStatus() <= 0 || error.status() == errorFilter.getStatus())
218218
&& compareString(errorFilter.getInstance(), error.instance())
219219
&& compareString(errorFilter.getTitle(), error.title())
220-
&& compareString(errorFilter.getDetails(), error.details());
220+
&& compareString(errorFilter.getDetails(), error.detail());
221221
}
222222

223223
private static boolean compareString(String one, String other) {

impl/core/src/main/java/io/serverlessworkflow/impl/lifecycle/ce/AbstractLifeCyclePublisher.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
*/
1616
package io.serverlessworkflow.impl.lifecycle.ce;
1717

18+
import static io.serverlessworkflow.impl.WorkflowError.error;
1819
import static io.serverlessworkflow.impl.lifecycle.ce.WorkflowDefinitionCEData.ref;
19-
import static io.serverlessworkflow.impl.lifecycle.ce.WorkflowErrorCEData.error;
2020

2121
import io.cloudevents.CloudEvent;
2222
import io.cloudevents.CloudEventData;

impl/core/src/main/java/io/serverlessworkflow/impl/lifecycle/ce/TaskFailedCEData.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@
1515
*/
1616
package io.serverlessworkflow.impl.lifecycle.ce;
1717

18+
import io.serverlessworkflow.impl.WorkflowError;
1819
import java.time.OffsetDateTime;
1920

2021
public record TaskFailedCEData(
2122
String workflow,
2223
String task,
2324
WorkflowDefinitionCEData definition,
2425
OffsetDateTime faultedAt,
25-
WorkflowErrorCEData error) {}
26+
WorkflowError error) {}

impl/core/src/main/java/io/serverlessworkflow/impl/lifecycle/ce/WorkflowErrorCEData.java

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

impl/core/src/main/java/io/serverlessworkflow/impl/lifecycle/ce/WorkflowFailedCEData.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@
1515
*/
1616
package io.serverlessworkflow.impl.lifecycle.ce;
1717

18+
import io.serverlessworkflow.impl.WorkflowError;
1819
import java.time.OffsetDateTime;
1920

2021
public record WorkflowFailedCEData(
2122
String name,
2223
WorkflowDefinitionCEData definition,
2324
OffsetDateTime faultedAt,
24-
WorkflowErrorCEData error) {}
25+
WorkflowError error) {}

impl/test/src/test/java/io/serverlessworkflow/impl/test/LifeCycleEventsTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.serverlessworkflow.impl.WorkflowApplication;
2929
import io.serverlessworkflow.impl.WorkflowDefinition;
3030
import io.serverlessworkflow.impl.WorkflowDefinitionId;
31+
import io.serverlessworkflow.impl.WorkflowError;
3132
import io.serverlessworkflow.impl.WorkflowInstance;
3233
import io.serverlessworkflow.impl.WorkflowModel;
3334
import io.serverlessworkflow.impl.WorkflowStatus;
@@ -38,7 +39,6 @@
3839
import io.serverlessworkflow.impl.lifecycle.ce.TaskStartedCEData;
3940
import io.serverlessworkflow.impl.lifecycle.ce.WorkflowCancelledCEData;
4041
import io.serverlessworkflow.impl.lifecycle.ce.WorkflowCompletedCEData;
41-
import io.serverlessworkflow.impl.lifecycle.ce.WorkflowErrorCEData;
4242
import io.serverlessworkflow.impl.lifecycle.ce.WorkflowFailedCEData;
4343
import io.serverlessworkflow.impl.lifecycle.ce.WorkflowResumedCEData;
4444
import io.serverlessworkflow.impl.lifecycle.ce.WorkflowStartedCEData;
@@ -225,7 +225,7 @@ void testError() throws IOException {
225225
CompletionException.class,
226226
() -> appl.workflowDefinition(workflow).instance(Map.of()).start().join()))
227227
.isNotNull();
228-
WorkflowErrorCEData error =
228+
WorkflowError error =
229229
assertPojoInCE("io.serverlessworkflow.workflow.faulted.v1", WorkflowFailedCEData.class)
230230
.error();
231231
assertThat(error.type()).isEqualTo("https://serverlessworkflow.io/errors/not-implemented");

impl/test/src/test/java/io/serverlessworkflow/impl/test/WorkflowDefinitionTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ private static void checkWorkflowException(WorkflowException ex) {
204204
.isEqualTo("https://serverlessworkflow.io/errors/not-implemented");
205205
assertThat(ex.getWorkflowError().status()).isEqualTo(500);
206206
assertThat(ex.getWorkflowError().title()).isEqualTo("Not Implemented");
207-
assertThat(ex.getWorkflowError().details()).contains("raise-not-implemented");
207+
assertThat(ex.getWorkflowError().detail()).contains("raise-not-implemented");
208208
assertThat(ex.getWorkflowError().instance()).isEqualTo("do/0/notImplemented");
209209
}
210210

0 commit comments

Comments
 (0)