diff --git a/horreum-backend/src/main/java/io/hyperfoil/tools/horreum/svc/Util.java b/horreum-backend/src/main/java/io/hyperfoil/tools/horreum/svc/Util.java index 556e7aa90..90a2f2482 100644 --- a/horreum-backend/src/main/java/io/hyperfoil/tools/horreum/svc/Util.java +++ b/horreum-backend/src/main/java/io/hyperfoil/tools/horreum/svc/Util.java @@ -595,14 +595,15 @@ static void evaluateWithCombinationFunction(List inputData, ExecutionExceptionConsumer onJsEvaluationException, Consumer jsOutputConsumer) { ByteArrayOutputStream out = new ByteArrayOutputStream(); - try (org.graalvm.polyglot.Context context = createContext(out)) { - context.enter(); - try { - setupContext(context); - for (int i = 0; i < inputData.size(); i++) { - T element = inputData.get(i); - String jsFuncBody = jsCombinationFunction.apply(element); - if (jsFuncBody != null && !jsFuncBody.isBlank()) { + + for (int i = 0; i < inputData.size(); i++) { + T element = inputData.get(i); + String jsFuncBody = jsCombinationFunction.apply(element); + if (jsFuncBody != null && !jsFuncBody.isBlank()) { + try (org.graalvm.polyglot.Context context = createContext(out)) { + context.enter(); + try { + setupContext(context); StringBuilder jsCode = new StringBuilder("const __obj").append(i).append(" = ").append(evaluationInputObject.apply(element)).append(";\n"); jsCode.append("const __func").append(i).append(" = ").append(jsFuncBody).append(";\n"); jsCode.append("__func").append(i).append("(__obj").append(i).append(")"); @@ -613,19 +614,19 @@ static void evaluateWithCombinationFunction(List inputData, } catch (PolyglotException e) { onJsEvaluationException.accept(element, e, jsCode.toString()); } - } else { - nonFuncResultConsumer.accept(element); + } catch (IOException e) { + onJsEvaluationException.accept(null, e, ""); + } finally { + context.leave(); } } - } catch (IOException e) { - onJsEvaluationException.accept(null, e, ""); - } finally { - if (out.size() > 0) { - jsOutputConsumer.accept(out.toString(StandardCharsets.UTF_8)); - } - context.leave(); + } else { + nonFuncResultConsumer.accept(element); } } + if (out.size() > 0) { + jsOutputConsumer.accept(out.toString(StandardCharsets.UTF_8)); + } } private static Context createContext(OutputStream out){