I register my dynamic workflow with WorkflowImplementationOptions.failWorkflowExceptionTypes.
But the workflow did not fail when the exception type occurs.
The code to reproduce this problem are as follows:
package com.examples.myflows;
import com.examples.TestTemporalServer;
import io.temporal.client.*;
import io.temporal.common.converter.EncodedValues;
import io.temporal.serviceclient.WorkflowServiceStubs;
import io.temporal.worker.Worker;
import io.temporal.worker.WorkerFactory;
import io.temporal.worker.WorkflowImplementationOptions;
import io.temporal.workflow.DynamicWorkflow;
import io.temporal.workflow.WorkflowInterface;
import io.temporal.workflow.WorkflowMethod;
public class TestFailedWorkflowExceptionTypes {
private static final String TASK_QUEUE = "default";
private static final String COMMON_WORKFLOW_ID = "ThrowExceptionWorkflow";
private static final String DYNAMIC_WORKFLOW_ID = "ThrowExceptionDynamicWorkflow";
@WorkflowInterface
public interface ThrowExceptionWorkflow {
@WorkflowMethod
void execute();
}
public static class ThrowExceptionWorkflowImpl implements ThrowExceptionWorkflow {
@Override
public void execute() {
throw new RuntimeException("xxx");
}
}
public static class ThrowExceptionDynamicWorkflow implements DynamicWorkflow {
@Override
public Object execute(EncodedValues args) {
throw new RuntimeException("xxx");
}
}
public static void main(String[] args) {
WorkflowServiceStubs service = TestTemporalServer.defaultStub();
WorkflowClientOptions clientOptions = WorkflowClientOptions.newBuilder()
.setNamespace("test")
.build();
WorkflowClient client = WorkflowClient.newInstance(service, clientOptions);
WorkerFactory factory = WorkerFactory.newInstance(client);
Worker worker = factory.newWorker(TASK_QUEUE);
WorkflowImplementationOptions workflowImplementationOptions = WorkflowImplementationOptions.newBuilder()
.setFailWorkflowExceptionTypes(RuntimeException.class)
.build();
worker.registerWorkflowImplementationTypes(workflowImplementationOptions, ThrowExceptionWorkflowImpl.class, ThrowExceptionDynamicWorkflow.class);
factory.start();
//common
try {
WorkflowOptions options = WorkflowOptions.newBuilder()
.setTaskQueue(TASK_QUEUE)
.setWorkflowId(COMMON_WORKFLOW_ID)
.build();
client.newWorkflowStub(ThrowExceptionWorkflow.class, options).execute();
} catch (WorkflowException e) {
System.out.println("COMMON:" + e.getCause().getMessage());
}
//dynamic
WorkflowOptions workflowOptions =
WorkflowOptions.newBuilder().setWorkflowId(DYNAMIC_WORKFLOW_ID).setTaskQueue(TASK_QUEUE).build();
WorkflowStub workflowStub = client.newUntypedWorkflowStub("abc", workflowOptions);
try {
workflowStub.start();
workflowStub.getResult(Void.class);
} catch (WorkflowException e) {
System.out.println("DYNAMIC:" + e.getMessage());
}
}
}
The common workflow fails but dynamic workflow.
My Temporal Server version is 1.20.3 , Java SDK version is 1.22.3.