[RESOLVIDO] Consumir WS 2.00 NFe

12 respostas
A

Estou tentando consultar o status dos serviços no ws 2.00 do RS…

Depois de muito sacrificio consegui chegar neste erro…

Tentei 1000 formas já… revirei o GUJ inteiro já e nada…

Quando eu rodo o projeto sai isto no console:

init:
Deleting: C:\Users\altitdb\Documents\NetBeansProjects\WebServices\build\built-jar.properties
deps-jar:
Updating property file: C:\Users\altitdb\Documents\NetBeansProjects\WebServices\build\built-jar.properties
wsimport-init:
wsimport-client-nfeStatusServico2:
files are up to date
wsimport-client-generate:
Deleting: C:\Users\altitdb\Documents\NetBeansProjects\WebServices\null382853633
Compiling 1 source file to C:\Users\altitdb\Documents\NetBeansProjects\WebServices\build\classes
compile-single:
run-single:
---[HTTP request - https://homologacao.nfe.sefaz.rs.gov.br/ws/nfeStatusServico/nfeStatusServico2.asmx]---
Content-type: application/soap+xml;charset="utf-8";action="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2/nfeStatusServicoNF2"
Accept: application/soap+xml, multipart/related, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
<?xml version="1.0" ?><S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"><S:Body><nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"><nfeCabecMsg><cUF>43</cUF><versaoDados>2.00</versaoDados></nfeCabecMsg></nfeDadosMsg></S:Body></S:Envelope>--------------------
com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:121)
        at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:137)
        at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:83)
        at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105)
        at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587)
        at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546)
        at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531)
        at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428)
        at com.sun.xml.internal.ws.client.Stub.process(Stub.java:211)
        at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:124)
        at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
        at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
        at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
        at $Proxy30.nfeStatusServicoNF2(Unknown Source)
        at classes.TesteStatusNfe.<init>(TesteStatusNfe.java:53)
        at classes.TesteStatusNfe.main(TesteStatusNfe.java:63)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1649)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241)
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:235)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1206)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:136)
        at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
        at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1149)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
        at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1019)
        at com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl.getOutputStream(HttpsURLConnectionOldImpl.java:200)
        at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:109)
        ... 15 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:323)
        at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:217)
        at sun.security.validator.Validator.validate(Validator.java:218)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1185)
        ... 27 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
        at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:318)
        ... 33 more
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

Segue meu código!

package classes;

import java.security.Security;
import java.util.Arrays;
import wsdl.NfeCabecMsg;
import wsdl.NfeDadosMsg;
import wsdl.NfeStatusServico2;
import wsdl.NfeStatusServico2Soap12;
import wsdl.NfeStatusServicoNF2Result;
import wsdl.ObjectFactory;

/**
 *
 * @author altitdb
 */
public class TesteStatusNfe {

