Nikita created CAMEL-22849:
------------------------------

             Summary: AS2 server/listen does not resolve `requestUriPattern` 
wildcards when selecting consumer configuration
                 Key: CAMEL-22849
                 URL: https://issues.apache.org/jira/browse/CAMEL-22849
             Project: Camel
          Issue Type: Bug
    Affects Versions: 4.14.3
         Environment: *Environment*
 * Camel version: 4.14.x (observed on {*}4.14.3{*})
 * Previous working version: 3.22.x
 * Component: camel-as2
 * Server endpoint: as2:server/listen
 * Configuration example:
 ** requestUriPattern={*}/receiver/*{*}
            Reporter: Nikita
         Attachments: AS2.png

AS2 server routes configured with *requestUriPattern* wildcards (e.g. 
{*}/receiver/*{*}) no longer resolve the correct *AS2ConsumerConfiguration* for 
incoming requests.
When an AS2 request is sent to a concrete path like */receiver/test-1,* the 
server logs:
{code:java}
No AS2 consumer configuration found for canonical path: /receiver/test-1.
Encrypted messages will likely fail.{code}
Debugging shows that *AS2ServerConnection.consumerConfigurations* contains the 
configuration under the key */receiver/*,* but *getConfigurationForPath(String 
path)* performs an exact map lookup using the resolved request path 
({*}/receiver/test-1{*}), which results in null.
This behavior breaks encrypted and/or signed AS2 messages, because the server 
cannot locate the appropriate consumer configuration for decryption and 
signature validation.
This worked correctly in Camel, for example, 3.22.x and appears to be a 
regression in Camel 4.14.3.

*Environment*
 * Camel version: 4.14.x (observed on {*}4.14.3{*})
 * Previous working version: 3.22.x
 * Component: camel-as2
 * Server endpoint: as2:server/listen
 * Configuration example:
 ** requestUriPattern={*}/receiver/*{*}

*Steps to Reproduce*
 # Configure an AS2 server route with: 
as2("server/listen?requestUriPattern=/receiver/*&serverPortNumber=8190")
 # Enable encryption and/or signing on the server.
 # Send an AS2 request to: /receiver/test-1
 # Observe that the server logs a warning and does not apply the consumer 
configuration.

*Expected Result*

The AS2 server should resolve the consumer configuration when the incoming 
request path matches the configured *requestUriPattern* wildcard.

*Actual Result*

The server only attempts an exact match on the canonical request path and 
ignores wildcard patterns, resulting in no configuration being found.

*Suggested Solution*

Update *getConfigurationForPath(String path)* to support wildcard (pattern) 
matching instead of exact key lookup only.
If the incoming request path matches a configured pattern, return the 
corresponding *AS2ConsumerConfiguration* immediately.

*Conceptual example*

 
{code:java}
Optional<AS2ConsumerConfiguration> getConfigurationForPath(String path) {
    AS2ConsumerConfiguration exact = consumerConfigurations.get(path);
    if (exact != null) {
        return Optional.of(exact);
    }
    for (Map.Entry<String, AS2ConsumerConfiguration> entry : 
consumerConfigurations.entrySet()) {
        String pattern = entry.getKey(); // e.g. "/receiver/*"
        if (matches(pattern, path)) {
            return Optional.of(entry.getValue());
        }
    }
    return Optional.empty();
}
boolean matches(String pattern, String path) {
    // simple wildcard support, e.g. '*' matches any characters
}
{code}
This would restore compatibility with *requestUriPattern* behavior from Camel 
3.x and prevent encrypted AS2 messages from failing due to missing 
configuration.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to