[ 
https://issues.apache.org/jira/browse/CXF-9065?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17892823#comment-17892823
 ] 

Mehmet Can Cömert commented on CXF-9065:
----------------------------------------

Sorry for late answer, unfortunately I do not have a small application that can 
reproduce the issue.
We have an OSGI Application where Apache CXF Server is running to provide REST 
API and for OpenID Session management we call the endpoints of an OpenID 
Provider (Keycloak) with CXF Web Client libraries.
As we call the token endpoint for revoking the existing tokens to process 
logout, time to time this error occurs.

At first I toght it was an abnormality in one installation but it happened in 
different installations in different times therefore I wanted to report the 
issue.
In last 6 months it happened really rare, 2 or 3 times reported by users on 
different installations.

How it is triggered is not clear to me, maybe a double click on logout causes 
multiple threads to call "Client" object at the same time.
As a workaround we re-implemented the same functionality with another Web 
Client instead of CXF Web Client libraries.

Both of the places are a SSL delegate is calling a method with the same name 
from a proxy, somehow if delegate gets its own instance such as (this) as proxy 
this error can happen, but how a Wrapper gets itself, or a Wrapper that 
contains itself is also not clear to me.

> StackOverflow Exception during execution of WebClient POST Request on 
> SSLUtils class
> ------------------------------------------------------------------------------------
>
>                 Key: CXF-9065
>                 URL: https://issues.apache.org/jira/browse/CXF-9065
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 3.6.4
>            Reporter: Mehmet Can Cömert
>            Assignee: Andriy Redko
>            Priority: Major
>             Fix For: 3.6.5, 4.0.6
>
>
> I am trying to make a POST call by using CXF with following code:
> {code:java}
>         MultivaluedMap<String, String> map = new MultivaluedHashMap<String, 
> String>();
>         map.put("client_id", Arrays.asList(clientId));
>         map.put("client_secret", Arrays.asList(clientSecret));
>         map.put("token", Arrays.asList(token));
>         boolean result = false;
>         try {
>             Client client = getClientBuilder().build();
>             WebTarget target = client.target(revocationEndpoint);
>             Invocation.Builder tokenRequest = 
> target.request(MediaType.APPLICATION_JSON);
>             tokenRequest.cookie(cookie);
>             Response response = tokenRequest.post(Entity.entity(map, 
> MediaType.APPLICATION_FORM_URLENCODED_TYPE));
>             result = response.getStatus() == 200;
>         } catch (RuntimeException e) {
>             LOG.error("Token revocation for the logout has failed: " + 
> e.getMessage(), e);
>         }
> {code}
> Then I get a Stack Overflow Exception on SSL Utils 301:
> {code:java}
> Caused by: java.io.IOException: IOException invoking 
> https://some-server/realms/some-realm-default/protocol/openid-connect/revoke: 
> java.lang.StackOverflowError
>     at 
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>  Method)
>     at 
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
>     at 
> java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>     at 
> java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
>     at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1452)
>     at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1433)
>     at 
> org.apache.cxf.io.AbstractWrappedOutputStream.close(AbstractWrappedOutputStream.java:77)
>     at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
>     at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:717)
>     at 
> org.apache.cxf.transport.http.HttpClientHTTPConduit.close(HttpClientHTTPConduit.java:112)
>     at 
> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:63)
>     at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
>     at 
> org.apache.cxf.jaxrs.client.AbstractClient.doRunInterceptorChain(AbstractClient.java:710)
>     at 
> org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1086)
>     ... 69 common frames omitted
> Caused by: java.io.IOException: java.lang.StackOverflowError
>     at 
> org.apache.cxf.transport.http.HttpClientHTTPConduit$HttpClientWrappedOutputStream.getResponse(HttpClientHTTPConduit.java:590)
>     at 
> org.apache.cxf.transport.http.HttpClientHTTPConduit$HttpClientWrappedOutputStream.getResponseCode(HttpClientHTTPConduit.java:601)
>     at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.doProcessResponseCode(HTTPConduit.java:1653)
>     at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1684)
>     at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1626)
>     at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1420)
>     ... 77 common frames omitted
> Caused by: java.lang.StackOverflowError: null
>     at 
> java.base/java.util.Collections$UnmodifiableCollection.size(Collections.java:1034)
>     at 
> java.base/sun.security.ssl.ProtocolVersion.toStringArray(ProtocolVersion.java:250)
>     at 
> java.base/sun.security.ssl.SSLConfiguration.getSSLParameters(SSLConfiguration.java:177)
>     at 
> java.base/sun.security.ssl.SSLEngineImpl.getSSLParameters(SSLEngineImpl.java:867)
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getSSLParameters(SSLUtils.java:301)
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getSSLParameters(SSLUtils.java:301)
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getSSLParameters(SSLUtils.java:301)
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getSSLParameters(SSLUtils.java:301)
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getSSLParameters(SSLUtils.java:301)
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getSSLParameters(SSLUtils.java:301)
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getSSLParameters(SSLUtils.java:301)
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getSSLParameters(SSLUtils.java:301)
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getSSLParameters(SSLUtils.java:301)
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getSSLParameters(SSLUtils.java:301)
>  {code}
> Another variant is on SSL Utils 307:
> {code:java}
> Caused by: java.io.IOException: IOException invoking 
> https://some-server/realms/some-realm-default/protocol/openid-connect/revoke: 
> java.lang.StackOverflowError
>     at 
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>  Method)
>     at 
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
>     at 
> java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>     at 
> java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
>     at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1452)
>     at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1433)
>     at 
> org.apache.cxf.io.AbstractWrappedOutputStream.close(AbstractWrappedOutputStream.java:77)
>     at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
>     at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:717)
>     at 
> org.apache.cxf.transport.http.HttpClientHTTPConduit.close(HttpClientHTTPConduit.java:112)
>     at 
> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:63)
>     at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
>     at 
> org.apache.cxf.jaxrs.client.AbstractClient.doRunInterceptorChain(AbstractClient.java:710)
>     at 
> org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1086)
>     ... 69 common frames omitted
> Caused by: java.io.IOException: java.lang.StackOverflowError
>     at 
> org.apache.cxf.transport.http.HttpClientHTTPConduit$HttpClientWrappedOutputStream.getResponse(HttpClientHTTPConduit.java:590)
>     at 
> org.apache.cxf.transport.http.HttpClientHTTPConduit$HttpClientWrappedOutputStream.getResponseCode(HttpClientHTTPConduit.java:601)
>     at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.doProcessResponseCode(HTTPConduit.java:1653)
>     at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1684)
>     at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1626)
>     at 
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1420)
>     ... 77 common frames omitted
> Caused by: java.lang.StackOverflowError: null
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getHandshakeSession(SSLUtils.java:307)
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getHandshakeSession(SSLUtils.java:307)
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getHandshakeSession(SSLUtils.java:307)
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getHandshakeSession(SSLUtils.java:307)
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getHandshakeSession(SSLUtils.java:307)
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getHandshakeSession(SSLUtils.java:307)
>     at 
> org.apache.cxf.transport.https.SSLUtils$SSLEngineWrapper.getHandshakeSession(SSLUtils.java:307)
>  {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to