Great, thanks for that
________________________________________ From: Federico Mariani <[email protected]> Sent: Friday, September 18, 2026 09:52 To: [email protected] <[email protected]> Subject: Re: Camel 4.21.0 Rest Issues [You don't often get email from [email protected]. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ] CAUTION: This email is from an external source, which means the sender is not from NECSWS. DO NOT click links or open attachments if you were not expecting the email. Only open these if you are sure the sender is genuine, and the content is safe. If you are not sure DO NOT open any links or attachments. If you think it is suspicious, click 'Report Phishing' in Outlook. Hello, Thanks for the reproducer, it really helped understanding the problem. And it is a real problem, I've just opened https://issues.apache.org/jira/browse/CAMEL-24811 and the PR https://cas5-0-urlprotect.trendmicro.com:443/wis/clicktime/v1/query?url=https%3a%2f%2fgithub.com%2fapache%2fcamel%2fpull%2f26584&umid=e9a4b26a-b7ce-4b27-9e7a-ab2d2ef3ee6e&rct=1789721564&auth=c97f949d29e159b451e869bc0bd61c52842ec07c-2774029cfbc4a3a745b72e859ee902a683ac6c30 (currently in review) that fixes it. Once merged, we'll backport the fix to the 4.18.x and 4.22.x maintenance branches as well as main (4.23.0). The issue is that a CompletableFuture is invoked into a void method, and nothing wait for it to complete, therefore you are getting the response recycled by tomcat. But there is a workaround that is kind of described in https://camel.apache.org/components/4.22.x/servlet-component.html#_servlet_asynchronous_support add an executorRef init-param to your CamelHttpTransportServlet in web.xml, pointing at an Executor bean registered in your Spring context. Keep async=true and remove forceAwait (or set it to false). Greetings, Federico Il giorno gio 17 set 2026 alle ore 16:28 Alistair Higdon < [email protected]> ha scritto: > Hi > > We are upgrading from Camel 2.24.2 to 4.21.0(4.22.0 has the same issue). > We are also moving from Java 11 to Java 25, and we are moving from Tomcat 9 > to Tomcat 11 too. > > We have a service(single war) that exposes Soap and Rest endpoints, and > runs in Tomcat. > > Our web.xml is configured to use CamelHttpTransportServlet async. > > After upgrading, if Rest is configured to use servlet, and if our Rest > endpoint receives a couple of requests close together we get this stack > trace. > > 17-Sept-2026 14:23:25.794|ERROR|:|CamelHttpTransportServlet:431 Error > processing request > java.lang.IllegalStateException: The response object has been recycled and > is no longer associated with this facade > at > org.apache.catalina.connector.ResponseFacade.checkFacade(ResponseFacade.java:427) > at > org.apache.catalina.connector.ResponseFacade.isCommitted(ResponseFacade.java:190) > at > org.apache.catalina.connector.ResponseFacade.setStatus(ResponseFacade.java:360) > at > org.apache.camel.http.common.DefaultHttpBinding.doWriteResponse(DefaultHttpBinding.java:432) > at > org.apache.camel.http.common.DefaultHttpBinding.writeResponse(DefaultHttpBinding.java:381) > at > org.apache.camel.http.common.CamelServlet.afterProcess(CamelServlet.java:419) > at > org.apache.camel.http.common.CamelServlet.lambda$tryAsyncProcess$0(CamelServlet.java:378) > at > java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:884) > at > java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:862) > at > java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:531) > at > java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2206) > at > org.apache.camel.support.AsyncCallbackToCompletableFutureAdapter.done(AsyncCallbackToCompletableFutureAdapter.java:53) > at org.apache.camel.AsyncCallback.run(AsyncCallback.java:46) > at > org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:202) > at > org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:192) > at > org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:169) > at > org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:143) > at > org.apache.camel.impl.engine.DefaultReactiveExecutor.schedule(DefaultReactiveExecutor.java:54) > at > org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.lambda$doRun$0(RedeliveryErrorHandler.java:1112) > at > org.apache.camel.component.cxf.jaxws.CxfClientCallback.handleResponse(CxfClientCallback.java:75) > at > org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:949) > at > org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1762) > at > org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream$1.run(HTTPConduit.java:1238) > at > org.apache.cxf.workqueue.AutomaticWorkQueueImpl$3.run(AutomaticWorkQueueImpl.java:414) > at > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090) > at > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) > at > org.apache.cxf.workqueue.AutomaticWorkQueueImpl$AWQThreadFactory$1.run(AutomaticWorkQueueImpl.java:347) > at java.base/java.lang.Thread.run(Thread.java:1474) > > > A single request works fine. If Rest is configured to use Jetty it doesnt > error. > > As part of processing the rest call, we make Soap calls to other > services. Without the Soap call it also works fine. > > If I change the CamelHttpTransportServlet to not be async, or set > forceAwait to be true, then the stack trace doesnt occur, but the return > from the Rest call has a Content-Type of XML, and exposes more information > than I would like about the internal workings of the service(Note using > Jetty has the same effect). See below for example response > > HTTP/1.1 200 > accept-encoding: gzip,deflate > user-agent: Apache-HttpClient/4.5.5 (Java/17.0.12) > ResponseContext: > org.apache.cxf.message.Message.PROTOCOL_HEADERS={Accept=[*/*], > accept-encoding=[gzip,deflate], Content-Length=[249], > content-type=[text/xml;charset=UTF-8], date=[Thu, 17 Sep 2026 14:03:43 > GMT], gemsessionid=[49b82c67-0674-4cf1-85db-c8ab72bd8c72], > host=[localhost:8888], includetaskswithnopermissiontoperform=[true], > SOAPAction=["CamelRestServletIssueService"], > user-agent=[Apache-HttpClient/4.5.5 (Java/17.0.12)]} > ResponseContext: org.apache.cxf.transport.Conduit=conduit: class > org.apache.cxf.transport.http.HttpClientHTTPConduit238686806target: > http://localhost:8888/CamelRestServletIssueService/example > ResponseContext: jakarta.xml.ws.http.response.code=null > ResponseContext: org.apache.cxf.service.model.MessageInfo=[MessageInfo > OUTPUT: { > http://example.com/camelrestservletissueservice}CamelRestServletIssueServiceResponse > ] > ResponseContext: jakarta.xml.ws.wsdl.interface={ > http://example.com/camelrestservletissueservice}CamelRestServletIssueServicePort > ResponseContext: > org.apache.cxf.binding.soap.SoapVersion=org.apache.cxf.binding.soap.Soap11@35b6d490 > ResponseContext: envelope.events=[[Stax Event #13]] > ResponseContext: org.apache.cxf.headers.Header.list=[] > ResponseContext: jakarta.xml.ws.wsdl.service={ > http://example.com/camelrestservletissueservice}CamelRestServletIssueServicePortService > ResponseContext: schema-validation-enabled=NONE > ResponseContext: body.events=[] > ResponseContext: org.apache.cxf.ws.policy.AssertionInfoMap={} > ResponseContext: org.apache.cxf.client=true > ResponseContext: envelope.prefix=soap > ResponseContext: jakarta.xml.ws.wsdl.operation={ > http://example.com/camelrestservletissueservice}CamelRestServletIssueService > ResponseContext: jakarta.xml.ws.wsdl.port={ > http://example.com/camelrestservletissueservice}CamelRestServletIssueServicePortPort > ResponseContext: jakarta.xml.ws.wsdl.description= > http://localhost:8888/CamelRestServletIssueService/example?wsdl > ResponseContext: org.apache.cxf.message.Message.ENCODING=UTF-8 > ResponseContext: org.apache.cxf.message.inbound=true > ResponseContext: org.apache.cxf.message.Message.RESPONSE_CODE=200 > ResponseContext: Content-Type=text/xml;charset=UTF-8 > ResponseContext: body.prefix=soap > Accept: */* > SOAPAction: CamelRestServletIssueService > Content-Type: text/xml;charset=UTF-8 > Transfer-Encoding: chunked > Date: Thu, 17 Sep 2026 14:03:45 GMT > Keep-Alive: timeout=20 > Connection: keep-alive > > {"example": "Output"} > > > I have attached a zip containing two maven projects to try to show the > issue(when both projects are running in tomcat just put this address in the > browser/SoapUI or equivalent, > [http://host:port/CamelRestServletIssue/rest/example)]http://host:port/CamelRestServletIssue/rest/example). > Although I can reproduce the issue with the stack trace when the > CamelRestServletIssue service calls a Soap service from our project, I cant > provide that Soap service, so I have provided CamelRestServletIssueService > as a service thats called, and the stack trace doesnt occur using that(even > though there is nothing obvious as to why). What does happen in that > instance though, is as soon as it has a return from the Soap service it > returns to client who called the rest service without running the code in > the route after(the code runs after it returns to the client). > > Again if I change the CamelHttpTransportServlet to not be async, or set > forceAwait to be true it works, but the return from the Rest call has a > Content-Type of XML, and exposes more information than I would like about > the internal workings of the service as above. > > If forceAwait has to be true in 4.21.0 thats fine, but the mimeType being > Xml, and extra data in the response is an issue for us. > > Any ideas? > > > This email is sent on behalf of NEC Software Solutions UK Limited and its > associated companies (together "NEC Software Solutions") and is strictly > confidential and intended solely for the addressee(s). Full details of > those companies can be found at > https://www.necsws.com/group-company-details/ If you are not the intended > recipient of this email you must: (i) not disclose, copy or distribute its > contents to any other person nor use its contents in any way or you may be > acting unlawfully; (ii) contact NEC Software Solutions immediately on > +44(0)1442 > 768445 <+44%201442%20768445> quoting the name of the sender and the > addressee then delete it from your system. NEC Software Solutions has taken > reasonable precautions to ensure that no viruses are contained in this > email, but does not accept any responsibility once this email has been > transmitted. You should scan attachments (if any) for viruses. > This email is sent on behalf of NEC Software Solutions UK Limited and its associated companies (together "NEC Software Solutions") and is strictly confidential and intended solely for the addressee(s). Full details of those companies can be found at https://www.necsws.com/group-company-details/ If you are not the intended recipient of this email you must: (i) not disclose, copy or distribute its contents to any other person nor use its contents in any way or you may be acting unlawfully; (ii) contact NEC Software Solutions immediately on +44(0)1442 768445 quoting the name of the sender and the addressee then delete it from your system. NEC Software Solutions has taken reasonable precautions to ensure that no viruses are contained in this email, but does not accept any responsibility once this email has been transmitted. You should scan attachments (if any) for viruses.
