Erro ao enviar NFe

0 respostas
guscoppi

Pessoal,

Estou desenvolvendo um applet para assinatura e transmissão de NFe. A assinatura já está tudo ok, usando A3.

A transmissão é que está gerando problema. Testei o código em uma classe no eclipse direto, e deu certo. Só que se coloco em um applet dá o erro abaixo:

10/12/2012 16:20:13 org.apache.commons.httpclient.HttpMethodDirector authenticateHost AVISO: Required credentials not available for BASIC <any realm>@homologacao.nfe.sefazvirtual.rs.gov.br:443 10/12/2012 16:20:13 org.apache.commons.httpclient.HttpMethodDirector authenticateHost AVISO: Preemptive authentication requested but no default credentials available

Minha classe é:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Provider;
import java.security.Security;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;

import javax.xml.crypto.dsig.XMLSignatureFactory;
import javax.xml.crypto.dsig.keyinfo.KeyInfo;
import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
import javax.xml.crypto.dsig.keyinfo.X509Data;

import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.util.AXIOMUtil;
import org.apache.commons.httpclient.protocol.Protocol;

import br.com.javac.nfeapplet.util.GlobalVars;
import br.inf.portalfiscal.www.nfe.wsdl.nferecepcao2.NfeRecepcao2Stub;
import br.inf.portalfiscal.www.nfe.wsdl.nferetrecepcao2.NfeRetRecepcao2Stub;

public class TransmitirNFe {

	private static final int SSL_PORT = 443;
	
	private PrivateKey privateKey;
	private KeyInfo keyInfo;
	private KeyStore keyStore;
	private String alias;

	public TransmitirNFe(KeyStore keyStore, String alias) {
		this.keyStore = keyStore;
		this.alias = alias;
	}
	
	public String transmiteNFe(String xml) throws Exception {
		String nrRec = "";
		
		URL url = new URL("https://homologacao.nfe.sefazvirtual.rs.gov.br/ws/Nferecepcao/NFeRecepcao2.asmx");//NfeRecepcao
		
		XMLSignatureFactory signatureFactory = XMLSignatureFactory.getInstance("DOM");
		loadCertificates(signatureFactory);

        String xmlEnvNFe = xml.toString();
        OMElement ome = AXIOMUtil.stringToOM(xmlEnvNFe);

        Iterator<?> children = ome.getChildrenWithLocalName("NFe");  
        while (children.hasNext()) {
            OMElement omElement = (OMElement) children.next();  
            if ((omElement != null) && ("NFe".equals(omElement.getLocalName()))) {  
            	omElement.addAttribute("xmlns", "http://www.portalfiscal.inf.br/nfe", null);  
            }
        }

        NfeRecepcao2Stub.NfeDadosMsg dadosMsg = new NfeRecepcao2Stub.NfeDadosMsg();
        dadosMsg.setExtraElement(ome);
        NfeRecepcao2Stub.NfeCabecMsg nfeCabecMsg = new NfeRecepcao2Stub.NfeCabecMsg();
        nfeCabecMsg.setCUF(GlobalVars.estado);
        nfeCabecMsg.setVersaoDados("2.00");

        NfeRecepcao2Stub.NfeCabecMsgE nfeCabecMsgE = new NfeRecepcao2Stub.NfeCabecMsgE();
        nfeCabecMsgE.setNfeCabecMsg(nfeCabecMsg);

        NfeRecepcao2Stub stub = new NfeRecepcao2Stub(url.toString());
        NfeRecepcao2Stub.NfeRecepcaoLote2Result result = stub.nfeRecepcaoLote2(dadosMsg, nfeCabecMsgE);
        
        Iterator<?> childrenr = result.getExtraElement().getChildrenWithLocalName("infRec");
        while (childrenr.hasNext()) {
            OMElement omElement = (OMElement) childrenr.next();  
            if (omElement.getLocalName().equals("infRec")){
            	OMElement omElementFilho = (OMElement) omElement.getChildren().next(); 
            	nrRec = omElementFilho.getText();  
            }
        	
        }
		
		return "";
			
	}
	
	private void loadCertificates(XMLSignatureFactory signatureFactory) throws Exception {
		if (keyStore != null) {
			KeyStore.PrivateKeyEntry pkEntry = null;
			if (keyStore.isKeyEntry(alias)) {
				char[] pin = ("999999").toCharArray();
				pkEntry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias,
						new KeyStore.PasswordProtection(pin));
				privateKey = pkEntry.getPrivateKey();
				X509Certificate cert = (X509Certificate) pkEntry.getCertificate();

				KeyInfoFactory keyInfoFactory = signatureFactory.getKeyInfoFactory();
				List<X509Certificate> x509Content = new ArrayList<X509Certificate>();

				x509Content.add(cert);
				X509Data x509Data = keyInfoFactory.newX509Data(x509Content);
				keyInfo = keyInfoFactory.newKeyInfo(Collections.singletonList(x509Data));

		        SocketFactoryDinamico socketFactoryDinamico = new SocketFactoryDinamico(cert, privateKey);
		        socketFactoryDinamico.setFileCacerts("NFeCacerts");
		        
		        Protocol protocol = new Protocol("https", socketFactoryDinamico, SSL_PORT);    
		        Protocol.registerProtocol("https", protocol); 
				
			}
			else {
				throw new Exception("Alias do certificado inválido.");
			}
		}
		else {
			throw new Exception("Informações do Certificado inválidas.");
		}
	}
}
Criado 11 de dezembro de 2012
Respostas 0
Participantes 1