[
https://issues.apache.org/jira/browse/CAMEL-24435?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on CAMEL-24435 started by Andrea Cosentino.
------------------------------------------------
> camel-as2 - asynchronous MDN context attributes are reused across requests on
> the same connection
> -------------------------------------------------------------------------------------------------
>
> Key: CAMEL-24435
> URL: https://issues.apache.org/jira/browse/CAMEL-24435
> Project: Camel
> Issue Type: Bug
> Components: camel-as2
> Reporter: Andrea Cosentino
> Assignee: Andrea Cosentino
> Priority: Major
> Fix For: 4.23.0
>
>
> The AS2 request handler creates its HttpContext once, outside the request
> loop:
> {code:java}
> @Override
> public void run() {
> LOG.info("Processing new AS2 request");
> final HttpContext context = HttpCoreContext.create();
> try {
> while (!Thread.interrupted()) {
> this.httpService.handleRequest(this.serverConnection, context);
> HttpCoreContext coreContext =
> HttpCoreContext.castOrCreate(context);
> ...
> String recipientAddress =
> coreContext.getAttribute(AS2AsynchronousMDNManager.RECIPIENT_ADDRESS,
> String.class);
> if (recipientAddress != null && config != null) {
> // Send the MDN asynchronously.
> {code}
> The same context object is reused for every request handled on that
> connection. ResponseMDN sets RECIPIENT_ADDRESS and ASYNCHRONOUS_MDN on it
> while handling a request that asked for an asynchronous receipt, and nothing
> removes them afterwards.
> A subsequent request on the same connection that does *not* ask for an
> asynchronous MDN therefore still finds a non-null recipientAddress, and the
> handler dispatches another asynchronous MDN - carrying whatever multipart
> report is still stored under ASYNCHRONOUS_MDN - to the address supplied by
> the earlier request.
> Proposal: clear RECIPIENT_ADDRESS and ASYNCHRONOUS_MDN from the context after
> the send block, or create a fresh HttpCoreContext for each iteration of the
> loop. A test that drives two requests over one connection, the first
> requesting an asynchronous MDN and the second not, would cover it.
> Split out of CAMEL-24429, which was originally filed covering both this and
> the ResponseMDN instance-field issue. They share the theme of per-request
> state outliving its request, but they are separate defects with separate
> fixes, and keeping them apart keeps CAMEL-24429's scope precise.
> Note this touches the same listener loop as CAMEL-24417, so the two changes
> should be sequenced to avoid a conflict.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)