This is an automated email from the ASF dual-hosted git repository. Croway pushed a commit to branch gate-xml-recipes-126 in repository https://gitbox.apache.org/repos/asf/camel-upgrade-recipes.git
commit 83c0f93f27c390517f8514bbaf88943e08a93bb5 Author: croway <[email protected]> AuthorDate: Tue Aug 25 13:52:03 2026 +0200 Gate the remaining XML DSL recipes on a Camel document Fixes #126. The Java recipes are gated by UsesType and the YAML recipes by camelYamlDslPrecondition, and #125 added camelXmlDslPrecondition and applied it to two XML recipes. The other ten visited every XML document in a project, so a matcher that happens to fit an unrelated file rewrote it. XmlDsl418_1SagaRecipe did not merely rename in such a file, it removed a child element and folded it into an attribute. Wraps every remaining XML visitor in the precondition, so the whole set is now uniform and a new XML recipe inherits the same guard. CameXmlDslRecipeTest.circuitBreakerFull used a synthetic <differentContext> root, which is not a Camel document. Its sibling circuitBreaker test already covers the <route> context, so the root becomes <camelContext>, which is where a top level resilience4jConfiguration actually lives, and the option coverage the test exists for is unchanged. Adds CamelXmlDslPreconditionTest, one negative test per gated recipe, each feeding a document carrying exactly the shape that recipe matches under a plainly non-Camel root. Kept in one class rather than spread over the existing test classes because the property is uniform across the recipes, so a new XML recipe is one line away from being covered. Verified the tests are not vacuous: with the gating reverted, 8 of the 10 fail, the other 2 being the recipes already gated by #125. camel40.xml.XmlDslRecipe has no negative test on purpose, its matchers are anchored at /routes/route so the document root has to be routes, which is a Camel root. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> --- .../camel40/xml/CircuitBreakerXmlDslRecipe.java | 6 +- .../camel/upgrade/camel40/xml/XmlDslRecipe.java | 6 +- .../apache/camel/upgrade/camel41/XmlDslRecipe.java | 6 +- .../camel/upgrade/camel410/XmlDsl410Recipe.java | 6 +- .../upgrade/camel418_1/XmlDsl418_1SagaRecipe.java | 6 +- .../camel418_3/RenameHeaderPrefixInXmlDsl.java | 5 +- .../camel/upgrade/camel47/XmlDsl47Recipe.java | 6 +- .../ReplacePropertyInComponentXml.java | 5 +- .../ReplacePropertyInDataFormatXml.java | 6 +- .../internal/ChangeXmlComponentUriRecipe.java | 5 +- .../upgrade/camel40/CameXmlDslRecipeTest.java | 8 +- .../upgrade/xml/CamelXmlDslPreconditionTest.java | 225 +++++++++++++++++++++ 12 files changed, 267 insertions(+), 23 deletions(-) diff --git a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel40/xml/CircuitBreakerXmlDslRecipe.java b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel40/xml/CircuitBreakerXmlDslRecipe.java index 2fdabbf..67a71f4 100644 --- a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel40/xml/CircuitBreakerXmlDslRecipe.java +++ b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel40/xml/CircuitBreakerXmlDslRecipe.java @@ -16,8 +16,10 @@ */ package org.apache.camel.upgrade.camel40.xml; +import org.apache.camel.upgrade.RecipesUtil; import org.apache.camel.upgrade.AbstractCamelXmlVisitor; import org.jspecify.annotations.Nullable; +import org.openrewrite.Preconditions; import org.openrewrite.ExecutionContext; import org.openrewrite.Recipe; import org.openrewrite.Tree; @@ -101,7 +103,7 @@ public class CircuitBreakerXmlDslRecipe extends Recipe { @Override public TreeVisitor<?, ExecutionContext> getVisitor() { - return new AbstractCamelXmlVisitor() { + return Preconditions.check(RecipesUtil.camelXmlDslPrecondition(), new AbstractCamelXmlVisitor() { @Override public Xml.@Nullable Tag doVisitTag(final Xml.Tag tag, final ExecutionContext ctx) { @@ -142,6 +144,6 @@ public class CircuitBreakerXmlDslRecipe extends Recipe { return t; } - }; + }); } } diff --git a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel40/xml/XmlDslRecipe.java b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel40/xml/XmlDslRecipe.java index 5d47bae..80e5a1e 100644 --- a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel40/xml/XmlDslRecipe.java +++ b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel40/xml/XmlDslRecipe.java @@ -16,8 +16,10 @@ */ package org.apache.camel.upgrade.camel40.xml; +import org.apache.camel.upgrade.RecipesUtil; import org.apache.camel.upgrade.AbstractCamelXmlVisitor; import org.jspecify.annotations.Nullable; +import org.openrewrite.Preconditions; import org.openrewrite.ExecutionContext; import org.openrewrite.Recipe; import org.openrewrite.Tree; @@ -69,7 +71,7 @@ public class XmlDslRecipe extends Recipe { @Override public TreeVisitor<?, ExecutionContext> getVisitor() { - return new AbstractCamelXmlVisitor() { + return Preconditions.check(RecipesUtil.camelXmlDslPrecondition(), new AbstractCamelXmlVisitor() { @Override public Xml.@Nullable Tag doVisitTag(final Xml.Tag tag, final ExecutionContext ctx) { @@ -100,6 +102,6 @@ public class XmlDslRecipe extends Recipe { return t; } - }; + }); } } diff --git a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel41/XmlDslRecipe.java b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel41/XmlDslRecipe.java index 0bfa9c1..1b32245 100644 --- a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel41/XmlDslRecipe.java +++ b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel41/XmlDslRecipe.java @@ -16,7 +16,9 @@ */ package org.apache.camel.upgrade.camel41; +import org.apache.camel.upgrade.RecipesUtil; import org.apache.camel.upgrade.AbstractCamelXmlVisitor; +import org.openrewrite.Preconditions; import org.openrewrite.ExecutionContext; import org.openrewrite.Recipe; import org.openrewrite.Tree; @@ -70,7 +72,7 @@ public class XmlDslRecipe extends Recipe { @Override public TreeVisitor<?, ExecutionContext> getVisitor() { - return new AbstractCamelXmlVisitor() { + return Preconditions.check(RecipesUtil.camelXmlDslPrecondition(), new AbstractCamelXmlVisitor() { @Override public Xml.Tag doVisitTag(final Xml.Tag tag, final ExecutionContext ctx) { @@ -106,6 +108,6 @@ public class XmlDslRecipe extends Recipe { return t; } - }; + }); } } diff --git a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel410/XmlDsl410Recipe.java b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel410/XmlDsl410Recipe.java index 49f13ca..8c2f3f2 100644 --- a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel410/XmlDsl410Recipe.java +++ b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel410/XmlDsl410Recipe.java @@ -16,7 +16,9 @@ */ package org.apache.camel.upgrade.camel410; +import org.apache.camel.upgrade.RecipesUtil; import org.apache.camel.upgrade.AbstractCamelXmlVisitor; +import org.openrewrite.Preconditions; import org.openrewrite.ExecutionContext; import org.openrewrite.Recipe; import org.openrewrite.TreeVisitor; @@ -50,7 +52,7 @@ public class XmlDsl410Recipe extends Recipe { @Override public TreeVisitor<?, ExecutionContext> getVisitor() { - return new AbstractCamelXmlVisitor() { + return Preconditions.check(RecipesUtil.camelXmlDslPrecondition(), new AbstractCamelXmlVisitor() { @Override public Xml.Tag doVisitTag(final Xml.Tag tag, final ExecutionContext ctx) { @@ -64,6 +66,6 @@ public class XmlDsl410Recipe extends Recipe { .findAny() .orElse(t); } - }; + }); } } diff --git a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel418_1/XmlDsl418_1SagaRecipe.java b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel418_1/XmlDsl418_1SagaRecipe.java index 34ed9d8..070b11a 100644 --- a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel418_1/XmlDsl418_1SagaRecipe.java +++ b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel418_1/XmlDsl418_1SagaRecipe.java @@ -16,7 +16,9 @@ */ package org.apache.camel.upgrade.camel418_1; +import org.apache.camel.upgrade.RecipesUtil; import org.apache.camel.upgrade.AbstractCamelXmlVisitor; +import org.openrewrite.Preconditions; import org.openrewrite.ExecutionContext; import org.openrewrite.Recipe; import org.openrewrite.TreeVisitor; @@ -49,7 +51,7 @@ public class XmlDsl418_1SagaRecipe extends Recipe { @Override public TreeVisitor<?, ExecutionContext> getVisitor() { - return new AbstractCamelXmlVisitor() { + return Preconditions.check(RecipesUtil.camelXmlDslPrecondition(), new AbstractCamelXmlVisitor() { @Override public Xml.Tag doVisitTag(final Xml.Tag tag, final ExecutionContext ctx) { @@ -111,6 +113,6 @@ public class XmlDsl418_1SagaRecipe extends Recipe { ) ))); } - }; + }); } } diff --git a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel418_3/RenameHeaderPrefixInXmlDsl.java b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel418_3/RenameHeaderPrefixInXmlDsl.java index ee54903..f5ce0e8 100644 --- a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel418_3/RenameHeaderPrefixInXmlDsl.java +++ b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel418_3/RenameHeaderPrefixInXmlDsl.java @@ -16,7 +16,9 @@ */ package org.apache.camel.upgrade.camel418_3; +import org.apache.camel.upgrade.RecipesUtil; import org.apache.camel.upgrade.AbstractCamelXmlVisitor; +import org.openrewrite.Preconditions; import org.openrewrite.ExecutionContext; import org.openrewrite.Option; import org.openrewrite.Recipe; @@ -69,7 +71,8 @@ public class RenameHeaderPrefixInXmlDsl extends Recipe { @Override public TreeVisitor<?, ExecutionContext> getVisitor() { - return new XmlHeaderPrefixVisitor(oldPrefix, newPrefix); + return Preconditions.check(RecipesUtil.camelXmlDslPrecondition(), + new XmlHeaderPrefixVisitor(oldPrefix, newPrefix)); } private static class XmlHeaderPrefixVisitor extends AbstractCamelXmlVisitor { diff --git a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel47/XmlDsl47Recipe.java b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel47/XmlDsl47Recipe.java index 37eca9b..82c0c8e 100644 --- a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel47/XmlDsl47Recipe.java +++ b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/camel47/XmlDsl47Recipe.java @@ -16,7 +16,9 @@ */ package org.apache.camel.upgrade.camel47; +import org.apache.camel.upgrade.RecipesUtil; import org.apache.camel.upgrade.AbstractCamelXmlVisitor; +import org.openrewrite.Preconditions; import org.openrewrite.ExecutionContext; import org.openrewrite.Recipe; import org.openrewrite.TreeVisitor; @@ -54,7 +56,7 @@ public class XmlDsl47Recipe extends Recipe { @Override public TreeVisitor<?, ExecutionContext> getVisitor() { - return new AbstractCamelXmlVisitor() { + return Preconditions.check(RecipesUtil.camelXmlDslPrecondition(), new AbstractCamelXmlVisitor() { @Override public Xml.Tag doVisitTag(final Xml.Tag tag, final ExecutionContext ctx) { @@ -68,6 +70,6 @@ public class XmlDsl47Recipe extends Recipe { .findAny() .orElse(t); } - }; + }); } } diff --git a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/customRecipes/ReplacePropertyInComponentXml.java b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/customRecipes/ReplacePropertyInComponentXml.java index ebf85fd..e820154 100644 --- a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/customRecipes/ReplacePropertyInComponentXml.java +++ b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/customRecipes/ReplacePropertyInComponentXml.java @@ -18,6 +18,7 @@ package org.apache.camel.upgrade.customRecipes; import org.apache.camel.upgrade.AbstractCamelXmlVisitor; import org.apache.camel.upgrade.RecipesUtil; +import org.openrewrite.Preconditions; import org.openrewrite.ExecutionContext; import org.openrewrite.Option; import org.openrewrite.Recipe; @@ -89,7 +90,7 @@ public class ReplacePropertyInComponentXml extends Recipe { @Override public TreeVisitor<?, ExecutionContext> getVisitor() { - return new AbstractCamelXmlVisitor() { + return Preconditions.check(RecipesUtil.camelXmlDslPrecondition(), new AbstractCamelXmlVisitor() { @Override public Xml.Tag doVisitTag(final Xml.Tag tag, final ExecutionContext ctx) { @@ -104,7 +105,7 @@ public class ReplacePropertyInComponentXml extends Recipe { return t; } - }; + }); } private Xml.Tag replacePropertyIfPossible(final Xml.Tag tag) { diff --git a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/customRecipes/ReplacePropertyInDataFormatXml.java b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/customRecipes/ReplacePropertyInDataFormatXml.java index 94237f3..5d51591 100644 --- a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/customRecipes/ReplacePropertyInDataFormatXml.java +++ b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/customRecipes/ReplacePropertyInDataFormatXml.java @@ -16,7 +16,9 @@ */ package org.apache.camel.upgrade.customRecipes; +import org.apache.camel.upgrade.RecipesUtil; import org.apache.camel.upgrade.AbstractCamelXmlVisitor; +import org.openrewrite.Preconditions; import org.openrewrite.ExecutionContext; import org.openrewrite.Option; import org.openrewrite.Recipe; @@ -73,7 +75,7 @@ public class ReplacePropertyInDataFormatXml extends Recipe { @Override public TreeVisitor<?, ExecutionContext> getVisitor() { - return new AbstractCamelXmlVisitor() { + return Preconditions.check(RecipesUtil.camelXmlDslPrecondition(), new AbstractCamelXmlVisitor() { @Override public Xml.Tag doVisitTag(final Xml.Tag tag, final ExecutionContext ctx) { @@ -84,7 +86,7 @@ public class ReplacePropertyInDataFormatXml extends Recipe { } return t; } - }; + }); } private Xml.Tag replacePropertyIfPossible(final Xml.Tag tag) { diff --git a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/customRecipes/internal/ChangeXmlComponentUriRecipe.java b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/customRecipes/internal/ChangeXmlComponentUriRecipe.java index 88b0ac4..2c97a5b 100644 --- a/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/customRecipes/internal/ChangeXmlComponentUriRecipe.java +++ b/camel-upgrade-recipes/src/main/java/org/apache/camel/upgrade/customRecipes/internal/ChangeXmlComponentUriRecipe.java @@ -18,6 +18,7 @@ package org.apache.camel.upgrade.customRecipes.internal; import org.apache.camel.upgrade.AbstractCamelXmlVisitor; import org.apache.camel.upgrade.RecipesUtil; +import org.openrewrite.Preconditions; import org.openrewrite.ExecutionContext; import org.openrewrite.Option; import org.openrewrite.Recipe; @@ -97,7 +98,7 @@ public class ChangeXmlComponentUriRecipe extends Recipe { public TreeVisitor<?, ExecutionContext> getVisitor() { Pattern pattern = Pattern.compile(uriPattern); - return new AbstractCamelXmlVisitor() { + return Preconditions.check(RecipesUtil.camelXmlDslPrecondition(), new AbstractCamelXmlVisitor() { @Override public Xml.Tag doVisitTag(Xml.Tag tag, ExecutionContext ctx) { Xml.Tag t = super.doVisitTag(tag, ctx); @@ -109,7 +110,7 @@ public class ChangeXmlComponentUriRecipe extends Recipe { return t; } - }; + }); } private static Xml.Tag transformXmlUri(Xml.Tag tag, Pattern pattern, String replacement) { diff --git a/camel-upgrade-recipes/src/test/java/org/apache/camel/upgrade/camel40/CameXmlDslRecipeTest.java b/camel-upgrade-recipes/src/test/java/org/apache/camel/upgrade/camel40/CameXmlDslRecipeTest.java index 7615142..7e3e39c 100644 --- a/camel-upgrade-recipes/src/test/java/org/apache/camel/upgrade/camel40/CameXmlDslRecipeTest.java +++ b/camel-upgrade-recipes/src/test/java/org/apache/camel/upgrade/camel40/CameXmlDslRecipeTest.java @@ -86,7 +86,7 @@ public class CameXmlDslRecipeTest implements RewriteTest { //language=xml rewriteRun(xml( """ - <differentContext> + <camelContext> <circuitBreaker> <resilience4jConfiguration> <bulkheadEnabled>5643</bulkheadEnabled> @@ -98,15 +98,15 @@ public class CameXmlDslRecipeTest implements RewriteTest { <timeoutCancelRunningFuture></timeoutCancelRunningFuture> </resilience4jConfiguration> </circuitBreaker> - </differentContext> + </camelContext> """, """ - <differentContext> + <camelContext> <circuitBreaker> <resilience4jConfiguration bulkheadEnabled="5643" bulkheadMaxConcurrentCalls="aaaa" bulkheadMaxWaitDuration="1" timeoutEnabled="true" timeoutExecutorService="1" timeoutDuration="1"> </resilience4jConfiguration> </circuitBreaker> - </differentContext> + </camelContext> """)); } diff --git a/camel-upgrade-recipes/src/test/java/org/apache/camel/upgrade/xml/CamelXmlDslPreconditionTest.java b/camel-upgrade-recipes/src/test/java/org/apache/camel/upgrade/xml/CamelXmlDslPreconditionTest.java new file mode 100644 index 0000000..31827e9 --- /dev/null +++ b/camel-upgrade-recipes/src/test/java/org/apache/camel/upgrade/xml/CamelXmlDslPreconditionTest.java @@ -0,0 +1,225 @@ +/* + * 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.xml; + +import org.apache.camel.upgrade.CamelTestUtil; +import org.apache.camel.upgrade.camel410.XmlDsl410Recipe; +import org.apache.camel.upgrade.camel418_1.XmlDsl418_1SagaRecipe; +import org.apache.camel.upgrade.camel418_3.RenameHeaderInXmlDsl; +import org.apache.camel.upgrade.camel418_3.RenameHeaderPrefixInXmlDsl; +import org.apache.camel.upgrade.camel46.XmlDsl46Recipe; +import org.apache.camel.upgrade.camel47.XmlDsl47Recipe; +import org.apache.camel.upgrade.customRecipes.ReplacePropertyInComponentXml; +import org.apache.camel.upgrade.customRecipes.ReplacePropertyInDataFormatXml; +import org.apache.camel.upgrade.customRecipes.internal.ChangeXmlComponentUriRecipe; +import org.junit.jupiter.api.Test; +import org.openrewrite.DocumentExample; +import org.openrewrite.test.RewriteTest; +import org.openrewrite.test.TypeValidation; + +import static org.openrewrite.xml.Assertions.xml; + +/** + * Every XML DSL recipe is gated on {@code RecipesUtil.camelXmlDslPrecondition()}, so none of them may + * touch a document that is not Camel XML. Each test feeds a document carrying exactly the shape the + * recipe matches, wrapped in a root element that is plainly not Camel, and expects no change. + * <p> + * {@code camel40.xml.XmlDslRecipe} has no test here on purpose: its matchers are anchored at + * {@code /routes/route}, so the document root has to be {@code routes}, which is a Camel root. + */ +class CamelXmlDslPreconditionTest implements RewriteTest { + + @DocumentExample + @Test + void springBeanDefinitionIsNotADataFormatOrHeaderCarrier() { + //language=xml + rewriteRun( + spec -> spec.recipe(new XmlDsl46Recipe()), + xml( + """ + <beans xmlns="http://www.springframework.org/schema/beans"> + <bean id="example" class="com.example.Example"> + <property name="topic" value="orders"/> + </bean> + </beans> + """ + ) + ); + } + + @Test + void headerRenameLeavesNonCamelXmlAlone() { + //language=xml + rewriteRun( + spec -> spec.recipe(new RenameHeaderInXmlDsl("kafka.TOPIC", "CamelKafkaTopic")), + xml( + """ + <configuration xmlns="http://example.com/schema/http"> + <endpoint url="https://example.com/publish"> + <header name="kafka.TOPIC" value="orders"/> + <template>${header.kafka.TOPIC}</template> + </endpoint> + </configuration> + """ + ) + ); + } + + @Test + void headerPrefixRenameLeavesNonCamelXmlAlone() { + //language=xml + rewriteRun( + spec -> spec.recipe(new RenameHeaderPrefixInXmlDsl("SolrField.", "CamelSolrField.")), + xml( + """ + <configuration xmlns="http://example.com/schema/http"> + <endpoint url="https://example.com/search"> + <header name="SolrField.id" value="doc123"/> + </endpoint> + </configuration> + """ + ) + ); + } + + @Test + void sagaLeavesNonCamelXmlAlone() { + //language=xml + rewriteRun( + spec -> spec.recipe(new XmlDsl418_1SagaRecipe()), + xml( + """ + <workflow xmlns="http://example.com/schema/workflow"> + <saga> + <compensation uri="http://example.com/undo"/> + <completion uri="http://example.com/done"/> + </saga> + </workflow> + """ + ) + ); + } + + @Test + void circuitBreakerLeavesNonCamelXmlAlone() { + // driven through the whole 4.0 migration, the way CameXmlDslRecipeTest drives it + //language=xml + rewriteRun( + spec -> CamelTestUtil.recipe(spec, CamelTestUtil.CamelVersion.v4_0) + .typeValidationOptions(TypeValidation.none()), + xml( + """ + <application> + <circuitBreaker> + <resilience4jConfiguration> + <timeoutEnabled>true</timeoutEnabled> + <timeoutDuration>1</timeoutDuration> + </resilience4jConfiguration> + </circuitBreaker> + </application> + """ + ) + ); + } + + @Test + void interceptLeavesNonCamelXmlAlone() { + //language=xml + rewriteRun( + spec -> spec.recipe(new XmlDsl410Recipe()), + xml( + """ + <pipeline xmlns="http://example.com/schema/pipeline"> + <intercept> + <when> + <simple>true</simple> + </when> + </intercept> + </pipeline> + """ + ) + ); + } + + @Test + void loadBalanceLeavesNonCamelXmlAlone() { + //language=xml + rewriteRun( + spec -> spec.recipe(new XmlDsl47Recipe()), + xml( + """ + <cluster xmlns="http://example.com/schema/cluster"> + <loadBalance> + <roundRobin/> + </loadBalance> + </cluster> + """ + ) + ); + } + + @Test + void componentPropertyLeavesNonCamelXmlAlone() { + //language=xml + rewriteRun( + spec -> spec.recipe(new ReplacePropertyInComponentXml("netty-http", "keyStoreFile", "keyStoreResource", "file:")), + xml( + """ + <deployment xmlns="http://example.com/schema/deployment"> + <route> + <from uri="netty-http:https://0.0.0.0:8443/service?keyStoreFile=/opt/keystore.jks"/> + </route> + </deployment> + """ + ) + ); + } + + @Test + void dataFormatPropertyLeavesNonCamelXmlAlone() { + //language=xml + rewriteRun( + spec -> spec.recipe(new ReplacePropertyInDataFormatXml("csv", "formatRef", "format")), + xml( + """ + <deployment xmlns="http://example.com/schema/deployment"> + <marshal> + <csv formatRef="myCsvFormat"/> + </marshal> + </deployment> + """ + ) + ); + } + + @Test + void componentUriLeavesNonCamelXmlAlone() { + //language=xml + rewriteRun( + spec -> spec.recipe(new ChangeXmlComponentUriRecipe("^langchain4j-tools:(.*)$", "ai-tool:${1}", true)), + xml( + """ + <deployment xmlns="http://example.com/schema/deployment"> + <route> + <from uri="langchain4j-tools:weather?tags=weather"/> + </route> + </deployment> + """ + ) + ); + } +}
