Skip to content

EXCLUSIVE_JOIN task: missing builder class; defaultExclusiveJoinTask unreachable #133

Description

@nthmost-orkes

Summary

TaskType.EXCLUSIVE_JOIN exists in the SDK enum but there is no ExclusiveJoin builder
class. There is no way to set the defaultExclusiveJoinTask field through the SDK API.
Users must construct raw WorkflowTask objects manually.

Server baseline

Conductor 3.32.0-rc.9

Evidence

Static: TaskType.EXCLUSIVE_JOIN is in the enum; no builder class exists.
WorkflowTask.defaultExclusiveJoinTask (type: List<String>) is unreachable from the SDK.

Live (2026-07-16): A raw EXCLUSIVE_JOIN task (joinOn, defaultExclusiveJoinTask)
inside a SWITCH workflow was registered and executed against Conductor OSS 3.32.0-rc.9.
Workflow completed successfully — server supports EXCLUSIVE_JOIN fully, gap is SDK-only.

Expected behaviour

new ExclusiveJoin("excl_join_ref")
    .joinOn("branch_a_task", "branch_b_task")
    .defaultExclusiveJoinTask("branch_b_task")

Proposed fix

public class ExclusiveJoin extends Task<ExclusiveJoin> {
    private String[] joinOn;
    private List<String> defaultExclusiveJoinTask = new ArrayList<>();

    public ExclusiveJoin(String taskReferenceName, String... joinOn) {
        super(taskReferenceName, TaskType.EXCLUSIVE_JOIN);
        this.joinOn = joinOn;
    }

    public ExclusiveJoin defaultExclusiveJoinTask(String... tasks) {
        this.defaultExclusiveJoinTask = Arrays.asList(tasks);
        return this;
    }

    @Override
    protected void updateWorkflowTask(WorkflowTask task) {
        task.setJoinOn(Arrays.asList(joinOn));
        task.setDefaultExclusiveJoinTask(defaultExclusiveJoinTask);
    }
}

Related

Discovered during systematic SDK audit against Conductor OSS 3.32.0-rc.9.
Same gap exists in the Python SDK (conductor-oss/python-sdk#429).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions