이상한 문제가 있습니다.
아래 코드는 클라이언트 측에서 Tomcat 서버를 다시 시작할 때까지 정상적으로 작동합니다. 동일한 코드의 최신 war 파일로 Tomcat 서버 (클라이언트 프로그램이 war 파일에 있음)를 다시 시작하면 아래 오류가 발생합니다. JDK 8을 사용하고 있습니다.
다음은 샘플 코드입니다. 브라우저에서 아래 프로그램에 사용 된 URL에서 응답을 얻을 수 있습니다. Java 프로그램이나 Postman을 사용하여 데이터를 가져올 수 없습니다.
package com.example.demo;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
@Component
public class TestService implements CommandLineRunner{
@Override
public void run(String... args) throws Exception {
download();
}
private void download() {
System.out.println("Started download");
try{
RestTemplate restTemplate = new RestTemplate();
String url = "https://www.nseindia.com/live_market/dynaContent/live_watch/stock_watch/niftyStockWatch.json";
byte[] forObject = restTemplate.getForObject(url, byte [].class);
System.out.println(forObject);
System.out.println("Downloaded");
}catch (Exception e) {
System.out.println("Exception "+ e);
}
}
}
예외가 발생했습니다.
org.springframework.web.client.ResourceAccessException: I/O error on GET request for "https://www.nseindia.com/live_market/dynaContent/live_watch/stock_watch/niftyStockWatch.json": Connection reset; nested exception is java.net.SocketException: Connection reset
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:751)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:677)
at org.springframework.web.client.RestTemplate.getForEntity(RestTemplate.java:345)
at com.sudhasoft.service.impl.StocksServiceImpl.getNiftyData(StocksServiceImpl.java:183)
at com.sudhasoft.service.impl.StocksServiceImpl.getNifty500Data(StocksServiceImpl.java:154)
at com.sudhasoft.service.impl.PatternServiceImpl.getDataBySignal(PatternServiceImpl.java:444)
at com.sudhasoft.service.impl.PatternServiceImpl.loadDataOnInit(PatternServiceImpl.java:1090)
at com.sudhasoft.service.CacheServiceImpl.initCache(CacheServiceImpl.java:29)
at com.sudhasoft.scheduler.job.CacheJob.clearCache(CacheJob.java:41)
at com.sudhasoft.scheduler.job.CacheJob.executeJob(CacheJob.java:25)
at com.sudhasoft.scheduler.StockScheduler$1.run(StockScheduler.java:120)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at sun.security.ssl.InputRecord.readFully(Unknown Source)
at sun.security.ssl.InputRecord.read(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readDataRecord(Unknown Source)
at sun.security.ssl.AppInputStream.read(Unknown Source)
at okio.Okio$2.read(Okio.java:139)
at okio.AsyncTimeout$2.read(AsyncTimeout.java:237)
at okio.RealBufferedSource.indexOf(RealBufferedSource.java:345)
at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:217)
at okhttp3.internal.http1.Http1Codec.readHeaderLine(Http1Codec.java:212)
at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:189)
at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:88)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:125)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
at okhttp3.RealCall.execute(RealCall.java:77)
at org.springframework.http.client.OkHttp3ClientHttpRequest.executeInternal(OkHttp3ClientHttpRequest.java:73)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:742)
... 10 common frames omitted
2
다만 우리는 단지 서버를 다시 시작한 후이 문제가 발생했음을 무시할 수 (또는 클라이언트를?),이 중 중복 될 stackoverflow.com/questions/5507878/ssl-connection-reset 또는 유사한 stackoverflow.com/questions/37005352/... , 즉 클라이언트와 서버가 호환되지 않는 SSL 설정을 사용합니다.
—
Petr Bodnár
실제 코드가 여기에 제공된 샘플 코드와 다른 것 같습니다. 실제 코드를 조사하지 않으면 근본 원인을 찾을 수 없습니다.
—
DinushaNT
SSL 확인을 건너 뛰려고
—
하십니까
POM.XML 파일을 게시 해 주시겠습니까?
—
Varun Jain