SSLSessionContextImpl Ошибка (нулевой указатель) в сгенерированном коде JAX-WS? - PullRequest
1 голос
/ 20 сентября 2011

Может кто-нибудь сказать мне, связано ли это с сеансом SSL или это свидетельствует о проблеме с сертификатом?

Я использую некоторый код, созданный из JAX wsimport, и иногда сталкиваюсь с проблемой. Похоже, возникшая ошибка связана с недействительностью сеанса SSL. Однако ранее этот код работал нормально, и я не знаю, где искать.

Исключение:

 [ java.lang.NullPointerException ] java.lang.NullPointerException
    at com.sun.net.ssl.internal.ssl.SSLSessionContextImpl.remove(SSLSessionContextImpl.java:199)
    at com.sun.net.ssl.internal.ssl.SSLSessionImpl.invalidate(SSLSessionImpl.java:558)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1559)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1547)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1511)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1456)
    at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:64)
    at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
    at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
    at java.io.PrintStream.flush(PrintStream.java:286)
    at sun.net.www.MessageHeader.print(MessageHeader.java:228)
    at sun.net.www.http.HttpClient.writeRequests(HttpClient.java:602)
    at sun.net.www.protocol.http.HttpURLConnection.writeRequests(HttpURLConnection.java:430)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:970)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
    at java.net.URL.openStream(URL.java:1007)
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.createReader(RuntimeWSDLParser.java:837)
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.resolveWSDL(RuntimeWSDLParser.java:294)
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:151)
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:131)
    at com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:267)
    at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:230)
    at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:178)
    at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:106)
    at javax.xml.ws.Service.<init>(Service.java:57)
... (truncated)

EDIT:

Я проследил исключение через трассировку стека и оказался на линии com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:64). Похоже, что это запись байтов в выходной поток, и он перехватывает любые исключения, возникающие во время этого процесса. Внутри блока catch он отправляет исключение в класс SSLSocketImpl, который в конечном итоге пытается аннулировать сеанс. Во время аннулирования сеанса возникает нулевой указатель (вторичное исключение).

AppOutputStream.write ():

public synchronized void write(byte[] paramArrayOfByte, int paramInt1, int paramInt2)
throws IOException
{
    this.c.checkWrite();
    try
    {
      do
      {
        int i = Math.min(paramInt2, this.r.availableDataBytes());

        if (i > 0) {
          this.r.write(paramArrayOfByte, paramInt1, i);
          paramInt1 += i;
          paramInt2 -= i;
        }
        this.c.writeRecord(this.r);
        this.c.checkWrite();
      }while (paramInt2 > 0);
    }
    catch (Exception localException) {
      this.c.handleException(localException);
    }
}

Детали начального исключения по умолчанию не печатаются. Вы должны использовать переключатель jvm -Djavax.net.debug=SSL,session, чтобы получить эту информацию для печати в ваш журнал localhost / console. Я включил это в моей тестовой среде, но никогда не видел там ошибки, поэтому она может оказаться бесполезной. Из-за большого количества информации, получаемой при ведении журнала, я опасаюсь включить эту опцию в рабочей среде.

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

Запрос предложений о закрытии / ответе на этот вопрос и открытии другого или продолжении запроса ответов здесь.

...