You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2026/02/24 18:35:00 UTC
[jira] [Updated] (CAMEL-23071) AS2 client should provide endpoint parameter to optionally enable Expect: 100-continue
[ https://issues.apache.org/jira/browse/CAMEL-23071?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen updated CAMEL-23071:
--------------------------------
Priority: Minor (was: Major)
> AS2 client should provide endpoint parameter to optionally enable Expect: 100-continue
> --------------------------------------------------------------------------------------
>
> Key: CAMEL-23071
> URL: https://issues.apache.org/jira/browse/CAMEL-23071
> Project: Camel
> Issue Type: Improvement
> Components: camel-as2
> Affects Versions: 4.18.0
> Reporter: Reto Peter
> Priority: Minor
>
> h3. Summary
> The Camel AS2 client component has no endpoint parameter to control the \{{Expect: 100-continue}} HTTP header behavior. In Camel versions 4.10–4.17, \{{RequestExpectContinue}} was hardcoded in the \{{HttpProcessor}} chain with no way to disable it, causing a
> 3-second delay per message when the remote server didn't support 100-continue. In Camel 4.18.0, the interceptor was silently removed — now there is no way to *enable* it either.
> The \{{Expect: 100-continue}} protocol is useful in certain scenarios (large payloads, servers that may reject based on headers alone), so this should be a configurable option rather than hardcoded on or off.
> h3. History
> || Camel Version || Behavior ||
> | 4.10.x – 4.17.x | \{{RequestExpectContinue}} hardcoded in \{{AS2ClientConnection}} HttpProcessor chain — always ON, no option to disable |
> | 4.18.0 | \{{RequestExpectContinue}} removed from chain — always OFF, no option to enable |
> h3. Problem (Camel 4.10–4.17)
> \{{AS2ClientConnection}} builds its \{{HttpProcessor}} with a hardcoded \{{RequestExpectContinue}} interceptor:
> \{code:java|title=AS2ClientConnection.java (Camel 4.17.0)}
> httpProcessor = HttpProcessorBuilder.create()
> .add(new RequestAS2(as2Version, clientFqdn))
> .add(new RequestMDN())
> .add(new RequestTargetHost())
> .add(new RequestUserAgent(this.userAgent))
> .add(new RequestDate())
> .add(new RequestContent(true))
> .add(new RequestExpectContinue()) // <-- hardcoded, no option to disable
> .add(new RequestConnControl()).build();
> \{code}
> This causes every outbound AS2 message to include the \{{Expect: 100-continue}} header. When the remote AS2 server (e.g., OpenAS2) does not implement the 100-continue protocol, HttpCore5's \{{HttpRequestExecutor}} waits for a \{{100 Continue}} response that never
> comes, timing out after *3 seconds* (\{{DEFAULT_WAIT_FOR_CONTINUE}}) before sending the message body.
> For high-volume AS2 systems this adds significant latency — e.g., sending 100 messages per day wastes 5 minutes just on expect-continue timeouts.
> h3. Current State (Camel 4.18.0)
> \{{RequestExpectContinue}} was removed from the chain entirely:
> \{code:java|title=AS2ClientConnection.java (Camel 4.18.0)}
> httpProcessor = HttpProcessorBuilder.create()
> .add(new RequestAS2(as2Version, clientFqdn))
> .add(new RequestMDN())
> .add(new RequestTargetHost())
> .add(new RequestUserAgent(this.userAgent))
> .add(new RequestDate())
> .add(new RequestContent(true))
> .add(new RequestConnControl()).build();
> // RequestExpectContinue removed — no option to enable
> \{code}
> This fixes the 3-second delay problem but removes the ability to use 100-continue for partners that do support it.
> h3. Proposed Fix
> Add a new AS2 endpoint parameter \{{expectContinue}} (default: \{{false}} to maintain 4.18.0 behavior):
> \{code:java|title=AS2ClientConnection.java (proposed)}
> HttpProcessorBuilder builder = HttpProcessorBuilder.create()
> .add(new RequestAS2(as2Version, clientFqdn))
> .add(new RequestMDN())
> .add(new RequestTargetHost())
> .add(new RequestUserAgent(this.userAgent))
> .add(new RequestDate())
> .add(new RequestContent(true))
> .add(new RequestConnControl());
> if (expectContinue) {
> builder.add(new RequestExpectContinue());
> }
> httpProcessor = builder.build();
> \{code}
> The parameter should be exposed on the AS2 endpoint configuration so users can set it per route:
> \{code}
> as2://client/send?...&expectContinue=true
> \{code}
> h3. Impact
> - *No breaking change* — default \{{false}} preserves current 4.18.0 behavior
> - Partners that support 100-continue can benefit from it (early rejection, bandwidth savings on large payloads)
> - Partners that don't support it (OpenAS2 and others) continue to work without the 3-second delay
--
This message was sent by Atlassian Jira
(v8.20.10#820010)