Applet NFe conexção [RESOLVIDO]

4 respostas
jcarlos78

Pessoal , estou fazendo uma applet para consultas de NFe porem quando vou chamar o WebServices recebo o seguinte erro:

org.apache.axis2.AxisFault: Connection refused: connect

Segue o método que estou usando :

public String consulta(String chave) {  
	        try {  
	              
	            String codigoDoEstado = chave.substring(0,2);  
	            
	            // RIO DE JANEIRO 
	            URL url = new URL(HOMOLOGACAO_CONSULTA_SP);
                    
                    //System.setProperty("http.proxyPort", "80");
	            	              
	            /** 
	             * Xml de Consulta. 
	             */  
	            StringBuilder xml = new StringBuilder();  
	            xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")  
	                .append("<consSitNFe versao=\"2.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">")  
	                .append("<tpAmb>"+AMBIENTE+"</tpAmb>")  
	                .append("<xServ>CONSULTAR</xServ>")  
	                .append("<chNFe>")  
	                .append(chave)  
	                .append("</chNFe>")  
	                .append("</consSitNFe>");  
	  
	            OMElement ome = AXIOMUtil.stringToOM(xml.toString());  
	  
	            NfeConsulta2Stub.NfeDadosMsg dadosMsg = new NfeConsulta2Stub.NfeDadosMsg();  
	            dadosMsg.setExtraElement(ome);  
	  
	            NfeConsulta2Stub.NfeCabecMsg nfeCabecMsg = new NfeConsulta2Stub.NfeCabecMsg();  
	            /** 
	             * Código do Estado. 
	             */  
	            nfeCabecMsg.setCUF(codigoDoEstado);  
	  
	            /** 
	             * Versao do XML 
	             */  
	            nfeCabecMsg.setVersaoDados("2.00");  
	            NfeConsulta2Stub.NfeCabecMsgE nfeCabecMsgE = new NfeConsulta2Stub.NfeCabecMsgE();  
	            nfeCabecMsgE.setNfeCabecMsg(nfeCabecMsg);  
	  
	            NfeConsulta2Stub stub = new NfeConsulta2Stub(url.toString());  
	            NfeConsulta2Stub.NfeConsultaNF2Result result = stub.nfeConsultaNF2(dadosMsg, nfeCabecMsgE);  
	  
	            String resposta = result.getExtraElement().toString();
	            
	            System.out.println(resposta);  
	            
	            return resposta;
	            
	        } catch (Exception e) {  
	            e.printStackTrace();  
	        }  
	        
	        return null;
}

Eu tenho também a seguinte forma de obter o certificado da maquina do usuario mas não sei como setar isso para a conexção ...

Algue já fez algo parecido ?

X509Certificate cert = 
                    OnCert.funcCertificadoSelecionado(nomeCert, 
                    new String(senhaCert));

4 Respostas

Mackrophus

Olá jcarlos78,

Cara, tenta fazer dessa forma.

public static String enviar(String envelope, String urlAddress) {

    	String retorno = "";
    	
        try {
            MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
            SOAPMessage message;

            //setar certificados para conexão

            try {
                MimeHeaders header = new MimeHeaders();
                header.addHeader("Content-Type", "application/soap+xml");

                message = factory.createMessage(header, new ByteArrayInputStream(envelope.getBytes()));
                SOAPConnection con = SOAPConnectionFactory.newInstance().createConnection();
                                
                System.out.println("urlAddress: '" + urlAddress + "'");
                
                URL url = new URL(urlAddress);
                System.out.println("Message enviada \n" + message);                
                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" + out.toString());
                
                retorno = out.toString();

            } catch (IOException ex) {
            	ex.getMessage();
            }
            
        } catch (SOAPException ex) {
        	ex.getMessage();
        }        
        
        return retorno;
    }

    public String consultaNfe2(String mensagem, String enderecoServidor) {

        StringBuffer soapMessage = new StringBuffer();
        soapMessage.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
        			.append("<s:Envelope xmlns:s=\"http://www.w3.org/2003/05/soap-envelope\">")
        			.append("<s:Header>")
        			.append("<nfeCabecMsg xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2\">")
        			.append("<cUF>" + Utilitario.pegaUfCliente() + "</cUF>")
        			.append("<versaoDados>2.00</versaoDados>")
        			.append("</nfeCabecMsg>")
        			.append("</s:Header>")
        			.append("<s:Body xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">")
        			.append(mensagem)
        			.append("</s:Body>")
        			.append("</s:Envelope>");
        
        return enviar(soapMessage.toString(), enderecoServidor);

    }

	public void ConsultaNfe(String chave, String enderecoServidor){
		
		String idNfe = chave.substring(25, 34);
		
		String nfeDados = "<nfeDadosMsg xmlns=\"http://www.portalfiscal.inf.br/nfe/wsdl/NfeConsulta2\">" 
			+ "<consSitNFe  versao=\"2.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">" 
			+ "<tpAmb>" + Utilitario.pegaTipoAmbiente() + "</tpAmb>" 
			+ "<xServ>CONSULTAR</xServ>"
			+ "<chNFe>" + chave + "</chNFe>" 
			+ "</consSitNFe>"
			+ "</nfeDadosMsg>";
		
		log.info("Dados: " + nfeDados + "\n");
		
		String retornoProc = null;

		try {  
		  
			retornoProc = consultaNfe2(nfeDados, enderecoServidor);
			  System.out.println("=================================================================");
            System.out.println(retornoProc);
            System.out.println("=================================================================");

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

e para invocar

ConsultaNfe(CHAVE, ENDERECO_SERVIDOR);

Qualquer coisa estou a disposição.

jcarlos78

Vlw Mackrophus,

Acabei resolvendo meu probelma mudando :

System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");      
      
    System.setProperty("javax.net.ssl.keyStore", caminhoDoCertificadoDoCliente);      
    System.setProperty("javax.net.ssl.keyStorePassword", senhaDoCertificadoDoCliente);

Por:

//Utilizando Repositorio do Windows  
  
System.setProperty("javax.net.ssl.keyStoreProvider", "SunMSCAPI");    
System.setProperty("javax.net.ssl.keyStoreType", "Windows-MY");   
  
System.setProperty("javax.net.ssl.keyStoreAlias", xcertificado);    //alias do certificado
System.setProperty("javax.net.ssl.keyStorePassword", senhaDoCertificado);

Tive ajuda do [email removido] no forum Javac.com.br

Segue o código completo que estou usando agora :

public String consulta(String chave) {  
        
        
                String resposta = null;
                
	        try {  
	              
	            String codigoDoEstado = chave.substring(0,2);  
	            
	            // SÃO PAULO
	            URL url = new URL(HOMOLOGACAO_CONSULTA_SP);
                    
                    //System.setProperty("http.proxyPort", "8080");
                    //System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");  
                    
                    /**  
                    * Informações do Certificado Digital.  
                    */    
                    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.clearProperty("javax.net.ssl.keyStore");    
                    System.clearProperty("javax.net.ssl.keyStorePassword");    
                    System.clearProperty("javax.net.ssl.trustStore");    

                    System.setProperty("javax.net.ssl.keyStoreProvider", "SunMSCAPI");    
                    System.setProperty("javax.net.ssl.keyStoreType", "Windows-MY");   

                    System.setProperty("javax.net.ssl.keyStoreAlias", SESSAO.getAlias());    
                    System.setProperty("javax.net.ssl.keyStorePassword", new String(SESSAO.getSenhaCert()));
                    
                    System.setProperty("javax.net.ssl.trustStoreType", "JKS");  
                    System.setProperty("javax.net.ssl.trustStore", "C:/app/a1/NFeCacerts");                    
	            	              
	            /** 
	             * Xml de Consulta. 
	             */  
	            StringBuilder xml = new StringBuilder();  
	            xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")  
	                .append("<consSitNFe versao=\"2.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">")  
	                .append("<tpAmb>"+AMBIENTE+"</tpAmb>")  
	                .append("<xServ>CONSULTAR</xServ>")  
	                .append("<chNFe>")  
	                .append(chave)  
	                .append("</chNFe>")  
	                .append("</consSitNFe>");  
	  
	            OMElement ome = AXIOMUtil.stringToOM(xml.toString());  
	  
	            NfeConsulta2Stub.NfeDadosMsg dadosMsg = new NfeConsulta2Stub.NfeDadosMsg();  
	            dadosMsg.setExtraElement(ome);  
	  
	            NfeConsulta2Stub.NfeCabecMsg nfeCabecMsg = new NfeConsulta2Stub.NfeCabecMsg();  
	            /** 
	             * Código do Estado. 
	             */  
	            nfeCabecMsg.setCUF(codigoDoEstado);  
	  
	            /** 
	             * Versao do XML 
	             */  
	            nfeCabecMsg.setVersaoDados("2.00");  
	            NfeConsulta2Stub.NfeCabecMsgE nfeCabecMsgE = new NfeConsulta2Stub.NfeCabecMsgE();  
	            nfeCabecMsgE.setNfeCabecMsg(nfeCabecMsg);  
	  
	            NfeConsulta2Stub stub = new NfeConsulta2Stub(url.toString());  
	            NfeConsulta2Stub.NfeConsultaNF2Result result = stub.nfeConsultaNF2(dadosMsg, nfeCabecMsgE);  
	  
	            resposta = result.getExtraElement().toString();
	            
	            System.out.println(resposta);  
	            
	            return resposta;
	            
	        } catch (MalformedURLException | XMLStreamException | RemoteException e) {  
	            this.jTextPane1.setText(e.getMessage());
                    this.jTabbedPane1.setSelectedIndex(4);
                    //e.printStackTrace();  
	        }  finally {
                    
                    this.jTextPane1.setText(resposta);
                    this.jTabbedPane1.setSelectedIndex(4);
                    
                }
	        
	        return resposta;
	    }

A unica coisa que ficou faltando eu resolver é como obter o arquivo NFeCacerts dos estados, usando minha applet sem usar um caminho absouto da maquina mas isso acho melhor tratar em outra thread.

Vlw pela ajuda pessoal.

Mackrophus

Blz brow, só coloca o post como resolvido, por favor.

jcarlos78

Faz um tempo que eu tava tentando descobrir como fazer isso mudar o tópico para [RESOLVIDO] … rs

Só editar o primeiro post … nossa agora parece até bobo mas não foi tão logico até eu descobrir . rs …

Mackrophus, feito :wink:

Criado 12 de setembro de 2012
Ultima resposta 13 de set. de 2012
Respostas 4
Participantes 2