ERRO: "Remote host closed connection during handshake" na transmissão do XML

0 respostas
webservicejavaconectionerror
C

Olá Amigos.

Preciso de uma ajuda de vocês que são especialistas em Java, preciso dar manutenção em um código que faz a transmissão do XML.
O erro ocorre somente no ambiente do cliente, no ambiente de desenvolvimento não ocorre o erro.

A versão do java é a mesma tanto no cliente como no nosso ambiente de testes.
java version "1.7.0_79"
Java™ SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot™ 64-Bit Server VM (build 24.79-b02, mixed mode)

O erro que está ocorrendo é o seguinte :

Dec 11, 2017 4:35:29 PM EnvioXml TransmiteLote

SEVERE: null

org.apache.axis2.AxisFault: javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)

at org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:78)

at org.apache.axis2.transport.http.AxisRequestEntity.writeRequest(AxisRequestEntity.java:84)

at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499)

at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)

at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)

at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)

at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)

at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)

at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:621)

at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:193)

at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)

at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:404)

at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:231)

at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443)

at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:406)

at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)

at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)

at ServicoEnviarLoteEventosStub.enviarLoteEventos(ServicoEnviarLoteEventosStub.java:188)

at EnvioXml.TransmiteLote(EnvioXml.java:126)

at Main.main(Main.java:258)

Caused by: javax.xml.stream.XMLStreamException: javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

at com.sun.xml.internal.stream.writers.XMLStreamWriterImpl.close(Unknown Source)

at org.apache.axiom.util.stax.wrapper.XMLStreamWriterWrapper.close(XMLStreamWriterWrapper.java:46)

at org.apache.axiom.om.impl.MTOMXMLStreamWriter.close(MTOMXMLStreamWriter.java:188)

at org.apache.axiom.om.impl.llom.OMSerializableImpl.serializeAndConsume(OMSerializableImpl.java:197)

at org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:74)

 19 more

Caused by: javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

at sun.security.ssl.SSLSocketImpl.checkEOF(Unknown Source)

at sun.security.ssl.SSLSocketImpl.checkWrite(Unknown Source)

at sun.security.ssl.AppOutputStream.write(Unknown Source)

at java.io.BufferedOutputStream.flushBuffer(Unknown Source)

at java.io.BufferedOutputStream.flush(Unknown Source)

at java.io.FilterOutputStream.flush(Unknown Source)

at org.apache.commons.httpclient.ChunkedOutputStream.flush(ChunkedOutputStream.java:191)

at com.sun.xml.internal.stream.writers.UTF8OutputStreamWriter.flush(Unknown Source)

 24 more

Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)

at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)

at sun.security.ssl.SSLSocketImpl.writeRecord(Unknown Source)

at sun.security.ssl.AppOutputStream.write(Unknown Source)

at java.io.BufferedOutputStream.flushBuffer(Unknown Source)

at java.io.BufferedOutputStream.write(Unknown Source)

at org.apache.commons.httpclient.WireLogOutputStream.write(WireLogOutputStream.java:68)

at org.apache.commons.httpclient.ChunkedOutputStream.flushCache(ChunkedOutputStream.java:100)

at org.apache.commons.httpclient.ChunkedOutputStream.write(ChunkedOutputStream.java:162)

at com.sun.xml.internal.stream.writers.UTF8OutputStreamWriter.write(Unknown Source)

at com.sun.xml.internal.stream.writers.UTF8OutputStreamWriter.write(Unknown Source)

at com.sun.xml.internal.stream.writers.XMLStreamWriterImpl.writeEndElement(Unknown Source)

at org.apache.axiom.util.stax.wrapper.XMLStreamWriterWrapper.writeEndElement(XMLStreamWriterWrapper.java:133)

at org.apache.axiom.om.impl.MTOMXMLStreamWriter.writeEndElement(MTOMXMLStreamWriter.java:171)

at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeEndpart(OMSerializerUtil.java:58)

at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875)

at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:556)

at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:874)

at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:556)

at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:874)

at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:556)

at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:874)

at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:556)

at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:874)

at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:556)

at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:874)

at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:556)

at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:874)

at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:556)

at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:874)

at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:556)

at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:874)

at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:556)

at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:874)

at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:556)

at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:874)

at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:556)

