You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2023/02/09 10:15:08 UTC

[camel-quarkus] 01/01: Ref #4523/#4443: Get rid of jOOR workarounds used for native mode

This is an automated email from the ASF dual-hosted git repository.

nfilotto pushed a commit to branch 4523/fix-joor-it
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit 22737110d70e7f6994d8257655d5be3aec68cf9d
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Thu Feb 9 11:14:43 2023 +0100

    Ref #4523/#4443: Get rid of jOOR workarounds used for native mode
---
 .../java/joor/deployment/JavaJoorDslProcessor.java | 59 +++++-----------
 .../dsl/java/joor/runtime/JavaJoorDslRecorder.java |  4 +-
 .../graal/SubstituteJavaRoutesBuilderLoader.java   | 36 ++++++++++
 .../component/joor/deployment/JoorProcessor.java   | 78 +++++++--------------
 .../joor/runtime/JoorExpressionLanguage.java       | 80 ----------------------
 .../joor/runtime/JoorExpressionRecorder.java       | 20 ++----
 integration-tests/java-joor-dsl/pom.xml            |  4 --
 7 files changed, 87 insertions(+), 194 deletions(-)

diff --git a/extensions/java-joor-dsl/deployment/src/main/java/org/apache/camel/quarkus/dsl/java/joor/deployment/JavaJoorDslProcessor.java b/extensions/java-joor-dsl/deployment/src/main/java/org/apache/camel/quarkus/dsl/java/joor/deployment/JavaJoorDslProcessor.java
index c27528d110..9fc0c54154 100644
--- a/extensions/java-joor-dsl/deployment/src/main/java/org/apache/camel/quarkus/dsl/java/joor/deployment/JavaJoorDslProcessor.java
+++ b/extensions/java-joor-dsl/deployment/src/main/java/org/apache/camel/quarkus/dsl/java/joor/deployment/JavaJoorDslProcessor.java
@@ -23,8 +23,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 import io.quarkus.deployment.annotations.BuildProducer;
@@ -41,13 +39,12 @@ import io.quarkus.paths.PathCollection;
 import io.quarkus.runtime.RuntimeValue;
 import org.apache.camel.CamelContext;
 import org.apache.camel.dsl.java.joor.CompilationUnit;
+import org.apache.camel.dsl.java.joor.Helper;
 import org.apache.camel.dsl.java.joor.MultiCompile;
 import org.apache.camel.quarkus.core.deployment.main.CamelMainHelper;
 import org.apache.camel.quarkus.core.deployment.spi.CamelContextBuildItem;
 import org.apache.camel.quarkus.dsl.java.joor.runtime.JavaJoorDslRecorder;
 import org.apache.camel.spi.Resource;
