gpt4 book ai didi

Android Spring 和 SSL 的 java.lang.StackOverflowError

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:23 25 4
gpt4 key购买 nike

我们的应用程序使用受 SSL 证书保护的 WebApi。大多数情况下一切正常,但有时应用程序会因以下错误而崩溃:

java.lang.StackOverflowError
at java.io.FilterInputStream.read(FilterInputStream.java:118)
at com.android.org.bouncycastle.asn1.DefiniteLengthInputStream.read(DefiniteLengthInputStream.java:74)
at java.io.FilterInputStream.read(FilterInputStream.java:118)
at com.android.org.bouncycastle.asn1.DefiniteLengthInputStream.read(DefiniteLengthInputStream.java:74)
at java.io.FilterInputStream.read(FilterInputStream.java:118)
at com.android.org.bouncycastle.asn1.DefiniteLengthInputStream.read(DefiniteLengthInputStream.java:74)
at java.io.FilterInputStream.read(FilterInputStream.java:118)
at com.android.org.bouncycastle.asn1.DefiniteLengthInputStream.read(DefiniteLengthInputStream.java:74)
at com.android.org.bouncycastle.util.io.Streams.readFully(Streams.java:49)
at com.android.org.bouncycastle.util.io.Streams.readFully(Streams.java:40)
at com.android.org.bouncycastle.asn1.ASN1InputStream.getBuffer(ASN1InputStream.java:384)
at com.android.org.bouncycastle.asn1.ASN1InputStream.createPrimitiveDERObject(ASN1InputStream.java:447)
at com.android.org.bouncycastle.asn1.ASN1InputStream.buildObject(ASN1InputStream.java:184)
at com.android.org.bouncycastle.asn1.ASN1InputStream.readObject(ASN1InputStream.java:272)
at com.android.org.bouncycastle.asn1.ASN1InputStream.buildEncodableVector(ASN1InputStream.java:193)
at com.android.org.bouncycastle.asn1.ASN1InputStream.buildDEREncodableVector(ASN1InputStream.java:204)
at com.android.org.bouncycastle.asn1.ASN1InputStream.buildObject(ASN1InputStream.java:173)
at com.android.org.bouncycastle.asn1.ASN1InputStream.readObject(ASN1InputStream.java:272)
at com.android.org.bouncycastle.asn1.ASN1InputStream.buildEncodableVector(ASN1InputStream.java:193)
at com.android.org.bouncycastle.asn1.ASN1InputStream.buildDEREncodableVector(ASN1InputStream.java:204)
at com.android.org.bouncycastle.asn1.ASN1InputStream.buildObject(ASN1InputStream.java:173)
at com.android.org.bouncycastle.asn1.ASN1InputStream.readObject(ASN1InputStream.java:272)
at com.android.org.bouncycastle.asn1.ASN1InputStream.buildEncodableVector(ASN1InputStream.java:193)
at com.android.org.bouncycastle.asn1.ASN1InputStream.buildDEREncodableVector(ASN1InputStream.java:204)
at com.android.org.bouncycastle.asn1.ASN1InputStream.buildObject(ASN1InputStream.java:173)
at com.android.org.bouncycastle.asn1.ASN1InputStream.readObject(ASN1InputStream.java:272)
at com.android.org.bouncycastle.asn1.ASN1InputStream.buildEncodableVector(ASN1InputStream.java:193)
at com.android.org.bouncycastle.asn1.ASN1InputStream.buildDEREncodableVector(ASN1InputStream.java:204)
at com.android.org.bouncycastle.asn1.ASN1InputStream.buildObject(ASN1InputStream.java:173)
at com.android.org.bouncycastle.asn1.ASN1InputStream.readObject(ASN1InputStream.java:272)
at com.android.org.bouncycastle.jce.provider.CertPathValidatorUtilities.getObject(CertPathValidatorUtilities.java:339)
at com.android.org.bouncycastle.jce.provider.CertPathValidatorUtilities.getExtensionValue(CertPathValidatorUtilities.java:325)
at com.android.org.bouncycastle.jce.provider.RFC3280CertPathUtilities.processCertD(RFC3280CertPathUtilities.java:1268)
at com.android.org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi.engineValidate(PKIXCertPathValidatorSpi.java:310)
at com.sec.android.security.pkix.SecCertPathValidatorSpi.engineValidate(SecCertPathValidatorSpi.java:100)
at java.security.cert.CertPathValidator.validate(CertPathValidator.java:190)
at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:295)
at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:202)
at com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:612)
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:406)
at com.android.okhttp.Connection.upgradeToTls(Connection.java:146)
at com.android.okhttp.Connection.connect(Connection.java:107)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:294)
at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:89)
at com.android.okhttp.internal.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:161)
at org.springframework.http.client.SimpleBufferingClientHttpRequest.org.springframework.http.client.ClientHttpResponse executeInternal(org.springframework.http.HttpHeaders,byte[])(SourceFile:76)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.org.springframework.http.client.ClientHttpResponse executeInternal(org.springframework.http.HttpHeaders)(SourceFile:48)
at org.springframework.http.client.AbstractClientHttpRequest.org.springframework.http.client.ClientHttpResponse execute()(SourceFile:84)
at org.springframework.http.client.InterceptingClientHttpRequest$RequestExecution.org.springframework.http.client.ClientHttpResponse execute(org.springframework.http.HttpRequest,byte[])(SourceFile:91)
at com.myapplication.webapi.spring.interceptors.IonAuthenticationClientInterceptor.org.springframework.http.client.ClientHttpResponse intercept(org.springframework.http.HttpRequest,byte[],org.springframework.http.client.ClientHttpRequestExecution)(SourceFile:82)
at org.springframework.http.client.InterceptingClientHttpRequest$RequestExecution.org.springframework.http.client.ClientHttpResponse execute(org.springframework.http.HttpRequest,byte[])(SourceFile:81)
at org.springframework.http.client.InterceptingClientHttpRequest.org.springframework.http.client.ClientHttpResponse executeInternal(org.springframework.http.HttpHeaders,byte[])(SourceFile:67)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.org.springframework.http.client.ClientHttpResponse executeInternal(org.springframework.http.HttpHeaders)(SourceFile:48)