at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:874)

at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:556)

at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:874)

at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:556)

at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:874)

at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:556)

at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:874)

at org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:125)

at org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:113)

at ServicoEnviarLoteEventosStub$LoteEventos_type0.serialize(ServicoEnviarLoteEventosStub.java:1428)

at ServicoEnviarLoteEventosStub$LoteEventos_type0.serialize(ServicoEnviarLoteEventosStub.java:1390)

at ServicoEnviarLoteEventosStub$EnviarLoteEventos.serialize(ServicoEnviarLoteEventosStub.java:560)

at ServicoEnviarLoteEventosStub$EnviarLoteEventos.serialize(ServicoEnviarLoteEventosStub.java:521)

at org.apache.axis2.databinding.ADBDataSource.serialize(ADBDataSource.java:90)

at org.apache.axiom.om.impl.llom.OMSourcedElementImpl.internalSerialize(OMSourcedElementImpl.java:695)

at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:563)

at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:874)

at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.serializeInternally(SOAPEnvelopeImpl.java:283)

at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.internalSerialize(SOAPEnvelopeImpl.java:245)

at org.apache.axiom.om.impl.llom.OMSerializableImpl.serializeAndConsume(OMSerializableImpl.java:193)

 20 more

Caused by: java.io.EOFException: SSL peer shut down incorrectly

at sun.security.ssl.InputRecord.read(Unknown Source)

 77 more

O código está desta forma:

public class EnvioXml {

private static final int SSL_PORT = 443;
String dados = "";
String retorno = "";

public String TransmiteLote(String loteXML,String certificadotransmissor, String senhacertificadotransmissor, String URLenvio, String arquivoCacerts) {
    try {

    	System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
    	        	
        dados = loteXML;
        URL url = new URL(URLenvio);
        String caminhoDoCertificadoDoCliente = certificadotransmissor;
        String senhaDoCertificado = senhacertificadotransmissor;

        InputStream entrada = new FileInputStream(caminhoDoCertificadoDoCliente);
        KeyStore ks = KeyStore.getInstance("pkcs12");
        try {
            ks.load(entrada, senhaDoCertificado.toCharArray());
        } catch (IOException e) {
            throw new Exception(
                    "Senha do Certificado Digital esta incorreta ou Certificado inválido.");
        }

        String alias = "";
        Enumeration<String> aliasesEnum = ks.aliases();
        while (aliasesEnum.hasMoreElements()) {
            alias = (String) aliasesEnum.nextElement();
            if (ks.isKeyEntry(alias)) {
                break;
            }
        }
        X509Certificate certificate = (X509Certificate) ks.getCertificate(alias);
        PrivateKey privateKey = (PrivateKey) ks.getKey(alias, senhaDoCertificado.toCharArray());
        SocketFactoryDinamico socketFactoryDinamico = new SocketFactoryDinamico(certificate, privateKey);
        socketFactoryDinamico.setFileCacerts(arquivoCacerts);

        Protocol protocol = new Protocol("https", socketFactoryDinamico, SSL_PORT);
        Protocol.registerProtocol("https", protocol);
  
        OMElement ome = AXIOMUtil.stringToOM(dados);

        ServicoEnviarLoteEventosStub.LoteEventos_type0 dadosMsgType0 = new ServicoEnviarLoteEventosStub.LoteEventos_type0();
        dadosMsgType0.setExtraElement(ome);

        ServicoEnviarLoteEventosStub.EnviarLoteEventos distEnvioEsocial = new ServicoEnviarLoteEventosStub.EnviarLoteEventos();
        distEnvioEsocial.setLoteEventos(dadosMsgType0);

        ServicoEnviarLoteEventosStub stub = new ServicoEnviarLoteEventosStub(url.toString());
        ServicoEnviarLoteEventosStub.EnviarLoteEventosResponse result = stub.enviarLoteEventos(distEnvioEsocial);

        retorno = result.getEnviarLoteEventosResult().getExtraElement().toString();

    } catch (Exception ex) {
        Logger.getLogger(EnvioXml.class.getName()).log(Level.SEVERE, null, ex);
    }

return retorno; }
}

Se alguém já passou por esse problema ou tiver alguma dica, será bem vinda.

Criado 11 de dezembro de 2017
Respostas 0
Participantes 1