java.net.SocketException: รีเซ็ตการเชื่อมต่อในเทมเพลต Spring rest


9

ฉันมีปัญหาแปลก ๆ ที่นี่

รหัสด้านล่างใช้งานได้ดีจนกระทั่งฉันรีสตาร์ทเซิร์ฟเวอร์ Tomcat ที่ฝั่งไคลเอ็นต์ เมื่อฉันรีสตาร์ทเซิร์ฟเวอร์ Tomcat (โปรแกรมไคลเอนต์มีอยู่ในไฟล์ war) พร้อมไฟล์ war ล่าสุดของรหัสเดียวกันมันจะพ่นข้อผิดพลาดด้านล่าง ฉันใช้ JDK 8

ด้านล่างนี้คือตัวอย่างรหัส จากเบราว์เซอร์ฉันสามารถรับการตอบสนองจาก URL ที่ใช้ในโปรแกรมด้านล่าง แต่ไม่สามารถรับข้อมูลโดยใช้โปรแกรมจาวาหรือบุรุษไปรษณีย์ได้เช่นกัน

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
Keaz

คุณช่วยกรุณาโพสต์ไฟล์ POM.XML ของคุณได้ไหม
Varun Jain

คำตอบ:


0

นี้น่าจะเป็นเพราะปัญหาไฟร์วอลล์

ในการแก้ไขปัญหานี้คุณจะต้องใช้ Proxy Server คุณสามารถเพิ่มพร็อกซีเซิร์ฟเวอร์และพอร์ตโดยใช้รหัส 2 บรรทัดต่อไปนี้:

System.setProperty("proxyHost", "proxyServer.proxy.com");
System.setProperty("proxyPort", "9801");

มันไม่ทำงาน
Sudhakar

-1

คำตอบที่ง่ายที่สุดคือเมื่อคุณรีสตาร์ท Tomcat เพียงแค่คุณปิดซ็อกเก็ตแล้วคุณพยายามส่งข้อมูลเพิ่มเติมไปยังซ็อกเก็ตปิด นั่นคือเหตุผลที่คุณได้รับข้อยกเว้น IO เนื่องจากคุณไม่สามารถเขียนข้อมูลได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.