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)