You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2026/01/27 14:09:26 UTC
(camel) 01/02: CAMEL-22849: Add tests for regex special characters in AS2 wildcard patterns
This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch fix/CAMEL-22849
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 5d6ec2f71968c3fdb840b25c5a114bc6eff30425
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Tue Jan 27 14:48:50 2026 +0100
CAMEL-22849: Add tests for regex special characters in AS2 wildcard patterns
---
.../component/as2/AS2ServerWildcardPatternIT.java | 68 ++++++++++++++++++++++
1 file changed, 68 insertions(+)
diff --git a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerWildcardPatternIT.java b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerWildcardPatternIT.java
index 8037fe00073c..8743ca36838c 100644
--- a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerWildcardPatternIT.java
+++ b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerWildcardPatternIT.java
@@ -57,6 +57,14 @@ public class AS2ServerWildcardPatternIT extends AS2ServerSecTestBase {
// Consumer with different path - should not match /consumer/* requests
from("as2://server/listen?requestUriPattern=/admin/*")
.to("mock:adminConsumer");
+
+ // Consumer with regex special characters in pattern - should be treated as literals
+ from("as2://server/listen?requestUriPattern=/api/v1.2/endpoint")
+ .to("mock:regexSpecialCharsConsumer");
+
+ // Consumer with wildcard and special characters
+ from("as2://server/listen?requestUriPattern=/api/v2+3/*")
+ .to("mock:regexSpecialCharsWildcardConsumer");
}
};
}
@@ -173,6 +181,66 @@ public class AS2ServerWildcardPatternIT extends AS2ServerSecTestBase {
assertEquals(EDI_MESSAGE, exchange.getIn().getBody(String.class));
}
+ @Test
+ public void testRegexSpecialCharactersTreatedAsLiterals() throws Exception {
+ MockEndpoint regexEndpoint = getMockEndpoint("mock:regexSpecialCharsConsumer");
+ regexEndpoint.expectedMessageCount(1);
+
+ // Send to /api/v1.2/endpoint - the dot should be treated as a literal dot, not regex "any character"
+ HttpCoreContext context = sendToPath("/api/v1.2/endpoint", AS2MessageStructure.PLAIN);
+
+ verifyOkResponse(context);
+ regexEndpoint.assertIsSatisfied();
+
+ // Verify the message was received
+ Exchange exchange = regexEndpoint.getReceivedExchanges().get(0);
+ assertNotNull(exchange);
+ assertEquals(EDI_MESSAGE, exchange.getIn().getBody(String.class));
+ }
+
+ @Test
+ public void testRegexSpecialCharactersNotMatchedAsRegex() throws Exception {
+ MockEndpoint regexEndpoint = getMockEndpoint("mock:regexSpecialCharsConsumer");
+ regexEndpoint.expectedMessageCount(0);
+
+ // Send to /api/v1X2/endpoint - should NOT match because dot is literal, not regex "any character"
+ // If Pattern.quote() wasn't working, this would incorrectly match
+ HttpCoreContext context = sendToPath("/api/v1X2/endpoint", AS2MessageStructure.PLAIN);
+
+ // This should fail to find a matching consumer, but we're just verifying it doesn't match the wrong one
+ regexEndpoint.assertIsSatisfied();
+ }
+
+ @Test
+ public void testRegexSpecialCharactersWithWildcard() throws Exception {
+ MockEndpoint regexWildcardEndpoint = getMockEndpoint("mock:regexSpecialCharsWildcardConsumer");
+ regexWildcardEndpoint.expectedMessageCount(1);
+
+ // Send to /api/v2+3/orders - the plus should be treated as a literal plus, not regex "one or more"
+ HttpCoreContext context = sendToPath("/api/v2+3/orders", AS2MessageStructure.PLAIN);
+
+ verifyOkResponse(context);
+ regexWildcardEndpoint.assertIsSatisfied();
+
+ // Verify the message was received
+ Exchange exchange = regexWildcardEndpoint.getReceivedExchanges().get(0);
+ assertNotNull(exchange);
+ assertEquals(EDI_MESSAGE, exchange.getIn().getBody(String.class));
+ }
+
+ @Test
+ public void testRegexSpecialCharactersWithWildcardNotMatchedAsRegex() throws Exception {
+ MockEndpoint regexWildcardEndpoint = getMockEndpoint("mock:regexSpecialCharsWildcardConsumer");
+ regexWildcardEndpoint.expectedMessageCount(0);
+
+ // Send to /api/v23/orders - should NOT match because plus is literal, not regex "one or more"
+ // If Pattern.quote() wasn't working, this would incorrectly match
+ HttpCoreContext context = sendToPath("/api/v23/orders", AS2MessageStructure.PLAIN);
+
+ // This should fail to find a matching consumer, but we're just verifying it doesn't match the wrong one
+ regexWildcardEndpoint.assertIsSatisfied();
+ }
+
/**
* Helper method to send a message to a specific path
*/