Inicio Projeto NFE Proprio. (RESOLVIDO)

2 respostas
S

Boa noite, Atualmente tenho uma aplicação rodando NFE 100% mas utilizando um programa externo "ACBR", vcs devem conhecer!
Mas acredito que cheguei a uma maturidade de criar meu proprio.
Li O manual do Contribuinte, e li bastantes topicos aqui no forum, e pra iniciar estou tentando Consultar o Status de serviço.
Usei como ponto inicial o Codigo (Ctrl C + Ctrl v) :

public class Status {  
  
    public static void main(String[] args) {  
                StringBuffer soapMessage = new StringBuffer();  
                soapMessage.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>")  
                        .append("<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\">")  
                        .append("<soap12:Header>")  
                        .append("<nfeCabecMsg xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2\">")  
                        .append("<versaoDados>1.07</versaoDados>")  
                        .append("<cUF>52</cUF>")  
                        .append("</nfeCabecMsg>")  
                        .append("</soap12:Header>")  
                        .append("<soap12:Body>")  
                        .append("<nfeStatusServicoNF2 xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2\">")  
                        .append("<nfeDadosMsg xmlns=\"http://www.portalfiscal.inf.br/nfe\">")  
                        .append("<consStatServ versao=\"1.07\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.portalfiscal.inf.br/nfe\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">")  
                        .append("<versao>1.07</versao>")  
                        .append("<tpAmb>2</tpAmb>")  
                        .append("<cUF>52</cUF>")  
                        .append("<xServ>STATUS</xServ>")  
                        .append("</consStatServ>")  
                        .append("</nfeDadosMsg>")  
                        .append("</nfeStatusServicoNF2>")  
                        .append("</soap12:Body>")  
                        .append("</soap12:Envelope>");  
  
                metodo2(soapMessage.toString(), "https://nfe.sefaz.go.gov.br/nfe/services/v2/NfeStatusServico2?wsdl");  
            }  
  
             public static void metodo2(String envelope, String urlAddress) {  
  
                try {  
                    MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);  
                    SOAPMessage message;  
  
                    try {  
  
                        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("javax.net.ssl.keyStoreType", "PKCS12");  
                        System.setProperty("javax.net.ssl.keyStore", "C:\\Certificado.pfx");  
                        System.setProperty("javax.net.ssl.keyStorePassword", "ARSOLUTI");  
  
                        System.setProperty("javax.net.ssl.trustStoreType", "JKS");  
                        System.setProperty("javax.net.ssl.trustStore", "C:\\Raiz.jks");  
  
  
                        MimeHeaders header = new MimeHeaders();  
                        header.addHeader("Content-Type", "application/soap+xml");  
  
                        message = factory.createMessage(header, new ByteArrayInputStream(envelope.getBytes()));  
                        SOAPConnection con = SOAPConnectionFactory.newInstance().createConnection();  
  
                        URL url = new URL(urlAddress);  
                        System.out.println("Message enviada \n"+message.toString());  
                        SOAPMessage res = con.call(message, url);  
  
                        ByteArrayOutputStream in = new ByteArrayOutputStream();  
                        message.writeTo(in);  
                        System.out.println("in :\n"+in.toString());  
  
                        ByteArrayOutputStream out = new ByteArrayOutputStream();  
                        res.writeTo(out);  
                        System.out.println("out :\n"+desnormalizar(out.toString()));  
  
                    } catch (IOException ex) {  
                        System.out.println(" ERRO: " + ex.getMessage());  
                    } finally {  
                    }  
                } catch (SOAPException ex) {  
                    System.out.println("" + ex.getMessage());  
                }  
            }  
  
  
        public static String desnormalizar(String texto) {  
            return texto.replace("<", "<").replace(">", ">").replace("''", "\"").replace(" ", "\r");  
        }  
}
Minhas duvidas: 1-Utilizo Eclipse e dá erro nesta linha:
Security.addprovider(new com.sun.net.ssl.internal.ssl.Provider());

o erro é este :

Access restriction: The type Provider is not accessible due to restriction on required library C:\Program Files\Java\jre7\lib\jsse.jar

2-como faço para obter esse arquivo jks, li muito, mas não cheguei em lugar nenhum, se puder um exemplo facil:
System.setProperty("javax.net.ssl.trustStore", "C:\\Raiz.jks");

2 Respostas

T

Verifique se este link te ajuda com o primeiro problema: http://www.thiagovespa.com.br/blog/2010/10/01/resolvendo-access-restriction-no-eclipse/

Sobre o arquivo jks eu costumo criar manualmente com o keytool (presente na pasta bin do java), porém recentemente eu vi um codigo que cria ele automaticamente.
Segue o codigo (eu não testei) http://www.javac.com.br/jc/posts/list/34-nfe-geracao-do-arquivo-cacerts-para-todos-os-estados-unico-arquivo.page

[]'s

S

Muito Obrigado Chefeeeeeeeee! Funcionou 100% , e trabalhar o com JKS Dentro do Codigo é bem melhor que o KeyTool!

Criado 30 de agosto de 2012
Ultima resposta 31 de ago. de 2012
Respostas 2
Participantes 2