//The stack below repeats about 100 times
at org.springframework.http.client.AbstractClientHttpRequest.org.springframework.http.client.ClientHttpResponse execute()(SourceFile:84)
at org.springframework.http.client.InterceptingClientHttpRequest$RequestExecution.org.springframework.http.client.ClientHttpResponse execute(org.springframework.http.HttpRequest,byte[])(SourceFile:91)
at com.myapplication.webapi.spring.interceptors.IonAuthenticationClientInterceptor.org.springframework.http.client.ClientHttpResponse intercept(org.springframework.http.HttpRequest,byte[],org.springframework.http.client.ClientHttpRequestExecution)(SourceFile:82)
at org.springframework.http.client.InterceptingClientHttpRequest$RequestExecution.org.springframework.http.client.ClientHttpResponse execute(org.springframework.http.HttpRequest,byte[])(SourceFile:81)
at org.springframework.http.client.InterceptingClientHttpRequest.org.springframework.http.client.ClientHttpResponse executeInternal(org.springframework.http.HttpHeaders,byte[])(SourceFile:67)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.org.springframework.http.client.ClientHttpResponse executeInternal(org.springframework.http.HttpHeaders)(SourceFile:48)
//End of stack that repeats 100 times

at org.springframework.http.client.InterceptingClientHttpRequest$RequestExecution.org.springframework.http.client.ClientHttpResponse execute(org.springframework.http.HttpRequest,byte[])(SourceFile:91)
at com.myapplication.webapi.spring.interceptors.IonAuthenticationClientInterceptor.org.springframework.http.client.ClientHttpResponse intercept(org.springframework.http.HttpRequest,byte[],org.springframework.http.client.ClientHttpRequestExecution)(SourceFile:82)
at org.springframework.http.client.InterceptingClientHttpRequest$RequestExecution.org.springframework.http.client.ClientHttpResponse execute(org.springframework.http.HttpRequest,byte[])(SourceFile:81)
at org.springframework.http.client.InterceptingClientHttpRequest.org.springframework.http.client.ClientHttpResponse executeInternal(org.springframework.http.HttpHeaders,byte[])(SourceFile:67)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.org.springframework.http.client.ClientHttpResponse executeInternal(org.springframework.http.HttpHeaders)(SourceFile:48)
at org.springframework.http.client.AbstractClientHttpRequest.org.springframework.http.client.ClientHttpResponse execute()(SourceFile:84)
at org.springframework.http.client.InterceptingClientHttpRequest$RequestExecution.org.springframework.http.client.ClientHttpResponse execute(org.springframework.http.HttpRequest,byte[])(SourceFile:91)
at com.myapplication.webapi.spring.interceptors.IonAuthenticationClientInterceptor.org.springframework.http.client.ClientHttpResponse intercept(org.springframework.http.HttpRequest,byte[],org.springframework.http.client.ClientHttpRequestExecution)(SourceFile:82)
at org.springframework.http.client.InterceptingClientHttpRequest$RequestExecution.org.springframework.http.client.ClientHttpResponse execute(org.springframework.http.HttpRequest,byte[])(SourceFile:81)
at org.springframework.http.client.InterceptingClientHttpRequest.org.springframework.http.client.ClientHttpResponse executeInternal(org.springframework.http.HttpHeaders,byte[])(SourceFile:67)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.org.springframework.http.client.ClientHttpResponse executeInternal(org.springframework.http.HttpHeaders)(SourceFile:48)
at org.springframework.http.client.AbstractClientHttpRequest.org.springframework.http.client.ClientHttpResponse execute()(SourceFile:84)
at org.springframework.web.client.RestTemplate.java.lang.Object doExecute(java.net.URI,org.springframework.http.HttpMethod,org.springframework.web.client.RequestCallback,org.springframework.web.client.ResponseExtractor)(SourceFile:536)
at org.springframework.web.client.RestTemplate.java.lang.Object execute(java.lang.String,org.springframework.http.HttpMethod,org.springframework.web.client.RequestCallback,org.springframework.web.client.ResponseExtractor,java.util.Map)(SourceFile:506)
at org.springframework.web.client.RestTemplate.org.springframework.http.ResponseEntity exchange(java.lang.String,org.springframework.http.HttpMethod,org.springframework.http.HttpEntity,java.lang.Class,java.util.Map)(SourceFile:455)
at com.myapplication.webapi.smartclients.SynchronizationClient_.org.springframework.http.ResponseEntity requestUpdateFile(long,long)(SourceFile:95)
at com.myapplication.services.synchronization.SynchronizationTask$2$1.org.springframework.http.ResponseEntity call()(SourceFile:514)
at com.myapplication.services.synchronization.SynchronizationTask$2$1.java.lang.Object call()(SourceFile:509)
at com.myapplication.managers.rest.RestManager$RestRequest.java.lang.Object execute()(SourceFile:110)
at com.myapplication.managers.rest.RestManager.java.lang.Object executeRequest(java.lang.String,int,com.myapplication.webapi.spring.RestErrorProcessor,java.util.concurrent.Callable)(SourceFile:67)
at com.myapplication.services.synchronization.SynchronizationTask$2.void run()(SourceFile:506)
at java.lang.Thread.run(Thread.java:841)

没有一个特定的 WebApi 调用导致这个问题......我们系统上几乎所有可用的 WebApi 方法都有报告,但是,正如我之前所说,在同一台设备上,它在大多数情况下都运行良好时间。

我还注意到,在我们的网络服务服务器上启用 SSL 后,这种情况确实发生了。

有人知道发生了什么吗?我该如何解决?

最佳答案

您可以尝试增加执行 REST 调用的线程的堆栈大小。Android 中主 UI 线程的堆栈大小是有限的,但理论上您可以启动一个任意大小(在本例中为 1MB)的新线程,如下所示

ThreadGroup group = new ThreadGroup("restAPIgroup");
new Thread(group, runnableObject, "YourThreadName", 1024*1024).start();

关于Android Spring 和 SSL 的 java.lang.StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32797797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com