Java клиент использует Asyn c. Дочерний рабочий процесс вызова функции не может скомпилироваться, если дочерний метод рабочего процесса вызывает исключение - PullRequest
0 голосов
/ 19 июня 2020

Проще говоря Unhandled exception: java.lang.Exception. Попробуй поймать не помогает. Разрешено ли @WorkflowMethod рабочего процесса вообще вызывать какое-либо исключение?

enter image description here Код дочернего рабочего процесса:

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) {

            }
        }
    }
}

Спасибо

1 Ответ

0 голосов
/ 19 июня 2020

Асинхронный код и проверенные исключения не работают вместе. Кроме того, поскольку дочерний рабочий процесс и вызовы действий являются технически удаленными вызовами методов, исключения, которые генерируются в вызывающей стороне, обычно не совпадают с исходными исключениями.

Таким образом, принятое решение - никогда не использовать проверенные исключения в методе действия и рабочего процесса подписи.

Чтобы избежать ненужного переноса, вы можете использовать методы Activity.wrap и Workflow.wrap для повторной генерации отмеченного исключения. Он собирается заключить его во внутреннее исключение CheckedExceptionWrapper, которое будет автоматически развернуто у вызывающей стороны.

try {
    return someCall();
} catch (Exception e) {
    throw Activity.wrap(e);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...