From 5e886ffbc9826f284d23930813e3cbd796443b5e Mon Sep 17 00:00:00 2001 From: John Burns Date: Wed, 27 May 2026 11:04:06 -0500 Subject: [PATCH] exclude javax xml API from javax rule fixes #51 --- .../netflix/nebula/archrules/javax/JavaxRule.java | 9 ++++++++- .../nebula/archrules/javax/JavaxRuleTest.java | 13 +++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/archrules-javax/src/archRules/java/com/netflix/nebula/archrules/javax/JavaxRule.java b/archrules-javax/src/archRules/java/com/netflix/nebula/archrules/javax/JavaxRule.java index f7c89dc..9850876 100644 --- a/archrules-javax/src/archRules/java/com/netflix/nebula/archrules/javax/JavaxRule.java +++ b/archrules-javax/src/archRules/java/com/netflix/nebula/archrules/javax/JavaxRule.java @@ -9,6 +9,9 @@ import java.util.Collections; import java.util.Map; +import static com.tngtech.archunit.base.DescribedPredicate.doesNot; +import static com.tngtech.archunit.core.domain.JavaClass.Predicates.resideInAPackage; + @NullMarked public class JavaxRule implements ArchRulesService { /** @@ -16,7 +19,11 @@ public class JavaxRule implements ArchRulesService { */ public static final ArchRule javaxRule = ArchRuleDefinition.priority(Priority.MEDIUM) .noClasses() - .should().dependOnClassesThat().resideInAPackage("javax..") + .should() + .dependOnClassesThat( + resideInAPackage("javax..") + .and(doesNot(resideInAPackage("javax.xml.."))) + ) .allowEmptyShould(true) .as("No code should use Javax library") .because("usage of Javax is deprecated. Please migrate to Jakarta."); diff --git a/archrules-javax/src/archRulesTest/java/com/netflix/nebula/archrules/javax/JavaxRuleTest.java b/archrules-javax/src/archRulesTest/java/com/netflix/nebula/archrules/javax/JavaxRuleTest.java index ef5a9be..3a0e0c4 100644 --- a/archrules-javax/src/archRulesTest/java/com/netflix/nebula/archrules/javax/JavaxRuleTest.java +++ b/archrules-javax/src/archRulesTest/java/com/netflix/nebula/archrules/javax/JavaxRuleTest.java @@ -9,6 +9,7 @@ import javax.servlet.http.HttpServlet; import javax.ws.rs.GET; import javax.ws.rs.Path; +import javax.xml.namespace.QName; import static org.assertj.core.api.Assertions.assertThat; @@ -31,6 +32,13 @@ public void test_javax_rest_usage() { assertThat(result.getFailureReport().getDetails()).hasSize(2); } + @Test + public void test_javax_xml_usage() { + final EvaluationResult result = Runner.check(JavaxRule.javaxRule, JavaxXmlUsage.class); + LOG.info(result.getFailureReport().toString()); + assertThat(result.hasViolation()).isFalse(); + } + @Test public void test_jakarta_usage() { final EvaluationResult result = Runner.check(JavaxRule.javaxRule, JakartaUsage.class); @@ -55,4 +63,9 @@ public String hello() { public static class JakartaUsage extends jakarta.servlet.http.HttpServlet { } + @SuppressWarnings("unused") + public static class JavaxXmlUsage { + QName qName; + } + }