maggie created CXF-9166:
---------------------------
Summary: 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
Affects Versions: 4.1.2
Reporter: maggie
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)