0

简单地说Unhandled exception: java.lang.Exception。尝试捕捉没有帮助。工作流的@WorkflowMethod 是否允许抛出任何异常?

在此处输入图像描述 子工作流代码:

public class ChildWorkflowWorker {
    public interface ChildWorkflow {
        @WorkflowMethod
        String run(String s) throws Exception;
    }

    public static class ChildWorkflowImpl implements ChildWorkflow {

        @Override
        public String run(String s) throws Exception {
            return "";
        }
    }
}

父工作流代码

public class ParentWorkflowWorker {
    public interface ParentWorkflow {
        @WorkflowMethod
        void run();
    }

    public static class ParentWorkflowImpl implements ParentWorkflow {

        @Override
        public void run() {
            ChildWorkflowWorker.ChildWorkflow childWorkflow = Workflow.newChildWorkflowStub(ChildWorkflowWorker.ChildWorkflow.class);
            try {
                Promise<String> childPromise = Async.function(childWorkflow::run, "");
                childPromise.get();
            }
            catch (Exception e) {

            }
        }
    }
}

谢谢

4

1 回答 1

0

异步代码和检查异常不能很好地结合在一起。此外,由于子工作流和活动调用在技术上是远程方法调用,调用者中抛出的异常通常不是相同的原始异常。

因此采用的解决方案是永远不要在活动和工作流方法签名中使用已检查的异常。

为避免不必要的包装,您可以使用Activity.wrapWorkflow.wrap方法重新抛出已检查的异常。它将把它包装在一个内部 CheckedExceptionWrapper 异常中,该异常将在调用者处自动解包。

try {
    return someCall();
} catch (Exception e) {
    throw Activity.wrap(e);
}
于 2020-06-19T15:30:34.600 回答