From e8366c6bd34299d33f3bed28ea1f7e38457b4229 Mon Sep 17 00:00:00 2001 From: Deepak Dixit Date: Mon, 4 May 2026 11:02:31 +0530 Subject: [PATCH 1/3] Improve FTL data resource rendering restrictions Allow FTL template rendering for non-ElectronicText data resources. Previously, all FTL data templates were blocked. This change restores FTL rendering for supported data resources and blocks rendering only when: - dataTemplateTypeId is FTL - dataResourceTypeId is ELECTRONIC_TEXT This prevents FreeMarker rendering for ElectronicText data resources while preserving existing FTL rendering support for other data resource types. --- .../ofbiz/content/data/DataResourceWorker.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java b/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java index bf71ab88ace..65a2785a9a5 100644 --- a/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java +++ b/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java @@ -39,6 +39,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; +import java.sql.Timestamp; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedList; @@ -65,7 +66,9 @@ import org.apache.ofbiz.base.util.Debug; import org.apache.ofbiz.base.util.FileUtil; import org.apache.ofbiz.base.util.GeneralException; +import org.apache.ofbiz.base.util.StringUtil; import org.apache.ofbiz.base.util.UtilCodec; +import org.apache.ofbiz.base.util.UtilDateTime; import org.apache.ofbiz.base.util.UtilGenerics; import org.apache.ofbiz.base.util.UtilHttp; import org.apache.ofbiz.base.util.UtilIO; @@ -883,8 +886,6 @@ public static void renderDataResourceAsText(LocalDispatcher dispatcher, Delegato // FTL template if ("FTL".equals(dataTemplateTypeId)) { - throw new GeneralException("Error rendering template: FTL template type is no longer supported for data resources."); - /* try { // get the template data for rendering String templateText = getDataResourceText(dataResource, targetMimeTypeId, locale, templateContext, delegator, cache); @@ -894,7 +895,7 @@ public static void renderDataResourceAsText(LocalDispatcher dispatcher, Delegato StringBuffer newTemplateText = new StringBuffer(templateText); String webAnalyticsCode = ""; @@ -909,10 +910,12 @@ public static void renderDataResourceAsText(LocalDispatcher dispatcher, Delegato Timestamp lastUpdatedStamp = UtilDateTime.nowTimestamp(); //If dataResource is type of ELECTRONIC_TEXT then only use the lastUpdatedStamp of electronicText entity for freemarker caching if ("ELECTRONIC_TEXT".equals(dataResource.getString("dataResourceTypeId"))) { - GenericValue electronicText = dataResource.getRelatedOne("ElectronicText", true); + /*GenericValue electronicText = dataResource.getRelatedOne("ElectronicText", true); if (electronicText != null) { lastUpdatedStamp = electronicText.getTimestamp("lastUpdatedStamp"); - } + }*/ + throw new GeneralException( + "Error rendering template: FreeMarker templates are no longer supported for ElectronicText data resources."); } FreeMarkerWorker.renderTemplateFromString("delegator:" + delegator.getDelegatorName() + ":DataResource:" @@ -920,8 +923,6 @@ public static void renderDataResourceAsText(LocalDispatcher dispatcher, Delegato } catch (TemplateException e) { throw new GeneralException("Error rendering FTL template", e); } - */ - } else if ("XSLT".equals(dataTemplateTypeId)) { File targetFileLocation = new File(System.getProperty("ofbiz.home") + "/runtime/tempfiles/docbook.css"); String defaultVisualThemeId = EntityUtilProperties.getPropertyValue("general", "VISUAL_THEME", delegator); From 0dd777a187c69a9ae0069a95a69b47083661c770 Mon Sep 17 00:00:00 2001 From: Deepak Dixit Date: Mon, 4 May 2026 11:19:17 +0530 Subject: [PATCH 2/3] FreeMarker templates should not be rendered from text-based or link-based data resources to avoid misuse and inconsistent behavior. --- .../ofbiz/content/data/DataResourceWorker.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java b/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java index 65a2785a9a5..0da9f266412 100644 --- a/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java +++ b/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java @@ -905,21 +905,15 @@ public static void renderDataResourceAsText(LocalDispatcher dispatcher, Delegato // render the FTL template boolean useTemplateCache = cache && !UtilProperties.getPropertyAsBoolean("content", "disable.ftl.template.cache", false); - //Do not use dataResource.lastUpdatedStamp for dataResource template caching as it may use ftl file or electronicText - // If dataResource using ftl file use nowTimestamp to avoid freemarker caching - Timestamp lastUpdatedStamp = UtilDateTime.nowTimestamp(); - //If dataResource is type of ELECTRONIC_TEXT then only use the lastUpdatedStamp of electronicText entity for freemarker caching - if ("ELECTRONIC_TEXT".equals(dataResource.getString("dataResourceTypeId"))) { - /*GenericValue electronicText = dataResource.getRelatedOne("ElectronicText", true); - if (electronicText != null) { - lastUpdatedStamp = electronicText.getTimestamp("lastUpdatedStamp"); - }*/ - throw new GeneralException( - "Error rendering template: FreeMarker templates are no longer supported for ElectronicText data resources."); + if ("ELECTRONIC_TEXT".equals(dataResource.getString("dataResourceTypeId")) + || "SHORT_TEXT".equalsIgnoreCase(dataResource.getString("dataResourceTypeId")) + || "LINK".equalsIgnoreCase(dataResource.getString("dataResourceTypeId"))) { + throw new GeneralException("Error rendering template: FreeMarker templates are no longer supported for " + + dataResource.getString("dataResourceTypeId") + " data resources."); } FreeMarkerWorker.renderTemplateFromString("delegator:" + delegator.getDelegatorName() + ":DataResource:" - + dataResourceId, templateText, templateContext, out, lastUpdatedStamp.getTime(), useTemplateCache); + + dataResourceId, templateText, templateContext, out, UtilDateTime.nowTimestamp().getTime(), useTemplateCache); } catch (TemplateException e) { throw new GeneralException("Error rendering FTL template", e); } From f9b6d3e849d1d174c74075821ddb9e7288b0132a Mon Sep 17 00:00:00 2001 From: Deepak Dixit Date: Mon, 4 May 2026 11:20:09 +0530 Subject: [PATCH 3/3] Removed unused import --- .../java/org/apache/ofbiz/content/data/DataResourceWorker.java | 1 - 1 file changed, 1 deletion(-) diff --git a/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java b/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java index 0da9f266412..3331e95c12e 100644 --- a/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java +++ b/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java @@ -39,7 +39,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; -import java.sql.Timestamp; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedList;