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/04/11 19:45:50 UTC
[camel-quarkus] 02/06: Ref #4731: java-joor-dsl - Add support of inner classes (#4732)
This is an automated email from the ASF dual-hosted git repository.
nfilotto pushed a commit to branch java-joor-dsl-backports
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit d67689557c66504d0de8466fd5dbd619b6f1877d
Author: Nicolas Filotto <es...@users.noreply.github.com>
AuthorDate: Mon Apr 3 15:25:48 2023 +0200
Ref #4731: java-joor-dsl - Add support of inner classes (#4732)
When a `RouteBuilder` class has an inner class, the inner class is unknown by Quarkus in native mode which causes a native compilation issue. The goal of this PR is to add the support of inner classes to prevent the native compilation issue.
* Produce `JavaJoorGeneratedClassBuildItem` for inner classes too
* Add a unit test to ensure that it works as expected
---
.../dsl/java/joor/deployment/JavaJoorDslProcessor.java | 9 ++++++++-
.../camel/quarkus/dsl/java/joor/JavaJoorDslResource.java | 8 ++++++++
.../java-joor-dsl/src/main/resources/routes/MyRoutes.java | 15 +++++++++++++++
.../camel/quarkus/dsl/java/joor/JavaJoorDslTest.java | 12 +++++++++++-
4 files changed, 42 insertions(+), 2 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 a782e772c8..7e72562f78 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
@@ -108,8 +108,15 @@ public class JavaJoorDslProcessor {
generatedClass
.produce(new JavaJoorGeneratedClassBuildItem(className, nameToResource.get(className).getLocation(),
result.getByteCode(className)));
+ Class<?> aClass = result.getClass(className);
+ for (Class<?> clazz : aClass.getDeclaredClasses()) {
+ String name = clazz.getName();
+ generatedClass
+ .produce(new JavaJoorGeneratedClassBuildItem(name, nameToResource.get(className).getLocation(),
+ result.getByteCode(name)));
+ }
registerForReflection(reflectiveClass, lambdaCapturingTypeProducer,
- result.getClass(className).getAnnotation(RegisterForReflection.class));
+ aClass.getAnnotation(RegisterForReflection.class));
}
} finally {
// Restore the CP
diff --git a/integration-tests/java-joor-dsl/src/main/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslResource.java b/integration-tests/java-joor-dsl/src/main/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslResource.java
index 049f24a358..5f08ccbeea 100644
--- a/integration-tests/java-joor-dsl/src/main/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslResource.java
+++ b/integration-tests/java-joor-dsl/src/main/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslResource.java
@@ -88,4 +88,12 @@ public class JavaJoorDslResource {
return producerTemplate.requestBody("direct:joorHi", name, String.class);
}
+ @POST
+ @Path("/echo")
+ @Consumes(MediaType.TEXT_PLAIN)
+ @Produces(MediaType.TEXT_PLAIN)
+ public String echo(String msg) {
+ return producerTemplate.requestBody("direct:joorEcho", msg, String.class);
+ }
+
}
diff --git a/integration-tests/java-joor-dsl/src/main/resources/routes/MyRoutes.java b/integration-tests/java-joor-dsl/src/main/resources/routes/MyRoutes.java
index fdcfa82266..065f921c43 100644
--- a/integration-tests/java-joor-dsl/src/main/resources/routes/MyRoutes.java
+++ b/integration-tests/java-joor-dsl/src/main/resources/routes/MyRoutes.java
@@ -14,6 +14,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+import java.util.function.Function;
+
import io.quarkus.runtime.annotations.RegisterForReflection;
import org.apache.camel.builder.RouteBuilder;
@@ -32,5 +34,18 @@ public class MyRoutes extends RouteBuilder {
Class<?> c2 = Thread.currentThread().getContextClassLoader().loadClass("org.apache.camel.quarkus.dsl.java.joor.JavaJoorDslBean$Inner");
exchange.getMessage().setBody(c2.getMethod("addSource", String.class).invoke(null, hi));
});
+ from("direct:joorEcho")
+ .id("inner-classes-route")
+ .process(exchange -> {
+ exchange.getMessage().setBody(Inner.format((String) exchange.getMessage().getBody()));
+ });
+ }
+
+ public static class Inner {
+
+ public static String format(String result) {
+ Function<String, String> toUpperCase = String::toUpperCase;
+ return String.format("Msg: %s", toUpperCase.apply(result));
+ }
}
}
\ No newline at end of file
diff --git a/integration-tests/java-joor-dsl/src/test/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslTest.java b/integration-tests/java-joor-dsl/src/test/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslTest.java
index 56862ea213..52bfde5bbd 100644
--- a/integration-tests/java-joor-dsl/src/test/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslTest.java
+++ b/integration-tests/java-joor-dsl/src/test/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslTest.java
@@ -45,6 +45,16 @@ class JavaJoorDslTest {
.body(CoreMatchers.is("Hi Will Smith from jOOR!"));
}
+ @Test
+ void joorEcho() {
+ RestAssured.given()
+ .body("Ping")
+ .post("/java-joor-dsl/echo")
+ .then()
+ .statusCode(200)
+ .body(CoreMatchers.is("Msg: PING"));
+ }
+
@Test
void testMainInstanceWithJavaRoutes() {
RestAssured.given()
@@ -63,6 +73,6 @@ class JavaJoorDslTest {
.get("/java-joor-dsl/main/routes")
.then()
.statusCode(200)
- .body(CoreMatchers.is("my-java-route,reflection-route"));
+ .body(CoreMatchers.is("inner-classes-route,my-java-route,reflection-route"));
}
}