    public TesteStatusNfe() {

        System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");

        System.setProperty("com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump", "true");

        System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
        System.setProperty("sun.security.ssl.allowUnsafeRenegotiation ", "true");

        System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
        System.setProperty("javax.net.ssl.keyStore", "C:\\certificado.pfx");
        System.setProperty("javax.net.ssl.keyStorePassword", "Milenio1");

        System.setProperty("javax.net.ssl.trustStoreType", "JKS");
        System.setProperty("javax.net.ssl.trustStore", "C:\\arquivo.jks");
        System.setProperty("javax.net.ssl.trustPassword", "123456");

        try {


            NfeStatusServico2 service = new NfeStatusServico2();
            NfeStatusServico2Soap12 port = service.getNfeStatusServico2Soap12();
            // TODO initialize WS operation arguments here
            NfeDadosMsg nfeDadosMsg = new NfeDadosMsg();

            // Dados do cab
            NfeCabecMsg nfeCabecMsg = new NfeCabecMsg();
            nfeCabecMsg.setCUF("43");
            nfeCabecMsg.setVersaoDados("2.00");

            // add na nfeDadosMsg
            nfeDadosMsg.getContent().add(new ObjectFactory().createNfeCabecMsg(nfeCabecMsg));

            // TODO process result here
            NfeStatusServicoNF2Result result = port.nfeStatusServicoNF2(nfeDadosMsg);
            System.out.println("Result = " + result);
            System.out.println("Resposta = " + Arrays.toString(result.getContent().toArray()));

        } catch (Throwable e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new TesteStatusNfe();
    }
}

Alguém poderia me dar uma ajuda??

Obrigado desde já.

xD~~

12 Respostas

Z

Você adicionou os certificados da SEFAZ no seu keystore?

A

Peguei e salvei o certificado e fiz o import com o keytool que vem no jdk como vi em alguns foruns.

Preciso fazer algo mais para importar?? Quem sabe copiar para algum lugar??

Obrigado!

<–EDIT–>

Eu acho que comi bronha na hr de importar… fiz o import agora e funcionou a conexão!!

Só que agora está dando o seguinte erro:

Rejeicao: Cabecalho - Falha no Schema XML

xD~~

<–EDIT2–>

Consegui fazer a comunicação, só que tem um problema, peguei um codigo alterado dos webservices…

Só que quando eu limpo o projeto, os codigos modificados nos webservices somem, alguem sabe como resolver??

Obrigado

F

altitdb, graças aos comentários de vocês nesse post consegui chegar no mesmo erro de vocês (não que isso bom, rsrsrs)

dos situações que você colocou no seu ultimo POST, eu nao consegui reproduzir o EDIT 1… eu até alterei as classes e tudo mais, porem na hora de construir (eu nao fiz o Limpar e Construir, somente o Contruir mesmo) ele some com as alterações que eu fiz…

como você conseguiu resolver isso??

A

Então fernando…

O que eu fiz foi copiar as classes geradas para uma pasta do projeto, que dai quando eu limpo o projeto ele apaga somente as pastas que foram “auto-geradas” e as minhas continuam com o mesmo conteudo.

Só que agora eu to com um problema diferente…

Quando eu fiz isso, fiz em uma app desktop…

Agora to passando para web e não to conseguindo setar o certificado!

xD~~

F

Eu tinha pensado em algo do tipo também, mas eu iria extender essas classe e sobrescrever os métodos, mas nao sabia se tinha alguma outra solução…

valeu pela ajuda…

nao sei se te ajuda, mas já fiz algo como adicionar o keystore no meu servidor web para deixar uma aplicação Web com segurança…
eu coloquei o arquivo keystore num determinado diretório do jboss (jboss\server\default\conf\fernando.keystore), e no arquivo
jboss\server\default\deploy\jboss-web.deployer\server.xml eu adicionei esse código:

&lt;Connector  port="8443" protocol="HTTP/1.1" SSLEnabled="true"
                maxThreads="150" scheme="https" secure="true"
                clientAuth="false" sslProtocol="TLS"
				keystoreFile="${jboss.server.home.dir}/conf/fernando.keystore"
				keystorePass="fernando"/&gt;

espero ter ajudado também.

A

valeu pela dica cara…

então… o keystore eu consigo passar, consegui configurar no glassfish…

Só o bendito certificado que não vai agora…

To desde ontem penando nisso!!

xD~~

F

Amigo,

mudou o erro agora, ele indica que nao passei a tag do cUF sendo que ela está no meu XML de envio… vc passou por isso aqui:

&lt;?xml version="1.0" encoding="utf-8"?&gt;
	&lt;soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
		&lt;soap:Header&gt;
			&lt;nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"&gt;
				&lt;cUF&gt;35&lt;/cUF&gt;
				&lt;versaoDados&gt;2.00&lt;/versaoDados&gt;
			&lt;/nfeCabecMsg&gt;
		&lt;/soap:Header&gt;
		&lt;soap:Body&gt;
			&lt;nfeStatusServicoNF2Result xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"&gt;
				&lt;retConsStatServ versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe"&gt;
					&lt;tpAmb&gt;2&lt;/tpAmb&gt;
					&lt;verAplic&gt;SP_NFE_PL_006h&lt;/verAplic&gt;
					&lt;cStat&gt;409&lt;/cStat&gt;
					&lt;xMotivo&gt;Rejeição: Campo cUF inexistente no elemento nfeCabecMsg do SOAP Header&lt;/xMotivo&gt;
					&lt;cUF&gt;35&lt;/cUF&gt;
					&lt;dhRecbto&gt;2010-12-16T17:35:44&lt;/dhRecbto&gt;
				&lt;/retConsStatServ&gt;
			&lt;/nfeStatusServicoNF2Result&gt;
		&lt;/soap:Body&gt;
	&lt;/soap:Envelope&gt;

meu XML de envio estava assim:

&lt;?xml version="1.0" ?&gt;
	&lt;S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"&gt;
		&lt;S:Header&gt;
			&lt;ns2:nfeCabecMsg xmlns:ns2="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"&gt;
				&lt;cUF&gt;35&lt;/cUF&gt;
				&lt;versaoDados&gt;2.00&lt;/versaoDados&gt;
			&lt;/ns2:nfeCabecMsg&gt;
		&lt;/S:Header&gt;
		&lt;S:Body&gt;
			&lt;ns2:nfeDadosMsg xmlns:ns2="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"&gt;
				&lt;ns2:consStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"&gt;
					&lt;tpAmb&gt;2&lt;/tpAmb&gt;
					&lt;cUF&gt;35&lt;/cUF&gt;
					&lt;xServ&gt;STATUS&lt;/xServ&gt;
				&lt;/ns2:consStatServ&gt;
			&lt;/ns2:nfeDadosMsg&gt;
		&lt;/S:Body&gt;
	&lt;/S:Envelope&gt;
A

O Meu XML Fica assim:

Parecido com o seu!

<?xml version="1.0" encoding="UTF-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
    <soap12:Header>
        <nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">
            <cUF>41</cUF>
            <versaoDados>2.00</versaoDados>
        </nfeCabecMsg>
    </soap12:Header>
    <soap12:Body>
        <nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">
            <consStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00">
                <tpAmb>2</tpAmb>
                <cUF>41</cUF>
                <xServ>STATUS</xServ>
            </consStatServ>
        </nfeDadosMsg>
    </soap12:Body>
</soap12:Envelope>

Sua aplicação eh desktop??

F

Na realidade, eu nao tenho ainda uma cara pra esse sistema, mas basicamente ele está numa estrutura para desktop sim…

existe algum lugar onde eu configuro as tags do XML de envio? (o meu está como S:Envelope o seu soap12:Envelope por exemplo) pq foi a unica coisa diferente que observei entre o seu e o meu XML…

ahh alem é claro do encoding do tag xml inicial e dos xmlns de Envelope…

valeu pela ajuda

A

Entao fernando…

qdo eu monto meus XMLs eu já defino que eles sejam daquele jeito!

xD~~

Teste isso que você me passou no tomcat e funcionou!!
Agora vou procurar sobre o glassfish!

J

altitdb,

Qual foi a resolução para o 1º problema seu apresentado no seu post?

J

Consegui resolver o problema…

Por algum motivo apesar de não apresentar erro na adição do certificado, creio que o mesmo não estava sendo localizado. Refiz todo o processo de instalação e exportação do certificado até a inclusão…Após todo o processo refeito funcionou…

Agora estou com problema de formatação de XML, porém creio que seja porque estava usando a versão 1.10, vou fazer as mudanças para a versão 2.00 e posto o resultado.

Criado 10 de dezembro de 2010
Ultima resposta 22 de jun. de 2011
Respostas 12
Participantes 4