-import org.apache.camel.support.ResourceHelper;
-import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -57,9 +54,6 @@ public class JavaJoorDslProcessor {
     private static final Logger LOG = LoggerFactory.getLogger(JavaJoorDslProcessor.class);
     private static final String FEATURE = "camel-java-joor-dsl";
 
-    private static final Pattern PACKAGE_PATTERN = Pattern.compile(
-            "^\\s*package\\s+([a-zA-Z][\\.\\w]*)\\s*;.*$", Pattern.MULTILINE);
-
     @BuildStep
     FeatureBuildItem feature() {
         return new FeatureBuildItem(FEATURE);
@@ -78,7 +72,7 @@ public class JavaJoorDslProcessor {
                     }
                     try (InputStream is = resource.getInputStream()) {
                         String content = IOHelper.loadText(is);
-                        String name = determineName(resource, content);
+                        String name = Helper.determineName(resource, content);
                         unit.addClass(name, content);
                         nameToResource.put(name, resource);
                     } catch (IOException e) {
@@ -88,26 +82,20 @@ public class JavaJoorDslProcessor {
         if (nameToResource.isEmpty()) {
             return;
         }
-        // Temporary workaround until being able to provide the classpath somehow to the method MultiCompile.compileUnit
-        // https://issues.apache.org/jira/browse/CAMEL-18860
-        String previousCP = System.getProperty("java.class.path");
-        try {
-            String cp = curateOutcomeBuildItem.getApplicationModel().getDependencies().stream()
-                    .map(ResolvedDependency::getResolvedPaths)
-                    .flatMap(PathCollection::stream)
-                    .map(Objects::toString)
-                    .collect(Collectors.joining(System.getProperty("path.separator")));
-            System.setProperty("java.class.path", cp);
-            LOG.debug("Compiling unit: {}", unit);
-            CompilationUnit.Result result = MultiCompile.compileUnit(unit);
-            for (String className : result.getClassNames()) {
-                generatedClass
-                        .produce(new JavaJoorGeneratedClassBuildItem(className, nameToResource.get(className).getLocation(),
-                                result.getByteCode(className)));
-            }
-        } finally {
-            // Restore the CP
-            System.setProperty("java.class.path", previousCP);
+        LOG.debug("Compiling unit: {}", unit);
+        CompilationUnit.Result result = MultiCompile.compileUnit(
+                unit,
+                List.of(
+                        "-classpath",
+                        curateOutcomeBuildItem.getApplicationModel().getDependencies().stream()
+                                .map(ResolvedDependency::getResolvedPaths)
+                                .flatMap(PathCollection::stream)
+                                .map(Objects::toString)
+                                .collect(Collectors.joining(System.getProperty("path.separator")))));
+        for (String className : result.getClassNames()) {
+            generatedClass
+                    .produce(new JavaJoorGeneratedClassBuildItem(className, nameToResource.get(className).getLocation(),
+                            result.getByteCode(className)));
         }
     }
 
@@ -132,19 +120,4 @@ public class JavaJoorDslProcessor {
             recorder.registerRoutesBuilder(camelContext, clazz.getName(), clazz.getLocation());
         }
     }
-
-    private static String determineName(Resource resource, String content) {
-        String loc = resource.getLocation();
-        // strip scheme to compute the name
-        String scheme = ResourceHelper.getScheme(loc);
-        if (scheme != null) {
-            loc = loc.substring(scheme.length());
-        }
-        final String name = FileUtil.onlyName(loc, true);
-        final Matcher matcher = PACKAGE_PATTERN.matcher(content);
-
-        return matcher.find()
-                ? matcher.group(1) + "." + name
-                : name;
-    }
 }
diff --git a/extensions/java-joor-dsl/runtime/src/main/java/org/apache/camel/quarkus/dsl/java/joor/runtime/JavaJoorDslRecorder.java b/extensions/java-joor-dsl/runtime/src/main/java/org/apache/camel/quarkus/dsl/java/joor/runtime/JavaJoorDslRecorder.java
index 4a309eceb4..246627e7d6 100644
--- a/extensions/java-joor-dsl/runtime/src/main/java/org/apache/camel/quarkus/dsl/java/joor/runtime/JavaJoorDslRecorder.java
+++ b/extensions/java-joor-dsl/runtime/src/main/java/org/apache/camel/quarkus/dsl/java/joor/runtime/JavaJoorDslRecorder.java
@@ -45,11 +45,11 @@ public class JavaJoorDslRecorder {
             // create a new instance of the class
             try {
                 Object obj = context.getValue().getInjector().newInstance(clazz);
-                if (obj instanceof RoutesBuilder) {
+                if (obj instanceof RoutesBuilder builder) {
                     // inject context and resource
                     CamelContextAware.trySetCamelContext(obj, context.getValue());
                     ResourceAware.trySetResource(obj, ResourceHelper.fromString(location, ""));
-                    context.getValue().addRoutes((RoutesBuilder) obj);
+                    context.getValue().addRoutes(builder);
                 } else {
                     LOG.warn("Ignoring the class {} as it is not of type RoutesBuilder", className);
                 }
diff --git a/extensions/java-joor-dsl/runtime/src/main/java/org/apache/camel/quarkus/dsl/java/joor/runtime/graal/SubstituteJavaRoutesBuilderLoader.java b/extensions/java-joor-dsl/runtime/src/main/java/org/apache/camel/quarkus/dsl/java/joor/runtime/graal/SubstituteJavaRoutesBuilderLoader.java
new file mode 100644
index 0000000000..9fdc7d75e6
--- /dev/null
+++ b/extensions/java-joor-dsl/runtime/src/main/java/org/apache/camel/quarkus/dsl/java/joor/runtime/graal/SubstituteJavaRoutesBuilderLoader.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.dsl.java.joor.runtime.graal;
+
+import java.util.Collection;
+import java.util.List;
+
+import com.oracle.svm.core.annotate.Substitute;
+import com.oracle.svm.core.annotate.TargetClass;
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.dsl.java.joor.JavaRoutesBuilderLoader;
+import org.apache.camel.spi.Resource;
+
+@TargetClass(JavaRoutesBuilderLoader.class)
+final class SubstituteJavaRoutesBuilderLoader {
+
+    @Substitute
+    protected Collection<RoutesBuilder> doLoadRoutesBuilders(Collection<Resource> resources) throws Exception {
+        // Do nothing as it is already done
+        return List.of();
+    }
+}
diff --git a/extensions/joor/deployment/src/main/java/org/apache/camel/quarkus/component/joor/deployment/JoorProcessor.java b/extensions/joor/deployment/src/main/java/org/apache/camel/quarkus/component/joor/deployment/JoorProcessor.java
index baa8008967..cb8c10df23 100644
--- a/extensions/joor/deployment/src/main/java/org/apache/camel/quarkus/component/joor/deployment/JoorProcessor.java
+++ b/extensions/joor/deployment/src/main/java/org/apache/camel/quarkus/component/joor/deployment/JoorProcessor.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.quarkus.component.joor.deployment;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -44,10 +42,10 @@ import org.apache.camel.dsl.java.joor.MultiCompile;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.language.joor.JoorCompiler;
 import org.apache.camel.language.joor.JoorExpression;
+import org.apache.camel.language.joor.JoorLanguage;
 import org.apache.camel.language.joor.JoorScriptingCompiler;
 import org.apache.camel.quarkus.component.joor.runtime.JoorExpressionCompiler;
 import org.apache.camel.quarkus.component.joor.runtime.JoorExpressionConfig;
-import org.apache.camel.quarkus.component.joor.runtime.JoorExpressionLanguage;
 import org.apache.camel.quarkus.component.joor.runtime.JoorExpressionRecorder;
 import org.apache.camel.quarkus.component.joor.runtime.JoorExpressionScriptingCompiler;
 import org.apache.camel.quarkus.core.deployment.spi.CamelBeanBuildItem;
@@ -60,11 +58,10 @@ import org.apache.camel.quarkus.support.language.runtime.ScriptUID;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.apache.camel.quarkus.component.joor.runtime.JoorExpressionLanguage.PACKAGE_NAME;
-
 class JoorProcessor {
 
     private static final Logger LOG = LoggerFactory.getLogger(JoorProcessor.class);
+    private static final String PACKAGE_NAME = "org.apache.camel.quarkus.component.joor.generated";
     private static final String FEATURE = "camel-joor";
 
     @BuildStep
@@ -90,25 +87,25 @@ class JoorProcessor {
             }
             // Don't close it as it won't be started and some log entries are added on close/stop
             CamelContext ctx = new DefaultCamelContext();
-            try (JoorExpressionLanguage language = new JoorExpressionLanguage()) {
+            try (JoorLanguage language = new JoorLanguage()) {
                 language.setCamelContext(ctx);
                 language.setSingleQuotes(config.singleQuotes);
                 config.configResource.ifPresent(language::setConfigResource);
                 language.setPreCompile(false);
                 language.init();
-                JoorCompiler compiler = language.getJoorCompiler();
+                JoorCompiler compiler = language.getCompiler();
                 for (ExpressionBuildItem expression : joorExpressions) {
                     JoorExpression exp = (JoorExpression) language.createExpression(expression.getExpression(),
                             expression.getProperties());
                     ExpressionUID id = new ExpressionUID(expression.getExpression(), exp.isSingleQuotes());
                     String name = String.format("%s.%s", PACKAGE_NAME, id);
-                    String content = evalCode(compiler, ctx, name, expression.getExpression(), exp.isSingleQuotes());
+                    String content = compiler.evalCode(ctx, name, expression.getExpression(), exp.isSingleQuotes());
                     if (LOG.isDebugEnabled()) {
                         LOG.debug("Compiling expression:\n\n{}\n", content);
                     }
                     producer.produce(new JoorExpressionSourceBuildItem(id, name, content));
                 }
-                JoorScriptingCompiler scriptingCompiler = language.getJoorScriptingCompiler();
+                JoorScriptingCompiler scriptingCompiler = language.getScriptingCompiler();
                 for (ScriptBuildItem script : joorScripts) {
                     ScriptUID id = new ScriptUID(script.getContent(), script.getBindings(), language.isSingleQuotes());
                     String name = String.format("%s.%s", PACKAGE_NAME, id);
@@ -134,29 +131,23 @@ class JoorProcessor {
         for (JoorExpressionSourceBuildItem source : sources) {
             unit.addClass(source.getClassName(), source.getSourceCode());
         }
-        // Temporary workaround until being able to provide the classpath somehow to the method MultiCompile.compileUnit
-        // https://issues.apache.org/jira/browse/CAMEL-18860
-        String previousCP = System.getProperty("java.class.path");
-        try {
-            ApplicationModel model = curateOutcomeBuildItem.getApplicationModel();
-            List<ResolvedDependency> dependencies = new ArrayList<>(model.getDependencies());
-            dependencies.add(model.getAppArtifact());
-            String cp = dependencies.stream()
-                    .map(ResolvedDependency::getResolvedPaths)
-                    .flatMap(PathCollection::stream)
-                    .map(Objects::toString)
-                    .collect(Collectors.joining(System.getProperty("path.separator")));
-            System.setProperty("java.class.path", cp);
-            LOG.debug("Compiling unit: {}", unit);
-            CompilationUnit.Result compilationResult = MultiCompile.compileUnit(unit);
-            for (String className : compilationResult.getClassNames()) {
-                generatedClass
-                        .produce(
-                                new GeneratedClassBuildItem(true, className, compilationResult.getByteCode(className)));
-            }
-        } finally {
-            // Restore the CP
-            System.setProperty("java.class.path", previousCP);
+        ApplicationModel model = curateOutcomeBuildItem.getApplicationModel();
+        List<ResolvedDependency> dependencies = new ArrayList<>(model.getDependencies());
+        dependencies.add(model.getAppArtifact());
+        LOG.debug("Compiling unit: {}", unit);
+        CompilationUnit.Result compilationResult = MultiCompile.compileUnit(
+                unit,
+                List.of(
+                        "-classpath",
+                        dependencies.stream()
+                                .map(ResolvedDependency::getResolvedPaths)
+                                .flatMap(PathCollection::stream)
+                                .map(Objects::toString)
+                                .collect(Collectors.joining(System.getProperty("path.separator")))));
+        for (String className : compilationResult.getClassNames()) {
+            generatedClass
+                    .produce(
+                            new GeneratedClassBuildItem(true, className, compilationResult.getByteCode(className)));
         }
     }
 
@@ -186,31 +177,14 @@ class JoorProcessor {
                             recorderContext.classProxy(source.getClassName()));
                 }
             }
-            final RuntimeValue<JoorExpressionLanguage> language = recorder.languageNewInstance(config);
+            final RuntimeValue<JoorLanguage> language = recorder.languageNewInstance(config, expressionCompilerBuilder,
+                    expressionScriptingCompilerBuilder);
             config.resultType.ifPresent(c -> recorder.setResultType(language, recorderContext.classProxy(c)));
-            recorder.setJoorCompiler(language, expressionCompilerBuilder);
-            recorder.setJoorScriptingCompiler(language, expressionScriptingCompilerBuilder);
-            return new CamelBeanBuildItem("joor", JoorExpressionLanguage.class.getName(), language);
+            return new CamelBeanBuildItem("joor", JoorLanguage.class.getName(), language);
         }
         return null;
     }
 
-    /**
-     * @return the code generated by the {@link JoorCompiler} to compile.
-     */
-    private String evalCode(JoorCompiler compiler, CamelContext camelContext, String fqn, String script, boolean singleQuotes) {
-        // Use reflection as temporary workaround since it is not yet possible
-        // Will be fixed by https://issues.apache.org/jira/browse/CAMEL-18977
-        try {
-            Method m = JoorCompiler.class.getDeclaredMethod("evalCode", CamelContext.class, String.class, String.class,
-                    boolean.class);
-            m.setAccessible(true);
-            return (String) m.invoke(compiler, camelContext, fqn, script, singleQuotes);
-        } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
-            throw new RuntimeException("Cannot extract the generated code from the compiler", e);
-        }
-    }
-
     /**
      * Indicates whether the jOOR expressions should be compiled at build time.
      */
diff --git a/extensions/joor/runtime/src/main/java/org/apache/camel/quarkus/component/joor/runtime/JoorExpressionLanguage.java b/extensions/joor/runtime/src/main/java/org/apache/camel/quarkus/component/joor/runtime/JoorExpressionLanguage.java
deleted file mode 100644
index 69a15d7e1e..0000000000
--- a/extensions/joor/runtime/src/main/java/org/apache/camel/quarkus/component/joor/runtime/JoorExpressionLanguage.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.quarkus.component.joor.runtime;
-
-import java.lang.reflect.Field;
-
-import org.apache.camel.language.joor.JoorCompiler;
-import org.apache.camel.language.joor.JoorLanguage;
-import org.apache.camel.language.joor.JoorScriptingCompiler;
-
-/**
- * {@code JoorExpressionLanguage} is a jOOR language which uses a specific jOOR compiler and jOOR scripting compiler
- * that can be preloaded during the static initialization phase.
- */
-public class JoorExpressionLanguage extends JoorLanguage {
-
-    public static final String PACKAGE_NAME = "org.apache.camel.quarkus.component.joor.generated";
-
-    public JoorCompiler getJoorCompiler() {
-        // Use reflection as temporary workaround since it is not yet possible
-        // Will be fixed by https://issues.apache.org/jira/browse/CAMEL-18977
-        try {
-            Field f = JoorLanguage.class.getDeclaredField("compiler");
-            f.setAccessible(true);
-            return (JoorCompiler) f.get(this);
-        } catch (NoSuchFieldException | IllegalAccessException e) {
-            throw new RuntimeException("Cannot extract the compiler from the language", e);
-        }
-    }
-
-    public void setJoorCompiler(JoorCompiler compiler) {
-        // Use reflection as temporary workaround since it is not yet possible
-        // Will be fixed by https://issues.apache.org/jira/browse/CAMEL-18977
-        try {
-            Field f = JoorLanguage.class.getDeclaredField("compiler");
-            f.setAccessible(true);
-            f.set(this, compiler);
-        } catch (NoSuchFieldException | IllegalAccessException e) {
-            throw new RuntimeException("Cannot set the compiler to the language", e);
-        }
-    }
-
-    public JoorScriptingCompiler getJoorScriptingCompiler() {
-        // Use reflection as temporary workaround since it is not yet possible
-        // Will be fixed by https://issues.apache.org/jira/browse/CAMEL-18977
-        try {
-            Field f = JoorLanguage.class.getDeclaredField("scriptingCompiler");
-            f.setAccessible(true);
-            return (JoorScriptingCompiler) f.get(this);
-        } catch (NoSuchFieldException | IllegalAccessException e) {
-            throw new RuntimeException("Cannot extract the scripting compiler from the language", e);
-        }
-    }
-
-    public void setJoorScriptingCompiler(JoorScriptingCompiler compiler) {
-        // Use reflection as temporary workaround since it is not yet possible
-        // Will be fixed by https://issues.apache.org/jira/browse/CAMEL-18977
-        try {
-            Field f = JoorLanguage.class.getDeclaredField("scriptingCompiler");
-            f.setAccessible(true);
-            f.set(this, compiler);
-        } catch (NoSuchFieldException | IllegalAccessException e) {
-            throw new RuntimeException("Cannot set the scripting compiler to the language", e);
-        }
-    }
-}
diff --git a/extensions/joor/runtime/src/main/java/org/apache/camel/quarkus/component/joor/runtime/JoorExpressionRecorder.java b/extensions/joor/runtime/src/main/java/org/apache/camel/quarkus/component/joor/runtime/JoorExpressionRecorder.java
index 3d0b301fae..94b056d52e 100644
--- a/extensions/joor/runtime/src/main/java/org/apache/camel/quarkus/component/joor/runtime/JoorExpressionRecorder.java
+++ b/extensions/joor/runtime/src/main/java/org/apache/camel/quarkus/component/joor/runtime/JoorExpressionRecorder.java
@@ -19,20 +19,24 @@ package org.apache.camel.quarkus.component.joor.runtime;
 import io.quarkus.runtime.RuntimeValue;
 import io.quarkus.runtime.annotations.Recorder;
 import org.apache.camel.CamelContext;
+import org.apache.camel.language.joor.JoorLanguage;
 import org.apache.camel.language.joor.JoorMethod;
 import org.apache.camel.language.joor.JoorScriptingMethod;
 
 @Recorder
 public class JoorExpressionRecorder {
 
-    public RuntimeValue<JoorExpressionLanguage> languageNewInstance(JoorExpressionConfig config) {
-        RuntimeValue<JoorExpressionLanguage> language = new RuntimeValue<>(new JoorExpressionLanguage());
+    public RuntimeValue<JoorLanguage> languageNewInstance(JoorExpressionConfig config,
+            RuntimeValue<JoorExpressionCompiler.Builder> compilerBuilder,
+            RuntimeValue<JoorExpressionScriptingCompiler.Builder> scriptingCompilerBuilder) {
+        RuntimeValue<JoorLanguage> language = new RuntimeValue<>(
+                new JoorLanguage(compilerBuilder.getValue().build(), scriptingCompilerBuilder.getValue().build()));
         language.getValue().setSingleQuotes(config.singleQuotes);
         config.configResource.ifPresent(language.getValue()::setConfigResource);
         return language;
     }
 
-    public void setResultType(RuntimeValue<JoorExpressionLanguage> language, Class<?> resultType) {
+    public void setResultType(RuntimeValue<JoorLanguage> language, Class<?> resultType) {
         language.getValue().setResultType(resultType);
     }
 
@@ -64,14 +68,4 @@ public class JoorExpressionRecorder {
             throw new RuntimeException(e);
         }
     }
-
-    public void setJoorCompiler(RuntimeValue<JoorExpressionLanguage> language,
-            RuntimeValue<JoorExpressionCompiler.Builder> builder) {
-        language.getValue().setJoorCompiler(builder.getValue().build());
-    }
-
-    public void setJoorScriptingCompiler(RuntimeValue<JoorExpressionLanguage> language,
-            RuntimeValue<JoorExpressionScriptingCompiler.Builder> builder) {
-        language.getValue().setJoorScriptingCompiler(builder.getValue().build());
-    }
 }
diff --git a/integration-tests/java-joor-dsl/pom.xml b/integration-tests/java-joor-dsl/pom.xml
index 5632a945e6..06b6b518b3 100644
--- a/integration-tests/java-joor-dsl/pom.xml
+++ b/integration-tests/java-joor-dsl/pom.xml
@@ -30,10 +30,6 @@
     <name>Camel Quarkus :: Integration Tests :: Java jOOR DSL</name>
     <description>Integration tests for Camel Java jOOR DSL extension</description>
 
-    <properties>
-        <ci.native.tests.skip>true</ci.native.tests.skip><!-- https://github.com/apache/camel-quarkus/issues/4523 -->
-    </properties>
-
     <dependencies>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>