Что означает ошибка «Локальное закрытие» при отправке вызова по протоколу HTTPS через HTTP-клиент Jetty? - PullRequest
0 голосов
/ 09 ноября 2011

Я получаю следующую ошибку при выполнении http-вызова через ssl с Jetty http-клиентом с сертификатами клиента и аутентификацией сервера.

java.io.EOFException: local close
at org.eclipse.jetty.client.HttpConnection.close(HttpConnection.java:651)
at org.eclipse.jetty.client.HttpConnection.handle(HttpConnection.java:361)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:535)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:529)
at java.lang.Thread.run(Thread.java:680)

В ответ на комментарии добавляется полная ошибка:

FAILED: testNucleusOnline
java.util.concurrent.ExecutionException: Request failed exchange status:9 HTTP:0
at com.XXX.XXXX.IAbstractOperation.get(IAbstractOperation.java:26)
at com.XXX.XXXX.IAbstractOperation.get(IAbstractOperation.java:14)
at com.XXX.XXXX.XXXX.XXXXX.XXXXX(XXXXXX.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:74)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:673)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:846)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1170)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.runWorkers(TestRunner.java:1147)
at org.testng.TestRunner.privateRun(TestRunner.java:749)
at org.testng.TestRunner.run(TestRunner.java:600)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:317)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:312)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:274)
at org.testng.SuiteRunner.run(SuiteRunner.java:223)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1039)
at org.testng.TestNG.runSuitesLocally(TestNG.java:964)
at org.testng.TestNG.run(TestNG.java:900)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:110)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:205)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:174)

и код с некоторым скрытием:

    IAbstractOperation iAbstract = new IAbstractOperation();
    iAbstract.setURL(availabilityUrl);
    iAbstract.setMethod("GET");


    if (iAbstract.startsWith("https:")) {
        iAbstract.setScheme(HttpSchemes.HTTPS_BUFFER);
    }

    httpClient.send(iAbstract);
    return iAbstract;

1 Ответ

1 голос
/ 10 ноября 2011

В основном это означает, что разговор был прерван в середине обмена SSL. Вот код:

 public void close() throws IOException
 {
     //if there is a live, unfinished exchange, set its status to be
     //excepted and wake up anyone waiting on waitForDone()

     if (_exchange != null && !_exchange.isDone())
     {
         switch (_exchange.getStatus())
         {
             case HttpExchange.STATUS_CANCELLED:
             case HttpExchange.STATUS_CANCELLING:
             case HttpExchange.STATUS_COMPLETED:
             case HttpExchange.STATUS_EXCEPTED:
             case HttpExchange.STATUS_EXPIRED:
                 break;
             default:
                 _exchange.setStatus(HttpExchange.STATUS_EXCEPTED);
                 _exchange.getEventListener().onException(new EOFException("local close"));
         }
     } 
     _endp.close();
 }

Вполне возможно, что отключение соединения до того, как оно будет выполнено с помощью рукопожатия SSL, - вот что я интерпретирую. Я не вижу ваш код на трассировке стека, поэтому меня немного смущает, где это происходит (на стороне клиента или на стороне сервера).

...