diff --git a/bom/application/pom.xml b/bom/application/pom.xml
index eaeeda916d95..572ee6e779bf 100644
--- a/bom/application/pom.xml
+++ b/bom/application/pom.xml
@@ -17,15 +17,16 @@
1.12.488
3.10.1
2.2.34
- 1.14.15
+ 1.18.1
1.17
1.70
4.0.0
4.33.0
2.17.2
- 2.28
- 22.3.3
+ 2.47
+ 25.0.1
1.13.10
+
@@ -1592,12 +1593,12 @@
org.mockito
mockito-core
- 5.12.0
+ 5.20.0
org.mockito
mockito-junit-jupiter
- 5.12.0
+ 5.20.0
test
@@ -1634,21 +1635,23 @@
- org.graalvm.sdk
- graal-sdk
- ${graalvm.version}
+ org.graalvm.polyglot
+ polyglot
+ ${graalvm.polyglot.version}
- org.graalvm.js
+ org.graalvm.polyglot
+
js
- ${graalvm.version}
+ ${graalvm.polyglot.version}
+ pom
org.graalvm.js
js-scriptengine
- ${graalvm.version}
-
+ ${graalvm.polyglot.version}
+
com.knuddels
diff --git a/dotCMS/pom.xml b/dotCMS/pom.xml
index 2c1acbf8eee4..b52b96fe8132 100644
--- a/dotCMS/pom.xml
+++ b/dotCMS/pom.xml
@@ -1376,18 +1376,19 @@
- org.graalvm.sdk
- graal-sdk
+ org.graalvm.polyglot
+ polyglot
- org.graalvm.js
+ org.graalvm.polyglot
+
js
+ pom
org.graalvm.js
js-scriptengine
-
com.knuddels
@@ -1916,6 +1917,40 @@
org.apache.maven.plugins
maven-compiler-plugin
+
+
+
+ process-annotations
+ generate-sources
+
+ compile
+
+
+
+
+ ${basedir}/src/main/java
+ ${basedir}/src/enterprise/java
+
+
+ only
+
+ org.immutables.processor.ProxyProcessor
+
+
+
+
+
+ default-compile
+ compile
+
+ compile
+
+
+
+ none
+
+
+
org.codehaus.mojo
@@ -1930,6 +1965,8 @@
${basedir}/src/enterprise/java
+
+ ${project.build.directory}/generated-sources/annotations
diff --git a/dotCMS/src/main/java/com/dotcms/rendering/js/JsEngine.java b/dotCMS/src/main/java/com/dotcms/rendering/js/JsEngine.java
index 985efdbb27f3..9b93b7987050 100644
--- a/dotCMS/src/main/java/com/dotcms/rendering/js/JsEngine.java
+++ b/dotCMS/src/main/java/com/dotcms/rendering/js/JsEngine.java
@@ -1,8 +1,11 @@
package com.dotcms.rendering.js;
+import static com.dotmarketing.util.VelocityUtil.getBasicContext;
+
import com.dotcms.api.vtl.model.DotJSON;
import com.dotcms.rendering.JsEngineException;
import com.dotcms.rendering.engine.ScriptEngine;
+import com.dotcms.rendering.js.JsContext.Builder;
import com.dotcms.rendering.js.proxy.JsProxyFactory;
import com.dotcms.rendering.js.proxy.JsRequest;
import com.dotcms.rendering.js.proxy.JsResponse;
@@ -22,28 +25,11 @@
import com.dotcms.util.ReflectionUtils;
import com.dotmarketing.business.APILocator;
import com.dotmarketing.business.CacheLocator;
-import com.dotmarketing.exception.DotRuntimeException;
import com.dotmarketing.util.Config;
import com.dotmarketing.util.Logger;
import com.liferay.util.FileUtil;
-import com.oracle.truffle.api.object.JsDynamicObjectUtils;
-import com.oracle.truffle.js.lang.JavaScriptLanguage;
-import com.oracle.truffle.js.runtime.GraalJSException;
-import com.oracle.truffle.js.runtime.builtins.JSErrorObject;
-import com.oracle.truffle.js.runtime.builtins.JSPromise;
-import com.oracle.truffle.js.runtime.builtins.JSPromiseObject;
import io.vavr.Lazy;
import io.vavr.control.Try;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.velocity.tools.view.context.ChainedContext;
-import org.apache.velocity.tools.view.context.ViewContext;
-import org.graalvm.polyglot.Context;
-import org.graalvm.polyglot.HostAccess;
-import org.graalvm.polyglot.Source;
-import org.graalvm.polyglot.Value;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.Reader;
@@ -55,10 +41,15 @@
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import static com.dotmarketing.util.VelocityUtil.getBasicContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.velocity.tools.view.context.ChainedContext;
+import org.apache.velocity.tools.view.context.ViewContext;
+import org.graalvm.polyglot.Context;
+import org.graalvm.polyglot.HostAccess;
+import org.graalvm.polyglot.Source;
+import org.graalvm.polyglot.Value;
/**
* Js script engine implementation
@@ -66,15 +57,17 @@
*/
public class JsEngine implements ScriptEngine {
- private static final String ENGINE_JS = JavaScriptLanguage.ID;
+
public static final String DOT_JSON = "dotJSON";
public static final String WEB_INF = "WEB-INF";
+ private static final String JS_ENGINE = "js";
private final JsFileSystem jsFileSystem = new JsFileSystem();
private final JsDotLogger jsDotLogger = new JsDotLogger();
private final Map> jsRequestViewToolMap = new ConcurrentHashMap<>();
private final Map jsAplicationViewToolMap = new ConcurrentHashMap<>();
- private final Lazy allowAllHostAccess = Lazy.of(()-> Config.getBooleanProperty("ALLOW_ALL_HOST_ACCESS", false));
+ private final Lazy allowAllHostAccess = Lazy.of(
+ () -> Config.getBooleanProperty("ALLOW_ALL_HOST_ACCESS_JSENGINE", false));
public JsEngine () {
try {
@@ -133,7 +126,7 @@ public void removeJsViewTool(final Class jsViewTool) {
private Context buildContext () {
final Context.Builder builder =
- Context.newBuilder(ENGINE_JS)
+ Context.newBuilder(JS_ENGINE)
.allowIO(true)
.allowExperimentalOptions(true)
.option("js.esm-eval-returns-exports", "true")
@@ -160,9 +153,9 @@ public Object eval(final HttpServletRequest request,
try (Context context = buildContext()) {
final Object fileName = contextParams.getOrDefault("dot:jsfilename", "sample.js");
- final Source userSource = Source.newBuilder(ENGINE_JS, scriptReader, fileName.toString()).build();
+ final Source userSource = Source.newBuilder(JS_ENGINE, scriptReader, fileName.toString()).build();
final List dotSources = getDotSources();
- final Value bindings = context.getBindings(ENGINE_JS);
+ final Value bindings = context.getBindings(JS_ENGINE);
contextParams.entrySet().forEach(entry -> bindings.putMember(entry.getKey(), entry.getValue()));
this.addTools(request, response, bindings);
@@ -220,55 +213,21 @@ private Object asValue (final Value eval, final DotJSON dotJSON) {
private void checkRejected(final Value eval) {
- try {
- final JSPromiseObject promise = eval.as(JSPromiseObject.class);
- if (promise.getPromiseState() == JSPromise.REJECTED) {
-
- final Object[] stackTraceArray = JsDynamicObjectUtils.getObjectArray(promise);
- final String strackTrace = stackTraceToString(stackTraceArray);
- throw new DotRuntimeException(Map.of(
- "message", "Promise rejected",
- "rootCause", eval.toString(),
- "stackTrace", strackTrace).toString());
- }
- } catch (ClassCastException e) {
- Logger.error(this, e.getMessage());
- }
}
private String stackTraceToString (final Object[] stackTraceArray) {
- final List stackTraceList = new ArrayList<>();
- for (final Object stackTrace: stackTraceArray) {
-
- if (stackTrace instanceof JSErrorObject) {
-
- final GraalJSException graalJSException = JSErrorObject.class.cast(stackTrace).getException();
-
- final List list = Stream.of(graalJSException.getJSStackTrace()).map(this::jsStrackTraceToString).collect(Collectors.toList());
- stackTraceList.add(Map.of("message", graalJSException.getMessage(),"jsstackTrace",list).toString());
- } else {
-
- stackTraceList.add(stackTrace.toString());
- }
+ StringBuilder sb = new StringBuilder();
+ for (final Object stackTrace : stackTraceArray) {
+ sb.append(stackTrace + "\n");
}
- return stackTraceList.toString();
- }
-
- private String jsStrackTraceToString(final GraalJSException.JSStackTraceElement element) {
- return null == element.getClassName()?
- "UnknownClass":
- element.getClassName() + "." + element.getFunctionName().toString() + getJsStrackTraceFileLineNumber(element);
+ return sb.toString();
}
- private static String getJsStrackTraceFileLineNumber(final GraalJSException.JSStackTraceElement element) {
- return "(" + element.getFileName() != null && element.getLineNumber() >= 0 ?
- element.getFileName() + ":" + element.getLineNumber() + ")" :
- (element.getFileName() != null ? "" + element.getFileName() + ")" : "Unknown Source)");
- }
+
private List getDotSources() throws IOException {
@@ -380,7 +339,8 @@ public static Source toSource (final String absolutePath, final File file) {
final StringReader stringReader = new StringReader(sourceContent);
source = Try.of(() ->
- Source.newBuilder(ENGINE_JS, stringReader, absolutePath).build()).getOrElseThrow(JsEngineException::new);
+ Source.newBuilder(JS_ENGINE, stringReader, absolutePath).build())
+ .getOrElseThrow(JsEngineException::new);
}
return source;
@@ -401,7 +361,7 @@ public static Source toModuleSource (final String absolutePath, final String mod
final StringReader stringReader = new StringReader(sourceContent);
source = Try.of(() ->
- Source.newBuilder(ENGINE_JS, stringReader, modulePath)
+ Source.newBuilder(JS_ENGINE, stringReader, modulePath)
.mimeType("application/javascript+module")
.build()).getOrElseThrow(JsEngineException::new);
}
@@ -414,7 +374,8 @@ private Object[] buildArgs(final JsRequest request,
final Object[] objects) {
final Object [] defaultArgsArray = new Object[]{
- JsProxyFactory.createProxy(new JsContext.Builder().request(request).response(response).logger(jsDotLogger).build()) };
+ JsProxyFactory.createProxy(
+ new Builder().request(request).response(response).logger(jsDotLogger).build())};
return null != objects && objects.length > 0?
CollectionsUtils.concat(defaultArgsArray, objects): defaultArgsArray;
diff --git a/dotCMS/src/main/java/com/oracle/truffle/api/object/JsDynamicObjectUtils.java b/dotCMS/src/main/java/com/oracle/truffle/api/object/JsDynamicObjectUtils.java
deleted file mode 100644
index 40330f24afb2..000000000000
--- a/dotCMS/src/main/java/com/oracle/truffle/api/object/JsDynamicObjectUtils.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.oracle.truffle.api.object;
-
-/**
- * This class is mostly to access to package sealed methods on the {@link DynamicObject}
- * @author jsanca
- */
-public class JsDynamicObjectUtils {
- private JsDynamicObjectUtils() {
- }
-
- public static final Object[] getObjectArray(final DynamicObject object) {
- return object.getObjectStore();
- }
-}
diff --git a/dotcms-integration/pom.xml b/dotcms-integration/pom.xml
index a29ba448ea36..fb51f21b027d 100644
--- a/dotcms-integration/pom.xml
+++ b/dotcms-integration/pom.xml
@@ -309,6 +309,44 @@
org.apache.maven.plugins
maven-compiler-plugin
${version.compiler.plugin}
+
+
+
+ process-test-annotations
+ generate-test-sources
+
+ testCompile
+
+
+
+ only
+
+ org.immutables.processor.ProxyProcessor
+
+
+
+
+
+ default-testCompile
+ test-compile
+
+ testCompile
+
+
+
+ none
+
+
+
+
+
+
+ org.immutables
+ value
+ ${immutables.version}
+
+
+
maven-resources-plugin
diff --git a/dotcms-integration/src/test/java/com/dotcms/rest/api/v1/system/permission/PermissionResourceIntegrationTest.java b/dotcms-integration/src/test/java/com/dotcms/rest/api/v1/system/permission/PermissionResourceIntegrationTest.java
index bf8a91cfbea9..34300f4ac650 100644
--- a/dotcms-integration/src/test/java/com/dotcms/rest/api/v1/system/permission/PermissionResourceIntegrationTest.java
+++ b/dotcms-integration/src/test/java/com/dotcms/rest/api/v1/system/permission/PermissionResourceIntegrationTest.java
@@ -33,7 +33,7 @@
import com.liferay.portal.util.WebKeys;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.glassfish.jersey.internal.util.Base64;
+import com.liferay.util.Base64;
import static org.junit.Assert.*;
import java.util.HashMap;
import java.util.HashSet;
diff --git a/independent-projects/core-plugins/tika-api/pom.xml b/independent-projects/core-plugins/tika-api/pom.xml
index 5933d3b184bd..cd38d8d71027 100644
--- a/independent-projects/core-plugins/tika-api/pom.xml
+++ b/independent-projects/core-plugins/tika-api/pom.xml
@@ -13,6 +13,9 @@
false
+ 11
+ 11
+ 11
diff --git a/independent-projects/core-plugins/tika-plugin/pom.xml b/independent-projects/core-plugins/tika-plugin/pom.xml
index 13a0d9fa661e..e310e6df5924 100644
--- a/independent-projects/core-plugins/tika-plugin/pom.xml
+++ b/independent-projects/core-plugins/tika-plugin/pom.xml
@@ -15,6 +15,9 @@
7.0.0
2.8.0
true
+ 11
+ 11
+ 11
diff --git a/parent/pom.xml b/parent/pom.xml
index 9f08f5b69498..1ee696e445d3 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -58,6 +58,9 @@
--add-opens java.base/sun.nio.cs=ALL-UNNAMED
--add-opens java.base/sun.util.calendar=ALL-UNNAMED
--add-opens java.base/sun.util.locale=ALL-UNNAMED
+ --add-opens java.base/jdk.internal.loader=ALL-UNNAMED
+ --add-opens java.base/jdk.internal.misc=ALL-UNNAMED
+ --add-opens java.base/jdk.internal.module=ALL-UNNAMED
false
@@ -214,7 +217,7 @@
${maven.multiModuleProjectDirectory}/environments
${environment.properties.folder}/environment.properties
true
- 0.14.2
+ 0.14.0-beta.3
true
@@ -725,6 +728,7 @@
-->
@{argLine} -Xmx1024m
${java.module.args}
+ -Dnet.bytebuddy.experimental=true
false
@@ -876,6 +880,7 @@
true
@{argLine} -Xmx1024m
${java.module.args}
+ -Dnet.bytebuddy.experimental=true
diff --git a/tools/dotcms-cli/api-data-model/pom.xml b/tools/dotcms-cli/api-data-model/pom.xml
index 5420613db1b6..53ae6be18d8d 100644
--- a/tools/dotcms-cli/api-data-model/pom.xml
+++ b/tools/dotcms-cli/api-data-model/pom.xml
@@ -161,6 +161,35 @@
true
+
+
+
+ process-annotations
+ generate-sources
+
+ compile
+
+
+
+ only
+
+ org.immutables.processor.ProxyProcessor
+
+
+
+
+
+ default-compile
+ compile
+
+ compile
+
+
+
+ none
+
+
+
org.apache.maven.plugins
diff --git a/tools/dotcms-cli/cli/pom.xml b/tools/dotcms-cli/cli/pom.xml
index f5942707a4d1..a0ab5efbf63d 100644
--- a/tools/dotcms-cli/cli/pom.xml
+++ b/tools/dotcms-cli/cli/pom.xml
@@ -166,6 +166,35 @@
true
+
+
+
+ process-annotations
+ generate-sources
+
+ compile
+
+
+
+ only
+
+ org.immutables.processor.ProxyProcessor
+
+
+
+
+
+ default-compile
+ compile
+
+ compile
+
+
+
+ none
+
+
+
org.apache.maven.plugins
diff --git a/tools/dotcms-cli/pom.xml b/tools/dotcms-cli/pom.xml
index f25cd061b650..a997e75c10a8 100644
--- a/tools/dotcms-cli/pom.xml
+++ b/tools/dotcms-cli/pom.xml
@@ -24,6 +24,10 @@
3.6.0
1.8.0
3.0.2
+ 11
+ 11
+ 11
+