Может кто-нибудь сказать мне, связано ли это с сеансом 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. Я включил это в моей тестовой среде, но никогда не видел там ошибки, поэтому она может оказаться бесполезной. Из-за большого количества информации, получаемой при ведении журнала, я опасаюсь включить эту опцию в рабочей среде.
Кажется, что на буквальный вопрос, который я задал, можно ответить с помощью этих выводов. Тем не менее, источник исключения (выходной поток записи иногда терпит неудачу) по-прежнему остается без ответа.
Запрос предложений о закрытии / ответе на этот вопрос и открытии другого или продолжении запроса ответов здесь.