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 +