[
https://issues.apache.org/jira/browse/CXF-9166?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
maggie updated CXF-9166:
------------------------
Component/s: JAX-RS
> RejectedExecutionException thrown by CXF WebClient due to terminated
> ThreadPoolExecutor in HTTPConduit
> ------------------------------------------------------------------------------------------------------
>
> Key: CXF-9166
> URL: https://issues.apache.org/jira/browse/CXF-9166
> Project: CXF
> Issue Type: Bug
> Components: JAX-RS
> Affects Versions: 4.1.2
> Reporter: maggie
> Priority: Major
>
> We encountered a {{RejectedExecutionException}} when invoking a RESTful web
> service using CXF WebClient. The error appears to originate from
> {{HTTPConduit}} when attempting to send an asynchronous request via Java's
> {{{}HttpClient{}}}. The underlying {{ThreadPoolExecutor}} is in a terminated
> state, causing the task to be rejected.
> This issue occurs intermittently under load and appears to be related to
> CXF's use of {{CompletableFuture.completeAsync()}} and the lifecycle of the
> internal executor.
>
> The stack trace:
> ] PhaseInterceptorChain - Interceptor for \{https://
> xxx.abc.com:443}WebClient has thrown exception, unwinding now
> java.util.concurrent.RejectedExecutionException: RejectedExecutionException
> invoking https://xxx.abc.com:443/test: Task
> java.util.concurrent.CompletableFuture$AsyncSupply@bbffb919 rejected from
> java.util.concurrent.ThreadPoolExecutor@fb02c6e9[Terminated, pool size = 0,
> active threads = 0, queued tasks = 0, completed tasks = 12387] at
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
> Method) ~[?:?] at
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown
> Source) ~[?:?] at
> java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown
> Source) ~[?:?] at
> java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Unknown Source)
> ~[?:?] at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
> ~[?:?] at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1452)
> ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1438)
> ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] at
> org.apache.cxf.transport.http.HttpClientHTTPConduit$HttpClientWrappedOutputStream.close(HttpClientHTTPConduit.java:839)
> ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] at
> org.apache.cxf.io.AbstractWrappedOutputStream.close(AbstractWrappedOutputStream.java:77)
> ~[cxf-core-4.1.2.jar:4.1.2] at
> org.apache.cxf.ext.logging.LoggingOutputStream.postClose(LoggingOutputStream.java:53)
> ~[cxf-rt-features-logging-4.1.2.jar:4.1.2] at
> org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:243)
> ~[cxf-core-4.1.2.jar:4.1.2] at
> org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
> ~[cxf-core-4.1.2.jar:4.1.2] at
> org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:717)
> ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] at
> org.apache.cxf.transport.http.HttpClientHTTPConduit.close(HttpClientHTTPConduit.java:264)
> ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] at
> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:63)
> ~[cxf-core-4.1.2.jar:4.1.2] at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
> ~[cxf-core-4.1.2.jar:4.1.2] at
> org.apache.cxf.jaxrs.client.AbstractClient.doRunInterceptorChain(AbstractClient.java:760)
> ~[cxf-rt-rs-client-4.1.2.jar:4.1.2] at
> org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1088)
> ~[cxf-rt-rs-client-4.1.2.jar:4.1.2] at
> org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:934)
> ~[cxf-rt-rs-client-4.1.2.jar:4.1.2] at
> org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:903)
> ~[cxf-rt-rs-client-4.1.2.jar:4.1.2] at
> org.apache.cxf.jaxrs.client.WebClient.invoke(WebClient.java:366)
> ~[cxf-rt-rs-client-4.1.2.jar:4.1.2] at
> org.apache.camel.component.cxf.jaxrs.CxfRsProducer.invokeHttpClient(CxfRsProducer.java:339)
> ~[camel-cxf-rest-4.10.6.jar:4.10.6] at
> org.apache.camel.component.cxf.jaxrs.CxfRsProducer.process(CxfRsProducer.java:103)
> ~[camel-cxf-rest-4.10.6.jar:4.10.6] at
> org.apache.camel.support.SynchronousDelegateProducer.process(SynchronousDelegateProducer.java:48)
> ~[camel-support-4.10.6.jar:4.10.6] at
> org.apache.camel.support.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:65)
> ~[camel-support-4.10.6.jar:4.10.6] at
> org.apache.camel.processor.SendProcessor.sendUsingProducer(SendProcessor.java:252)
> ~[camel-core-processor-4.10.6.jar:4.10.6] at
> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:157)
> ~[camel-core-processor-4.10.6.jar:4.10.6] at
> org.apache.camel.impl.engine.CamelInternalProcessor.processNonTransacted(CamelInternalProcessor.java:347)
> ~[camel-base-engine-4.10.6.jar:4.10.6] at
> org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:323)
> ~[camel-base-engine-4.10.6.jar:4.10.6] at
> org.apache.camel.processor.TryProcessor$TryState.run(TryProcessor.java:115)
> ~[camel-core-processor-4.10.6.jar:4.10.6] at
> org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:199)
> ~[camel-base-engine-4.10.6.jar:4.10.6] at
> org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:189)
> ~[camel-base-engine-4.10.6.jar:4.10.6] at
> org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:166)
> ~[camel-base-engine-4.10.6.jar:4.10.6] at
> org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)
> ~[camel-base-engine-4.10.6.jar:4.10.6] at
> org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:59)
> ~[camel-base-engine-4.10.6.jar:4.10.6] at
> org.apache.camel.processor.Pipeline.process(Pipeline.java:163)
> ~[camel-core-processor-4.10.6.jar:4.10.6] at
> org.apache.camel.impl.engine.CamelInternalProcessor.processNonTransacted(CamelInternalProcessor.java:347)
> ~[camel-base-engine-4.10.6.jar:4.10.6] at
> org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:323)
> ~[camel-base-engine-4.10.6.jar:4.10.6] at
> org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:102)
> ~[camel-direct-4.10.6.jar:4.10.6] at
> org.apache.camel.impl.engine.SharedCamelInternalProcessor.processNonTransacted(SharedCamelInternalProcessor.java:156)
> ~[camel-base-engine-4.10.6.jar:4.10.6] at
> org.apache.camel.impl.engine.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:133)
> ~[camel-base-engine-4.10.6.jar:4.10.6] at
> org.apache.camel.support.cache.DefaultProducerCache.asyncDispatchExchange(DefaultProducerCache.java:320)
> ~[camel-support-4.10.6.jar:4.10.6] at
> org.apache.camel.support.cache.DefaultProducerCache.lambda$doAsyncSendExchange$0(DefaultProducerCache.java:217)
> ~[camel-support-4.10.6.jar:4.10.6] at
> org.apache.camel.support.cache.DefaultProducerCache.doInAsyncProducer(DefaultProducerCache.java:281)
> ~[camel-support-4.10.6.jar:4.10.6] at
> org.apache.camel.support.cache.DefaultProducerCache.doAsyncSendExchange(DefaultProducerCache.java:226)
> ~[camel-support-4.10.6.jar:4.10.6] at
> org.apache.camel.support.cache.DefaultProducerCache.asyncSendExchange(DefaultProducerCache.java:207)
> ~[camel-support-4.10.6.jar:4.10.6] at
> org.apache.camel.impl.engine.DefaultProducerTemplate.lambda$asyncSendExchange$3(DefaultProducerTemplate.java:745)
> ~[camel-base-engine-4.10.6.jar:4.10.6] at
> java.base/java.util.concurrent.FutureTask.run(Unknown Source) [?:?] at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
> [?:?] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
> Source) [?:?] at java.base/java.lang.Thread.run(Unknown Source) [?:?] Caused
> by: java.util.concurrent.RejectedExecutionException: Task
> java.util.concurrent.CompletableFuture$AsyncSupply@bbffb919 rejected from
> java.util.concurrent.ThreadPoolExecutor@fb02c6e9[Terminated, pool size = 0,
> active threads = 0, queued tasks = 0, completed tasks = 12387] at
> java.base/java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(Unknown
> Source) ~[?:?] at
> java.base/java.util.concurrent.ThreadPoolExecutor.reject(Unknown Source)
> ~[?:?] at java.base/java.util.concurrent.ThreadPoolExecutor.execute(Unknown
> Source) ~[?:?] at
> java.base/java.util.concurrent.CompletableFuture.completeAsync(Unknown
> Source) ~[?:?] at
> java.net.http/jdk.internal.net.http.MultiExchange.responseAsync(Unknown
> Source) ~[java.net.http:?] at
> java.net.http/jdk.internal.net.http.HttpClientImpl.sendAsync(Unknown Source)
> ~[java.net.http:?] at
> java.net.http/jdk.internal.net.http.HttpClientImpl.sendAsync(Unknown Source)
> ~[java.net.http:?] at
> java.net.http/jdk.internal.net.http.HttpClientImpl.sendAsync(Unknown Source)
> ~[java.net.http:?] at
> java.net.http/jdk.internal.net.http.HttpClientFacade.sendAsync(Unknown
> Source) ~[java.net.http:?] at
> org.apache.cxf.transport.http.HttpClientHTTPConduit$HttpClientWrappedOutputStream.setProtocolHeaders(HttpClientHTTPConduit.java:1040)
> ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1373)
> ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1353)
> ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] at
> org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:47)
> ~[cxf-core-4.1.2.jar:4.1.2] at
> org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69)
> ~[cxf-core-4.1.2.jar:4.1.2] at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1405)
> ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] ... 44 more
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)