private static InterceptorResult invokePreProcessingInterceptors(List<ExecutionPreProcessor> preExecutionInterceptorList, List<ExecutionPreProcessor> unexecutedPreExecutionInterceptorList, ExecutionRequirement phase, ExecutionContext ctx, OperationKey key, Object[] args) {
InterceptorResult result = CONTINUE;
List<ExecutionPreProcessor> toIterateOver = new ArrayList<>(preExecutionInterceptorList);
for (ExecutionPreProcessor pre : toIterateOver) {
ExecutionRequirement req = pre.getExecutionRequirement();
if (req == ExecutionRequirement.EVERY_OPPORTUNITY || req == phase || (req == ExecutionRequirement.EXACTLY_ONCE && unexecutedPreExecutionInterceptorList.contains(pre))) {
try {
result = pre.invoke(ctx, key, args);
unexecutedPreExecutionInterceptorList.remove(pre);
if (result == null || result.getState() == null) {