This is an automated email from the ASF dual-hosted git repository.
fmariani pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-upgrade-recipes.git
The following commit(s) were added to refs/heads/main by this push:
new 41cd695 Upgrade to Camel 4.12.0
41cd695 is described below
commit 41cd695b9ce9d86ef3661349b70137e5f2472e63
Author: Jiri Ondrusek <[email protected]>
AuthorDate: Tue May 20 14:27:58 2025 +0200
Upgrade to Camel 4.12.0
---
.../camel/upgrade/camel412/Java412Recipes.java | 63 +++++
.../src/main/resources/META-INF/rewrite/4.12.yaml | 117 ++++++++
.../org/apache/camel/upgrade/CamelTestUtil.java | 3 +-
.../apache/camel/upgrade/CamelUpdate412Test.java | 308 +++++++++++++++++++++
4 files changed, 490 insertions(+), 1 deletion(-)
diff --git
a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel412/Java412Recipes.java
b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel412/Java412Recipes.java
new file mode 100644
index 0000000..5f27bcc
--- /dev/null
+++
b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel412/Java412Recipes.java
@@ -0,0 +1,63 @@
+/*
+ * 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.upgrade.camel412;
+
+import lombok.EqualsAndHashCode;
+import lombok.RequiredArgsConstructor;
+import org.apache.camel.upgrade.AbstractCamelJavaVisitor;
+import org.apache.camel.upgrade.RecipesUtil;
+import org.openrewrite.ExecutionContext;
+import org.openrewrite.Recipe;
+import org.openrewrite.TreeVisitor;
+import org.openrewrite.java.tree.J;
+
+/**
+ * <a
href="https://camel.apache.org/manual/camel-4x-upgrade-guide-4_12.html#_java_dsl">Java
DSL</a>
+ */
+@EqualsAndHashCode(callSuper = false)
+@RequiredArgsConstructor
+public class Java412Recipes extends Recipe {
+
+ private static final String M_END_CHOICE =
"org.apache.camel.model.ChoiceDefinition endChoice()";
+
+ @Override
+ public String getDisplayName() {
+ return "Camel Java DSL change for camel 4.12";
+ }
+
+ @Override
+ public String getDescription() {
+ return "Apache Camel Java DSL migration from version 4.11 to 4.12.";
+ }
+
+ @Override
+ public TreeVisitor<?, ExecutionContext> getVisitor() {
+
+ return RecipesUtil.newVisitor(new AbstractCamelJavaVisitor() {
+ @Override
+ protected J.MethodInvocation
doVisitMethodInvocation(J.MethodInvocation method, ExecutionContext context) {
+ J.MethodInvocation mi = super.doVisitMethodInvocation(method,
context);
+
+ if (getMethodMatcher(M_END_CHOICE).matches(mi, false)) {
+ return
mi.withName(mi.getName().withSimpleName("end().endChoice"));
+ }
+
+ return mi;
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git
a/camel-upgrade-recipes/src/main/resources/META-INF/rewrite/4.12.yaml
b/camel-upgrade-recipes/src/main/resources/META-INF/rewrite/4.12.yaml
new file mode 100644
index 0000000..7d48e04
--- /dev/null
+++ b/camel-upgrade-recipes/src/main/resources/META-INF/rewrite/4.12.yaml
@@ -0,0 +1,117 @@
+#
+# 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.
+#
+
+#####
+# Rules coming from
https://camel.apache.org/manual/camel-4x-upgrade-guide-4_112.html
+#####
+
+#####
+# Update the Camel project from 4.11 to 4.12
+#####
+---
+type: specs.openrewrite.org/v1beta/recipe
+name: org.apache.camel.upgrade.camel412.CamelMigrationRecipe
+displayName: Migrates `camel 4.11` application to `camel 4.12`
+description: Migrates `camel 4.11` application to `camel 4.12`.
+recipeList:
+ - org.apache.camel.upgrade.camel412.scanClassesMoved
+ - org.apache.camel.upgrade.camel412.scanClassesMovedMaven
+ # https://camel.apache.org/manual/camel-4x-upgrade-guide-4_12.html#_java_dsl
+ - org.apache.camel.upgrade.camel412.Java412Recipes
+ - org.apache.camel.upgrade.camel412.xmlDslBearer
+ - org.apache.camel.upgrade.camel412.yamlDslBearer
+---
+#https://camel.apache.org/manual/camel-4x-upgrade-guide-4_12.html#_camel_core
+type: specs.openrewrite.org/v1beta/recipe
+name: org.apache.camel.upgrade.camel412.scanClassesMoved
+displayName: The package scan classes has moved from camel-base-engine to
camel-support - java
+description: The package scan classes has moved from camel-base-engine to
camel-support JAR and moved to a new package - java.
+recipeList:
+ - org.openrewrite.java.ChangeType:
+ oldFullyQualifiedTypeName:
org.apache.camel.impl.engine.DefaultPackageScanClassResolver
+ newFullyQualifiedTypeName:
org.apache.camel.support.scan.DefaultPackageScanClassResolver
+ - org.openrewrite.java.ChangeType:
+ oldFullyQualifiedTypeName:
org.apache.camel.impl.engine.DefaultPackageScanResourceResolver
+ newFullyQualifiedTypeName:
org.apache.camel.support.scan.DefaultPackageScanResourceResolver
+ - org.openrewrite.java.ChangeType:
+ oldFullyQualifiedTypeName:
org.apache.camel.impl.engine.WebSpherePackageScanClassResolver
+ newFullyQualifiedTypeName:
org.apache.camel.support.scan.WebSpherePackageScanClassResolver
+ - org.openrewrite.java.ChangeType:
+ oldFullyQualifiedTypeName:
org.apache.camel.impl.scan.AnnotatedWithAnyPackageScanFilter
+ newFullyQualifiedTypeName:
org.apache.camel.support.scan.AnnotatedWithAnyPackageScanFilter
+ - org.openrewrite.java.ChangeType:
+ oldFullyQualifiedTypeName:
org.apache.camel.impl.scan.AnnotatedWithPackageScanFilter
+ newFullyQualifiedTypeName:
org.apache.camel.support.scan.AnnotatedWithPackageScanFilter
+ - org.openrewrite.java.ChangeType:
+ oldFullyQualifiedTypeName:
org.apache.camel.impl.scan.AssignableToPackageScanFilter
+ newFullyQualifiedTypeName:
org.apache.camel.support.scan.AssignableToPackageScanFilter
+ - org.openrewrite.java.ChangeType:
+ oldFullyQualifiedTypeName:
org.apache.camel.impl.scan.CompositePackageScanFilter
+ newFullyQualifiedTypeName:
org.apache.camel.support.scan.CompositePackageScanFilter
+ - org.openrewrite.java.ChangeType:
+ oldFullyQualifiedTypeName:
org.apache.camel.impl.scan.InvertingPackageScanFilter
+ newFullyQualifiedTypeName:
org.apache.camel.support.scan.InvertingPackageScanFilter
+
+---
+#https://camel.apache.org/manual/camel-4x-upgrade-guide-4_12.html#_camel_core
+type: specs.openrewrite.org/v1beta/recipe
+name: org.apache.camel.upgrade.camel412.scanClassesMovedMaven
+displayName: The package scan classes has moved from camel-base-engine to
camel-support - maven
+description: The package scan classes has moved from camel-base-engine to
camel-support JAR and moved to a new package - maven.
+recipeList:
+ - org.openrewrite.maven.AddDependency:
+ groupId: org.apache.camel
+ artifactId: camel-support
+ version: PLEASE_DEFINE_VERSION #if the version is defined in the pom,
this value is omitted
+ onlyIfUsing: org.apache.camel.impl.scan.*
+ - org.openrewrite.maven.AddDependency:
+ groupId: org.apache.camel
+ artifactId: camel-support
+ version: PLEASE_DEFINE_VERSION #if the version is defined in the pom,
this value is omitted
+ onlyIfUsing: org.apache.camel.impl.engine.DefaultPackageScanClassResolver
+ - org.openrewrite.maven.AddDependency:
+ groupId: org.apache.camel
+ artifactId: camel-support
+ version: PLEASE_DEFINE_VERSION #if the version is defined in the pom,
this value is omitted
+ onlyIfUsing:
org.apache.camel.impl.engine.DefaultPackageScanResourceResolver
+ - org.openrewrite.maven.AddDependency:
+ groupId: org.apache.camel
+ artifactId: camel-support
+ version: PLEASE_DEFINE_VERSION #if the version is defined in the pom,
this value is omitted
+ onlyIfUsing:
org.apache.camel.impl.engine.WebSpherePackageScanClassResolver
+---
+#https://camel.apache.org/manual/camel-4x-upgrade-guide-4_12.html#_rest_dsl
+type: specs.openrewrite.org/v1beta/recipe
+name: org.apache.camel.upgrade.camel412.xmlDslBearer
+displayName: XML DSL bearer from rest/securityDefinitions is renamed to
bearerToken
+description: Rest definition in XML DSL with security constraints, then bearer
in YAML and XML DSL has been renamed to bearerToken to be aligned with Java DSL.
+recipeList:
+ - org.openrewrite.xml.ChangeTagName:
+ elementName: //rest/securityDefinitions/bearer
+ newName: bearerToken
+---
+#https://camel.apache.org/manual/camel-4x-upgrade-guide-4_12.html#_rest_dsl
+type: specs.openrewrite.org/v1beta/recipe
+name: org.apache.camel.upgrade.camel412.yamlDslBearer
+displayName: Yaml DSL bearer from rest/securityDefinitions is renamed to
bearerToken
+description: Rest definition in Yaml DSL with security constraints, then
bearer in YAML and XML DSL has been renamed to bearerToken to be aligned with
Java DSL.
+recipeList:
+ - org.openrewrite.yaml.ChangeKey:
+ oldKeyPath: $.rest.securityDefinitions.bearer
+ newKey: bearerToken
+
+
diff --git
a/camel-upgrade-recipes/src/test/java/org/apache/camel/upgrade/CamelTestUtil.java
b/camel-upgrade-recipes/src/test/java/org/apache/camel/upgrade/CamelTestUtil.java
index 8126703..11928ee 100644
---
a/camel-upgrade-recipes/src/test/java/org/apache/camel/upgrade/CamelTestUtil.java
+++
b/camel-upgrade-recipes/src/test/java/org/apache/camel/upgrade/CamelTestUtil.java
@@ -47,7 +47,8 @@ public class CamelTestUtil {
v4_8(4, 8, 0),
v4_9(4, 9, 0),
v4_10(4, 10, 0),
- v4_11(4, 11, 0);
+ v4_11(4, 11, 0),
+ v4_12(4, 12, 0);
private int major;
private int minor;
diff --git
a/camel-upgrade-recipes/src/test/java/org/apache/camel/upgrade/CamelUpdate412Test.java
b/camel-upgrade-recipes/src/test/java/org/apache/camel/upgrade/CamelUpdate412Test.java
new file mode 100644
index 0000000..027ee60
--- /dev/null
+++
b/camel-upgrade-recipes/src/test/java/org/apache/camel/upgrade/CamelUpdate412Test.java
@@ -0,0 +1,308 @@
+/*
+ * 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.upgrade;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
+import org.openrewrite.test.RecipeSpec;
+import org.openrewrite.test.RewriteTest;
+import org.openrewrite.test.TypeValidation;
+import org.openrewrite.yaml.Assertions;
+
+import static org.openrewrite.java.Assertions.*;
+import static org.openrewrite.maven.Assertions.pomXml;
+import static org.openrewrite.xml.Assertions.xml;
+
+public class CamelUpdate412Test implements RewriteTest {
+
+ @Override
+ public void defaults(RecipeSpec spec) {
+ CamelTestUtil.recipe(spec, CamelTestUtil.CamelVersion.v4_12)
+
.parser(CamelTestUtil.parserFromClasspath(CamelTestUtil.CamelVersion.v4_11,
"camel-api",
+ "camel-core-model", "camel-support",
"camel-base-engine", "camel-base"))
+ .typeValidationOptions(TypeValidation.none());
+ }
+
+
+
+ /**
+ * The package scan classes has moved from camel-base-engine to
camel-support
+ *
+ * <a
href="https://camel.apache.org/manual/camel-4x-upgrade-guide-4_12.html#_camel_core">Moved
scan classes</a>
+ */
+ @ParameterizedTest
+
@CsvSource({"DefaultPackageScanClassResolver,org.apache.camel.impl.engine,org.apache.camel.support.scan",
+
"DefaultPackageScanResourceResolver,org.apache.camel.impl.engine,org.apache.camel.support.scan",
+
"WebSpherePackageScanClassResolver,org.apache.camel.impl.engine,
org.apache.camel.support.scan",
+ "AnnotatedWithAnyPackageScanFilter,org.apache.camel.impl.scan,
org.apache.camel.support.scan",
+ "AnnotatedWithPackageScanFilter,org.apache.camel.impl.scan,
org.apache.camel.support.scan",
+ "AssignableToPackageScanFilter,org.apache.camel.impl.scan,
org.apache.camel.support.scan",
+ "CompositePackageScanFilter,org.apache.camel.impl.scan,
org.apache.camel.support.scan",
+ "InvertingPackageScanFilter,org.apache.camel.impl.scan,
org.apache.camel.support.scan"})
+ public void testMovedScanClasses(String className, String originalImport,
String expectedImport) {
+ rewriteRun(
+ mavenProject("testMovedScanClasses",
+ sourceSet(java(
+ String.format("""
+ import %s.%s;
+
+ public class Test {
+ public void test() {
+ %s b = null;
+ }
+ }
+ """, originalImport, className, className),
+ String.format("""
+ import %s.%s;
+
+ public class Test {
+ public void test() {
+ %s b = null;
+ }
+ }
+ """, expectedImport, className,
className)).iterator().next(), "src/man/java"), pomXml(
+ """
+ <project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>test</artifactId>
+
<groupId>org.apache.camel.test</groupId>
+ <version>1.0.0</version>
+
+ <properties>
+
<camel.version>4.11.0</camel.version>
+ </properties>
+
+ <dependencyManagement>
+ <dependencies>>
+ <dependency>
+
<groupId>io.quarkus.platform</groupId>
+
<artifactId>quarkus-camel-bom</artifactId>
+
<version>3.2.11.Final</version>
+
<type>pom</type>
+
<scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <dependencies>
+ <dependency>
+
<groupId>org.apache.camel</groupId>
+
<artifactId>camel-base</artifactId>
+ </dependency>
+ </dependencies>
+
+ </project>
+ """,
+ """
+ <project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>test</artifactId>
+
<groupId>org.apache.camel.test</groupId>
+ <version>1.0.0</version>
+
+ <properties>
+
<camel.version>4.11.0</camel.version>
+ </properties>
+
+ <dependencyManagement>
+ <dependencies>>
+ <dependency>
+
<groupId>io.quarkus.platform</groupId>
+
<artifactId>quarkus-camel-bom</artifactId>
+
<version>3.2.11.Final</version>
+
<type>pom</type>
+
<scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <dependencies>
+ <dependency>
+
<groupId>org.apache.camel</groupId>
+
<artifactId>camel-base</artifactId>
+ </dependency>
+ <dependency>
+
<groupId>org.apache.camel</groupId>
+
<artifactId>camel-support</artifactId>
+ </dependency>
+ </dependencies>
+
+ </project>
+ """)
+ ));
+ }
+
+ /**
+ * <a
href="https://camel.apache.org/manual/camel-4x-upgrade-guide-4_12.html#_java_dsl">Java
DSL</a>
+ */
+ @Test
+ void testJavaDslChoice() {
+ //language=java
+ rewriteRun(java("""
+ import org.apache.camel.ExchangePattern;
+ import org.apache.camel.builder.RouteBuilder;
+
+ public class MySimpleToDRoute extends RouteBuilder {
+
+ @Override
+ public void configure() {
+
+ from("direct:start")
+ .choice()
+ .when(header("foo").isGreaterThan(1))
+ .choice()
+ .when(header("foo").isGreaterThan(5))
+ .to("mock:big")
+ .otherwise()
+ .to("mock:med")
+ .endChoice()
+ .otherwise()
+ .to("mock:low")
+ .end();
+ }
+ }
+ """, """
+ import org.apache.camel.ExchangePattern;
+ import org.apache.camel.builder.RouteBuilder;
+
+ public class MySimpleToDRoute extends RouteBuilder {
+
+ @Override
+ public void configure() {
+
+ from("direct:start")
+ .choice()
+ .when(header("foo").isGreaterThan(1))
+ .choice()
+ .when(header("foo").isGreaterThan(5))
+ .to("mock:big")
+ .otherwise()
+ .to("mock:med")
+ .end().endChoice()
+ .otherwise()
+ .to("mock:low")
+ .end();
+ }
+ }
+ """));
+ }
+
+ /**
+ * <a
href="https://camel.apache.org/manual/camel-4x-upgrade-guide-4_12.html#_rest_dsl">Rest
DSL</a>
+ */
+ @Test
+ public void testXmlDslBearer() {
+ //language=xml
+ rewriteRun(xml("""
+ <camelContext xmlns="http://camel.apache.org/schema/spring">
+ <rest path="/user" description="User rest service"
consumes="application/json" produces="application/json">
+ <securityDefinitions>
+ <bearer key="myBearerKey" description="Bearer
token for security"/>
+ </securityDefinitions>
+ <get path="/hello">
+ <to uri="direct:hello"/>
+ </get>
+ <get path="/bye" consumes="application/json">
+ <to uri="direct:bye"/>
+ </get>
+ <post path="/bye">
+ <to uri="mock:update"/>
+ </post>
+ </rest>
+ </camelContext>
+ """, """
+ <camelContext xmlns="http://camel.apache.org/schema/spring">
+ <rest path="/user" description="User rest service"
consumes="application/json" produces="application/json">
+ <securityDefinitions>
+ <bearerToken key="myBearerKey" description="Bearer
token for security"/>
+ </securityDefinitions>
+ <get path="/hello">
+ <to uri="direct:hello"/>
+ </get>
+ <get path="/bye" consumes="application/json">
+ <to uri="direct:bye"/>
+ </get>
+ <post path="/bye">
+ <to uri="mock:update"/>
+ </post>
+ </rest>
+ </camelContext>
+ """)); }
+
+ /**
+ * <a
href="https://camel.apache.org/manual/camel-4x-upgrade-guide-4_12.html#_rest_dsl">Rest
DSL</a>
+ */
+ @Test
+ public void testYamlDslBearer() {
+ //language=yaml
+ rewriteRun(Assertions.yaml("""
+ - rest:
+ path: "/user"
+ description: "User rest service"
+ consumes: "application/json"
+ produces: "application/json"
+ securityDefinitions:
+ bearer:
+ key: "test"
+ get:
+ - path: "/hello"
+ to: "direct:hello"
+ - path: "/bye"
+ consumes: "application/json"
+ to: "direct:bye"
+ post:
+ - path: "/bye"
+ to: "mock:update"
+ - route:
+ id: loadbalance-failover-route
+ from:
+ uri: "direct://loadbalance-failover"
+ steps:
+ - log:
+ message: "Processing message start: ${body}"
+ """, """
+ - rest:
+ path: "/user"
+ description: "User rest service"
+ consumes: "application/json"
+ produces: "application/json"
+ securityDefinitions:
+ bearerToken:
+ key: "test"
+ get:
+ - path: "/hello"
+ to: "direct:hello"
+ - path: "/bye"
+ consumes: "application/json"
+ to: "direct:bye"
+ post:
+ - path: "/bye"
+ to: "mock:update"
+ - route:
+ id: loadbalance-failover-route
+ from:
+ uri: "direct://loadbalance-failover"
+ steps:
+ - log:
+ message: "Processing message start: ${body}"
+ """));
+ }
+
+}