in src/main/java/org/apache/freemarker/onlinetester/resources/ExecuteApiResource.java [87:145]
public Response formResult(
ExecuteRequest req) {
ExecuteResponse resp = new ExecuteResponse();
if (StringUtils.isBlank(req.getTemplate()) && StringUtils.isBlank(req.getDataModel())) {
return Response.status(400).entity("Empty Template & data").build();
}
List<ExecuteResponseProblem> problems = new ArrayList<>();
ExecuteTemplateArgs serviceArgs = new ExecuteTemplateArgs()
.templateSourceCode(lengthCheckAndGetTemplate(req, problems))
.dataModel(parseDataModel(req, problems))
.outputFormat(parseChoiceField(
ExecuteRequest.Field.OUTPUT_FORMAT, req.getOutputFormat(),
AllowedSettingValues.DEFAULT_OUTPUT_FORMAT, AllowedSettingValues.OUTPUT_FORMAT_MAP,
problems))
.locale(parseChoiceField(
ExecuteRequest.Field.LOCALE, req.getLocale(),
AllowedSettingValues.DEFAULT_LOCALE, AllowedSettingValues.LOCALE_MAP,
problems))
.timeZone(parseChoiceField(
ExecuteRequest.Field.TIME_ZONE, req.getTimeZone(),
AllowedSettingValues.DEFAULT_TIME_ZONE, AllowedSettingValues.TIME_ZONE_MAP,
problems))
.tagSyntax(parseChoiceField(
ExecuteRequest.Field.TAG_SYNTAX, req.getTagSyntax(),
AllowedSettingValues.DEFAULT_TAG_SYNTAX, AllowedSettingValues.TAG_SYNTAX_MAP,
problems))
.interpolationSyntax(parseChoiceField(
ExecuteRequest.Field.INTERPOLATION_SYNTAX, req.getInterpolationSyntax(),
AllowedSettingValues.DEFAULT_INTERPOLATION_SYNTAX, AllowedSettingValues.INTERPOLATION_SYNTAX_MAP,
problems));
if (!problems.isEmpty()) {
resp.setProblems(problems);
return buildFreeMarkerResponse(resp);
}
FreeMarkerServiceResponse serviceResponse;
try {
serviceResponse = freeMarkerService.executeTemplate(serviceArgs);
} catch (RejectedExecutionException e) {
String error = SERVICE_TIMEOUT_ERROR_MESSAGE;
return Response.serverError().entity(new ErrorResponse(ErrorCode.FREEMARKER_SERVICE_TIMEOUT, error)).build();
}
if (!serviceResponse.isSuccesful()){
Throwable failureReason = serviceResponse.getFailureReason();
String error = ExceptionUtils.getMessageWithCauses(failureReason);
problems.add(new ExecuteResponseProblem(ExecuteRequest.Field.TEMPLATE, error));
resp.setProblems(problems);
return buildFreeMarkerResponse(resp);
}
String result = serviceResponse.getTemplateOutput();
resp.setResult(result);
resp.setTruncatedResult(serviceResponse.isTemplateOutputTruncated());
return buildFreeMarkerResponse(resp);
}