java.nio.channels.ClosedChannelException - Клиент выключает SSL - PullRequest
2 голосов
/ 19 мая 2011

HI,

У меня есть веб-служба, работающая на сервере glassfish3.1 на одной машине.

На второй машине у меня есть приложение Java (GUI), которое работает и вызывает вышеуказанноеупомянутый веб-сервис.

При моем вызове через веб-сервис я отправляю файл в виде SOAP-вложения.Он достигает сервера, затем файл обрабатывается, а затем возвращается на мой клиентский компьютер через https.

Если мой файл слишком большой и занимает более 15 минут, операция завершается неудачно, и я получаю следующееошибка:

На стороне клиента: Не удалось создать сообщение SOAP из-за исключения: org.jvnet.mimepull.MIMEParsingException: javax.net.ssl.SSLException: SSL-одноранговый узел отключился некорректно

на стороне сервера: javax.servlet.ServletException по адресу org.glassfish.webservices.JAXWSServlet.doPost (JAXWSServlet.java:150) по адресу javax.servlet.http.HttpServlet.serlet (HttpServ5: 5) в javax.servlet.http.HttpServlet.service (HttpServlet.java:848) в org.apache.catalina.core.StandardWrapper.service (StandardWrapper.java:1534) в org.apache.catalina.core.StandardWinkeStandardWrapperValve.java:281) в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:175) в org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:655) в org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:595) на com.sun.enterprise.web.WebPipeline.invoke (WebPipeline.java:98) на com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke (PESessionLockingStandardPipeline.java:91) в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:162) в org.apache.catoyinaapap.co.sery.coser) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:227) в com.sun.enterprise.v3.services.impl.ContainerMapper.service (ContainerMapper.java:170) в com.sun.grizzly.http.ProcessorTask.invokeAdapter (ProcessorTask.java:822) на com.sun.grizzly.http.ProcessorTask.doProcess (ProcessorTask.java:719) на com.sun.grizzly.http.ProcessorTask.process (ProcessorTask3.java):в com.sun.grizzly.http.DefaultProtocolFilter.execute (DefaultProtocolFilter.java:225) в com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter (DefaultProtocolChain.java:137) вm.sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolChain.java:104) в com.sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolChain.java:90) в com.sun.grizzly.http.HttpProtocolChain.execute: HttpProtocol:79) по адресу com.sun.grizzly.ProtocolChainContextTask.doCall (ProtocolChainContextTask.java:54) по адресу com.sun.grizzly.SelectionKeyContextTask.call (SelectionKeyContextTask.java:59) по адресу com.sun.grizzly.Conkava.: 71) в com.sun.grizzly.util.AbstractThreadPool $ Worker.doWork (AbstractThreadPool.java:532) в com.sun.grizzly.util.AbstractThreadPool $ Worker.run (AbstractThreadPool.java:513) в java.lang.Thread.run (Thread.java:662) Причина: javax.xml.ws.WebServiceException: com.ctc.wstx.exc.WstxIOException: java.nio.channels.ClosedChannelException на com.sun.xml.ws.encoding.MtomCodec.encode (MtomCodec.java:184) в com.sun.xml.ws.encoding.SOAPBindingCodec.encode (SOAPBindingCodec.java:282) в com.sun.xml.ws.transport.http.HttpAdapter.encodePacket (HttpAdapter.java): 400) на com.sun.xml.ws.transport.http.HttpAdapter.access $ 100 (HttpAdapter.java:96) на com.sun.xml.ws.transport.http.HttpAdapter $ HttpToolkit.handle (HttpAdapter.java:618).) на com.sun.xml.ws.transport.http.HttpAdapter.handle (HttpAdapter.java:259) на com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle (ServletAdapter.java:162) вorg.glassfish.webservices.JAXWSServlet.doPost (JAXWSServlet.java:145)... еще 27 Вызвано: com.ctc.wstx.exc.WstxIOException: java.nio.channels.ClosedChannelException at com.ctc.wstx.sw.BaseStreamWriter.flush (BaseStreamWriter.java:313) в com.sun.xml.ws.util.xml.XMLStreamWriterFilter.flush (XMLStreamWriterFilter.java:71) в com.sun.xml.ws.streaming.XMLStreamWriterUtil.getOutputStream (XMLStreamWriterUtil.java:101) в com.sun.xml.jaxmessage.JAXBMessage.writePayloadTo (JAXBMessage.java:320) по адресу com.sun.xml.ws.message.AbstractMessageImpl.writeTo (AbstractMessageImpl.java:147) по адресу com.sun.xml.ws.encoding.Mtomjava.code.: 168) ... еще 34 Причины: org.apache.catalina.connector.ClientAbortException: java.nio.channels.ClosedChannelException в org.apache.catalina.connector.OutputBuffer.doFlush (OutputBuffer.java:382) в орг.apache.catalina.connector.OutputBuffer.flush (OutputBuffer.java:351) в org.apache.catalina.connector.CoyoteOutputStream.flush (CoyoteOutputStream.java:175) в com.ctc.wstx.io.UTF8Writer.flushT.java: 99) на com.ctc.wstx.sw.BufferingXmlWriter.flush (BufferingXmlWriter.java:214) в com.ctc.wstx.sw.BaseStreamWriter.flush (BaseStreamWriter.java:311) ... еще 39 Причин: java.nio.channels.ClosedChannelException на солнце.nio.ch.) в com.sun.grizzly.util.OutputWriter.flushChannel (OutputWriter.java:76) в com.sun.grizzly.util.SSLOutputWriter.flushChannel (SSLOutputWriter.java:102) в com.sun.grizzly.ssl.SSLOutputBuflushChannel (SSLOutputBuffer.java:138) по адресу com.sun.grizzly.http.SocketChannelOutputBuffer.flushBuffer (SocketChannelOutputBuffer.java:398) по адресу com.sun.grizzly.http.SocketChannel.gut.grizzly.http.ProcessorTask.action (ProcessorTask.java:1241) на com.sun.grizzly.ssl.SSLProcessorTask.action (SSLProcessorTask.java:164) на com.sun.grizzly.tcp.Response.action (Response.java:268) at org.apache.catalina.connector.OutputBuffer.doFlush (Вывод

...

Я думаю, что сеанс SSL истек по тайм-аутуна стороне клиента, а не на стороне сервера.

Теперь я пытаюсь найти способ увеличить время ожидания SSL на стороне клиента, которое, я полагаю, составляет 15 минут ...

Я не могу этого сделать, любая помощь будет оценена ... Спасибо

Ответы [ 2 ]

0 голосов
/ 20 мая 2011

Я думаю, что сеанс SSL истек на моей стороне клиента

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

Если вы отправляете слишком много данных, то вы будете испытывать исключения IOException где-то или иначе.Либо соблюдайте лимит, либо повышайте его и соблюдайте новое значение.

0 голосов
/ 19 мая 2011

Откройте домен domain.xml и попытайтесь выяснить, какую версию SSL вы используете.Если вы видите что-то похожее на следующее [ ssl3-enabled = "false" ], то это SSL2 с тайм-аутом по умолчанию 100 секунд.

<ssl classname="com.sun.enterprise.security.ssl.GlassfishSSLImpl"  ssl3-enabled="false" cert-nickname="s1as"></ssl>

В таком сценарии вы либоВы можете задать большее значение для свойства ssl-session-timeout [вам может потребоваться добавить это]

или вы можете выбрать использование ssl3 поверх ssl, которое по умолчанию имеет большее значение для времени ожидания.

Ссылка: http://download.oracle.com/docs/cd/E19798-01/821-1753/abhaq/index.html

...