Skip to content

Commit e6344e7

Browse files
authored
feat(engine) - add BpmnErrorCodeProvider interface and implement custom error code handling
1 parent 08c6c6d commit e6344e7

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.finos.fluxnova.bpm.engine.delegate;
2+
3+
/**
4+
* Interface to be implemented by exceptions that are intended to provide a BPMN error code.
5+
* <p>
6+
* Implement this interface in custom exception classes when you want to propagate a specific
7+
* BPMN error code to the process engine. The {@link #getErrorCode()} method should return
8+
* the BPMN error code associated with the exception.
9+
*/
10+
11+
public interface BpmnErrorCodeProvider {
12+
String getErrorCode();
13+
}

engine/src/main/java/org/finos/fluxnova/bpm/engine/impl/bpmn/helper/BpmnExceptionHandler.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import org.finos.fluxnova.bpm.engine.ProcessEngineException;
2020
import org.finos.fluxnova.bpm.engine.delegate.BpmnError;
21+
import org.finos.fluxnova.bpm.engine.delegate.BpmnErrorCodeProvider;
2122
import org.finos.fluxnova.bpm.engine.impl.ProcessEngineLogger;
2223
import org.finos.fluxnova.bpm.engine.impl.bpmn.behavior.BpmnBehaviorLogger;
2324
import org.finos.fluxnova.bpm.engine.impl.bpmn.parser.ErrorEventDefinition;
@@ -59,7 +60,11 @@ protected static void propagateExceptionAsError(Exception exception, ActivityExe
5960
throw exception;
6061
}
6162
else {
62-
propagateError(null, exception.getMessage(),exception, execution);
63+
String errorCode = null;
64+
if (exception instanceof BpmnErrorCodeProvider) {
65+
errorCode = ((BpmnErrorCodeProvider) exception).getErrorCode();
66+
}
67+
propagateError(errorCode, exception.getMessage(),exception, execution);
6368
}
6469
}
6570

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.finos.fluxnova.bpm.engine.test.bpmn.behavior;
2+
3+
import org.finos.fluxnova.bpm.engine.delegate.BpmnErrorCodeProvider;
4+
import org.junit.Test;
5+
import static org.assertj.core.api.Assertions.assertThat;
6+
7+
public class BpmnErrorCodeProviderTest {
8+
static class CustomBpmnException extends Exception implements BpmnErrorCodeProvider {
9+
@Override
10+
public String getErrorCode() {
11+
return "CUSTOM_ERROR_CODE";
12+
}
13+
}
14+
15+
@Test
16+
public void shouldReturnCustomErrorCode() {
17+
CustomBpmnException exception = new CustomBpmnException();
18+
assertThat(exception.getErrorCode()).isEqualTo("CUSTOM_ERROR_CODE");
19+
}
20+
}

0 commit comments

Comments
 (0)