2016-05-22 14 views
1

これは以前に尋ねられたことですが、これ以上調べてみると少なくとも30の解決策がありましたが、これまでのところ何も働いていません。java.net.SocketException:Tomcatで接続がリセットされた

私は、REST APIをクエリしてデータを取得して保存するTomcatサーバーを持っています。これは、アプリケーションがデータをロードするたびに、リモートAPIにデータを問い合わせる必要がなくなるためです。データはしばらくの間しか変更されないため、この努力が必要です。 私は私のMacBook上Tomcat7サーバからこのコードを実行すると、私は

final URL url = new URL("https://remote.site.com/api/request?apikey=<some-key>"); 
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); 
connection.setConnectTimeout(5000); 
connection.setReadTimeout(5000); 
connection.connect(); 
final InputStream inputStream = connection.getInputStream(); 
final InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
final Gson gson = new Gson(); 
MyJSONResponse myJSONResponse = gson.fromJson(inputStreamReader, MyJSONResponse.class); 

を接続するための簡単なコードを持って、それは完全に罰金実行されます。私はJSONを取得し、すべての大胆なdoryです。そこで私は先に進み、Ubuntu上のTomcat7サーバーの内部からこれを実行しました。私はすぐにSocketExceptionを取得します。

データが少し長いことを認めますが、この例外をスローする前に数秒間待つと思います。しかし、この例外は私にはわからない。

HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); 

私にはわからない。 さらにテストするために、これらのコード行だけを含む単一のクラスプログラムを作成し、リモートAPIから取得した入力ストリームを出力し、これを私のUbuntuボックスで実行しました。だから、Ubuntuボックスには何も問題はなく、インターネットに接続できます。 Tomcat Serverは何かを混乱させているようです。 私は接続をリセットして、finallyブロックや他のもので閉じるのではなく、何も動作しないように、4-5時間にわたって複数のことをやろうとしています。 本当にありがとうございます。 おかげ

編集:タイムアウトの 追加ログ:

*** Init called 
May 22, 2016 11:23:21 PM org.apache.http.impl.execchain.RetryExec execute 
INFO: I/O exception (java.net.SocketException) caught when processing request to {s}->https://www.data.gov.in:443: Connection reset 
May 22, 2016 11:23:21 PM org.apache.http.impl.execchain.RetryExec execute 
INFO: Retrying request to {s}->https://www.data.gov.in:443 
May 22, 2016 11:23:22 PM org.apache.http.impl.execchain.RetryExec execute 
INFO: I/O exception (java.net.SocketException) caught when processing request to {s}->https://www.data.gov.in:443: Connection reset 
May 22, 2016 11:23:22 PM org.apache.http.impl.execchain.RetryExec execute 
INFO: Retrying request to {s}->https://www.data.gov.in:443 
May 22, 2016 11:23:24 PM org.apache.http.impl.execchain.RetryExec execute 
INFO: I/O exception (java.net.SocketException) caught when processing request to {s}->https://www.data.gov.in:443: Connection reset 
May 22, 2016 11:23:24 PM org.apache.http.impl.execchain.RetryExec execute 
INFO: Retrying request to {s}->https://www.data.gov.in:443 
java.net.SocketException: Connection reset 
    at java.net.SocketInputStream.read(SocketInputStream.java:196) 
    at java.net.SocketInputStream.read(SocketInputStream.java:122) 
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:442) 
    at sun.security.ssl.InputRecord.read(InputRecord.java:480) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:946) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1344) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1371) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1355) 
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394) 
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353) 
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:134) 
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353) 
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380) 
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) 
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184) 
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88) 
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) 
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55) 
    at com.soulpatch.jersey.DataFetcher.init(DataFetcher.java:47) 
    at com.soulpatch.jersey.DataFetcher.getBloodBanks(DataFetcher.java:86) 
    at com.soulpatch.jersey.resources.BloodBanksResource.getBloodBanks(BloodBanksResource.java:28) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) 
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144) 
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161) 
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:205) 
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99) 
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389) 
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347) 
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102) 
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326) 
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) 
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) 
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) 
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) 
    at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473) 
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) 
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) 
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) 
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
+0

いいえ、 'connection.connect()'によってスローされます。 – EJP

答えて

0

それはそう、私が犯人だった打ったサイト。 https://www.google.comを押すと、サーバーが正常に動作しているようです。 私はそれが私のTomcatのSSL証明書解決と関係があると信じています。

+0

いいえ、SSLハンドシェークが遅いターゲットサーバーと関係があります。あなたのTomcatとは関係ありません。私は証明書がまだ受信されていないことを疑う。あなたのタイムアウトはかなり攻撃的です。私は少なくともそれらを倍増させるだろう。 – EJP

+0

ありがとう!それがうまくいくかどうか試してみましょう。 – LeoNeo

+0

次のコードを使用してタイムアウトを30秒に増やしました。 (私はApacheのHttpClientに変更しました): 'final HttpClient client = HttpClients.createDefault(); final RequestConfig requestConfig = RequestConfig.custom .setSocketTimeout(30000) .setConnectTimeout(30000) .build(); 'それでも私には同じエラーが表示されます。スタックトレース全体で質問を更新しました。表示されている場合、再試行の時間は非常に短いです。接続が応答するのをほとんど待っているような気分です。ブラウザ上で完全に動作します。 – LeoNeo

関連する問題