Nfe - Nota Fiscal Eletronica

[quote=looljunior]Olá pessoal…

estou com um problema na geração do arquivo xml “NFe.xml”

Estou fazendo o seguinte:

Gerei meus bens através das instruções deste site utilizando JAXB.

depois eu faço um “teste” eu pego o arquivo xml de exemplo que está disponivel no blog da receita neste site

ai eu faço assim:

public static void main(String[] args) {
                try {		
                NFe retorno = JAXB.unmarshal("C:\\NFe.xml", NFe.class); // do xml de exemplo da receita, eu passo para os beans gerados pelo meu JAXB
		toXML(retorno); // depois eu faço o processo inverso de novo, para ve se meus beans gerados, foram gerados corretamente...

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

	public static void toXML(NFe root) throws JAXBException {
		JAXBContext ctx = JAXBContext.newInstance(NFe.class);
		Marshaller marshaller = ctx.createMarshaller();
		marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
		marshaller.marshal(root, new File("D://NFe.xml"));
		System.out.println("Arquivo gerado com sucesso!");
	}

Porem o que acontece é que no arquivo xml exemplo da receita nesta parte do código em xml está assim:

<?xml version="1.0" encoding="utf-8"?>
<NFe xmlns="http://www.portalfiscal.inf.br/nfe"> // a tag NFe
  <infNFe Id="NFe35080599999090910270550010000000015180051273" versao="1.10">
    <ide>...
...

no meu arquivo sai assim:

[code]

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> ... ...[/code]

Com o nFe minusculo na hora de eu validar no site da receita da erro…
o que pode está acontecendo para o meu xml está saindo diferente?

aparece aquele "xmlns:ns2=“http://www.w3.org/2000/09/xmldsig#” tambem no meu…
mas eu soh alterando o nFe para NFe e boto para validar… jah diz que o arquivo está certo…

alguem tem idéia do que pode ser??[/quote]

quando vc gera os beans pelo JAXB aconte esses rolos, ele adiciona esse ns2 e esse problema de nomeação com algumas tags, por isso decidi fazer os beans todos na mão porque esse xml ai de exemplo nem contem todos os campos que se utiliza na NFe, pois tem varias formas de se emitir uma NFe tributações aliquotas pins cofins redução de impostos e toda esse m. do governo, por isso optei em fazer os beans no braço seguindo a risca o manual do contribuinte e usando as annotation do JAXB para construir meu xml, quando dou unmarshall não tenho problema algum, os beans são populados corretamente e pra qualquer tipo de nota fiscal gerada esta conforme o padrão da receita, ai vai um exemplo, pra solução do ns2 tem varios posts aqui que ensinam como remover, abraços.

@XmlRootElement(name = "NFe")
@XmlAccessorType(XmlAccessType.FIELD)
public class NFe {

    public NFe() {
        xmlns = "http://www.portalfiscal.inf.br/nfe";
    }

    @XmlElement(name = "infNFe")
    private InfNFe infNFe;

    @XmlAttribute(name = "xmlns")
    private  String xmlns;

    @XmlElement(name = "Signature")
    private Signature signature;

    public InfNFe getInfNFe() {
        return infNFe;
    }

    public void setInfNFe(InfNFe infNFe) {
        this.infNFe = infNFe;
    }

    public Signature getSignature() {
        return signature;
    }

    public void setSignature(Signature signature) {
        this.signature = signature;
    }

niguem ???
não acredito que ninguem tenha implementado usando JAX-WS ???

Fala pessoal, to apanhando um monte com o certificado A3, será que alguém me ajuda…

Com o certificado A1 ( com o arquivo.pfx) eu já consegui mandar a nota blz, mais com o cartão não tá dando, to fazendo assim:

o Arquivo Token tá ssim:

  name = SafeSign   
  library =  C:/WINDOWS/system32/aetpkss1.dll

// para setar a segurança

  System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
  Provider p = new sun.security.pkcs11.SunPKCS11(configuracaoToken);
  Security.addProvider(p);
  System.setProperty("javax.net.ssl.keyStoreType", "PKCS11");
  System.setProperty("javax.net.ssl.keyStore", "NONE");
  System.setProperty("javax.net.ssl.keyStorePassword", senhaToken);

depois para fazer a assinatura to fazendo assim:

	// Load the KeyStore and get the signing key and certificate.
	KeyStore ks = null;
	boolean token = true;

                Provider p = new sun.security.pkcs11.SunPKCS11(configuracaoToken);
	Security.addProvider(p);
	ks = KeyStore.getInstance("PKCS11");
	ks.load(null, senha.toCharArray());

	Enumeration aliasesEnum = ks.aliases();
	String alias = "";
	
                while (aliasesEnum.hasMoreElements()) {
	  alias = (String) aliasesEnum.nextElement();

	  if (ks.isKeyEntry(alias)) {
		// System.out.println(alias);
		break;
	  }
	}
	
                KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(alias,
		new KeyStore.PasswordProtection(senha.toCharArray()));

	X509Certificate cert = (X509Certificate) keyEntry.getCertificate();

	// Create the KeyInfo containing the X509Data.
	KeyInfoFactory kif = fac.getKeyInfoFactory();
	List x509Content = new ArrayList();
	x509Content.add(cert);
	X509Data xd = kif.newX509Data(x509Content);
	KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd));
 Assina blz tbm, mais na hora de enviar a nota pelo web service me da esse erro:
 PKIX path building failed:

unable to find valid certification path to requested target

Se alguém puder dar uma luz…

Desde já agradeço.

[quote=dankshit]Fala pessoal, to apanhando um monte com o certificado A3, será que alguém me ajuda…

Com o certificado A1 ( com o arquivo.pfx) eu já consegui mandar a nota blz, mais com o cartão não tá dando, to fazendo assim:

o Arquivo Token tá ssim:

  name = SafeSign   
  library =  C:/WINDOWS/system32/aetpkss1.dll

// para setar a segurança

  System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
  Provider p = new sun.security.pkcs11.SunPKCS11(configuracaoToken);
  Security.addProvider(p);
  System.setProperty("javax.net.ssl.keyStoreType", "PKCS11");
  System.setProperty("javax.net.ssl.keyStore", "NONE");
  System.setProperty("javax.net.ssl.keyStorePassword", senhaToken);

depois para fazer a assinatura to fazendo assim:

	// Load the KeyStore and get the signing key and certificate.
	KeyStore ks = null;
	boolean token = true;

                Provider p = new sun.security.pkcs11.SunPKCS11(configuracaoToken);
	Security.addProvider(p);
	ks = KeyStore.getInstance("PKCS11");
	ks.load(null, senha.toCharArray());

	Enumeration aliasesEnum = ks.aliases();
	String alias = "";
	
                while (aliasesEnum.hasMoreElements()) {
	  alias = (String) aliasesEnum.nextElement();

	  if (ks.isKeyEntry(alias)) {
		// System.out.println(alias);
		break;
	  }
	}
	
                KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(alias,
		new KeyStore.PasswordProtection(senha.toCharArray()));

	X509Certificate cert = (X509Certificate) keyEntry.getCertificate();

	// Create the KeyInfo containing the X509Data.
	KeyInfoFactory kif = fac.getKeyInfoFactory();
	List x509Content = new ArrayList();
	x509Content.add(cert);
	X509Data xd = kif.newX509Data(x509Content);
	KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd));
 Assina blz tbm, mais na hora de enviar a nota pelo web service me da esse erro:
 PKIX path building failed:

unable to find valid certification path to requested target

Se alguém puder dar uma luz…

Desde já agradeço.

[/quote]

parece que ele não encontrou seu certificado

ai vai uma classe de exemplo


public static String assinarRaiz(String xml, String certificado, String keyStorePass, boolean token) throws Exception {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        DocumentBuilder builder = factory.newDocumentBuilder();
        // Document docs = builder.parse(new File(
        // "c:/xml/430802017886010001735500000000010000030371-nfe.xml"));
        Document doc = factory.newDocumentBuilder().parse(
                new ByteArrayInputStream(xml.getBytes()));

        doc.getDocumentElement().removeAttribute("xmlns:ns2");

        // NodeList elements = doc.getElementsByTagName("infNFe");
        Node element = doc.getDocumentElement().getFirstChild();//.getNextSibling();
        // elements.getLength();
        Element el = (Element) element;
        // Element el =
        // doc.getDocumentElement().getFirstChild().getChildNodes();
        String id = el.getAttribute("Id");

        // Create a DOM XMLSignatureFactory that will be used to
        // generate the enveloped signature.
        XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");

        // Create a Reference to the enveloped document (in this case,
        // you are signing the whole document, so a URI of "" signifies
        // that, and also specify the SHA1 digest algorithm and
        // the ENVELOPED Transform.
        ArrayList transformList = new ArrayList();
        TransformParameterSpec tps = null;
        Transform envelopedTransform = fac.newTransform(Transform.ENVELOPED,
                tps);
        Transform c14NTransform = fac.newTransform(
                "http://www.w3.org/TR/2001/REC-xml-c14n-20010315", tps);

        transformList.add(envelopedTransform);
        transformList.add(c14NTransform);

        // Load the KeyStore and get the signing key and certificate.
        KeyStore ks = null;
        if (token) {  //AQUI SE FOR TOKEN(A3)
            Provider p = new sun.security.pkcs11.SunPKCS11("c:\\nfe\\certificados\\token.cfg");
            Security.addProvider(p);
            ks = KeyStore.getInstance("PKCS11");
            ks.load(null, keyStorePass.toCharArray());


        } else {

            ks = KeyStore.getInstance("PKCS12");
            FileInputStream fis = new FileInputStream(certificado);
            //load the keystore
            ks.load(fis, keyStorePass.toCharArray());
        } 
        String alias = ks.aliases().nextElement();

        KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(alias, new KeyStore.PasswordProtection(keyStorePass.toCharArray()));

        X509Certificate cert = (X509Certificate) keyEntry.getCertificate();

        // Create the KeyInfo containing the X509Data.
        KeyInfoFactory kif = fac.getKeyInfoFactory();
        List x509Content = new ArrayList();
        // x509Content.add(cert.getSubjectX500Principal().getName());
        x509Content.add(cert);
        X509Data xd = kif.newX509Data(x509Content);
        KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd));

        // doc.getDocumentElement().removeAttribute("xmlns:ns2");
        // ((Element)
        // doc.getDocumentElement().getElementsByTagName("NFe").item(0))
        // .setAttribute("xmlns", "http://www.portalfiscal.inf.br/nfe");

        // Create a DOM XMLSignatureFactory that will be used to
        // generate the enveloped signature.

        Reference ref = fac.newReference("#" + id, fac.newDigestMethod(
                DigestMethod.SHA1, null), transformList, null, null);

        // Create the SignedInfo.
        SignedInfo si = fac.newSignedInfo(fac.newCanonicalizationMethod(
                CanonicalizationMethod.INCLUSIVE,
                (C14NMethodParameterSpec) null), fac.newSignatureMethod(SignatureMethod.RSA_SHA1, null),
                Collections.singletonList(ref));

        // Create the XMLSignature, but don't sign it yet.
        XMLSignature signature = fac.newXMLSignature(si, ki);

        // Marshal, generate, and sign the enveloped signature.
        // Create a DOMSignContext and specify the RSA PrivateKey and
        // location of the resulting XMLSignature's parent element.
        DOMSignContext dsc = new DOMSignContext(keyEntry.getPrivateKey(), doc.getDocumentElement());
        signature.sign(dsc);

        // Output the resulting document.
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer trans = tf.newTransformer();
        trans.transform(new DOMSource(doc), new StreamResult(os));
        return os.toString();

    }

e o arquivo token.cfg apontando pra essa dll

name = SmartCard 
library = C:\WINDOWS\system32\aetpkss1.dll

e quem me ajuda no lance do JAX-WS pra passar o nfeCabecMsg no header do SOAP ???

Fala pessoal,

Ainda estou com o problema de envio da nfe com o certificado A3, será que estou fazendo alguma coisa errada na parte das propriedades,
porque assina a nota sem erros, mais na hora do envio da nfe da o erro pra mim.

PKIX path building failed

unable to find valid certification path to requested target

Queria fazer funcionar sem usar o JKS.

	  System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
	  Provider p = new sun.security.pkcs11.SunPKCS11(configuracaoToken);
	  Security.addProvider(p);
	  System.setProperty("javax.net.ssl.keyStoreType", "PKCS11");
	  System.setProperty("javax.net.ssl.keyStore", "NONE");
	  System.setProperty("javax.net.ssl.keyStorePassword", senhaToken);

Obrigado

[quote=dankshit]Fala pessoal,

Ainda estou com o problema de envio da nfe com o certificado A3, será que estou fazendo alguma coisa errada na parte das propriedades,
porque assina a nota sem erros, mais na hora do envio da nfe da o erro pra mim.

PKIX path building failed

unable to find valid certification path to requested target

Queria fazer funcionar sem usar o JKS.

	  System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
	  Provider p = new sun.security.pkcs11.SunPKCS11(configuracaoToken);
	  Security.addProvider(p);
	  System.setProperty("javax.net.ssl.keyStoreType", "PKCS11");
	  System.setProperty("javax.net.ssl.keyStore", "NONE");
	  System.setProperty("javax.net.ssl.keyStorePassword", senhaToken);

Obrigado[/quote]

brother
unable to find valid certification path to requested target

incapaz de encontrar o caminho válido de destino do certificado solicitado

a classe que passei acima não resolve ? porque testei aqui com o A3 e funciona blz, abraços.

Fala pessoal,
aix , peguei a sua classe para testar, mais ela assinou meu XML fora da TAG , ai peguei somente a parte do certificado e colei na minha classe de assinatura,
mais recebi o mesmo erro.

Você que já passou por esse problema, sabe me dizer se tenho que fazer mais alguma coisa para instalar o cartão.

To com um cartão do Serasa modelo PERTO, que peguei com o cliente, segui o passo a passo do site www.certificado digital.com.br. Olho no programinha do cartão

e ele está como “operacional”. Não sei se deve fazer mais alguma coisa.

Desde já agradeço.

[quote=dankshit]Fala pessoal,
aix , peguei a sua classe para testar, mais ela assinou meu XML fora da TAG , ai peguei somente a parte do certificado e colei na minha classe de assinatura,
mais recebi o mesmo erro.

Você que já passou por esse problema, sabe me dizer se tenho que fazer mais alguma coisa para instalar o cartão.

To com um cartão do Serasa modelo PERTO, que peguei com o cliente, segui o passo a passo do site www.certificado digital.com.br. Olho no programinha do cartão

e ele está como “operacional”. Não sei se deve fazer mais alguma coisa.

Desde já agradeço.
[/quote]

Duas possibilidades para este erro:

  1. No seu cartao nao tem toda a cadeia certificadora;
  2. No jks, nao existe a cadeia certificadora do emissor do certificado da receita que voce esta acessando.

Para nao poluir demais este forum, podemos trocar algumas msg em pvt e quando resolver, posta o resultado, falo?

Alencar

Pessoal, os clientes de vocês tem adquirido certificado A3 da CEF?
Pergunto pois os certificados emitidos por esta AC tem validde máxima
até domingo, 30 de outubro de 2011 20:59:00.
Isto se deve ao certificado raiz ICP-Brasil (não o v1) que vence um mes
depois.

Portanto, mesmo sendo A3, o certificado emitido pela AC CAIXA PJ terá
no máximo 1 ano e alguns meses de validade.
Interessante como a ICP ainda não tomou providências, se é que pode.

Alencar

dankshit , verifique se toda a cadeia do cartão esta presente.

Eu tbm tenho um cartão desse modelo “PERTO” e consegui funcionar utilizando aquela classe que postei semana passada, verifique se vc tem aquela dll no c:\windows, e claro, verifique se o caminho esta certo, pois varia de acordo com o windows. por exemplo

c:\winnt… (windows 200)
c:\windows… (Windows xp)

sei que parece tonteira, mas agente sempre erra as coisas mais fáceis…!!

Aí galera… estou com o mesmo problema aí de muitos, não conseguindo utilizar o certificado que está no cartão A3 para assinar a conexão com o Web Service.

O certificado está correto, já verifiquei. Inclusive a assinatura dos XMLs já está correta.

Meu leitor é aquele do Serasa, e o cartão é o e-CNPJ.

Meu código está assim:

public static void signature() {

    char pin[] = &quot;123456&quot;.toCharArray();
    String config = &quot;./token.cfg&quot;;
    
    Provider pr = new sun.security.pkcs11.SunPKCS11(config);
    java.security.Security.addProvider(pr);
    System.out.println(pr.getName());
    
    try
		{
    	XMLSignatureFactory fac = XMLSignatureFactory.getInstance(&quot;DOM&quot;);
    	
    	KeyStore ks = ks = KeyStore.getInstance(&quot;pkcs11&quot;);
			ks.load(null, pin);
			
			KeyStore.PrivateKeyEntry keyEntry = null;

			for (Enumeration e = ks.aliases(); e.hasMoreElements();)
			{
				keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry((String) e.nextElement(),
						new KeyStore.PasswordProtection(pin));
			}

			X509Certificate cert = (X509Certificate) keyEntry.getCertificate();
			
			System.out.println(&quot; -------&gt;&gt;&gt;&gt;&gt;&gt; &quot; + ks.getCertificateAlias(cert));
			
			KeyInfoFactory kif = fac.getKeyInfoFactory();
			ArrayList x509Content = new ArrayList();
			x509Content.add(cert);
			X509Data xd = kif.newX509Data(x509Content);
			KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd));			
		}
		catch (KeyStoreException e){
			e.printStackTrace();
		}catch (NoSuchAlgorithmException e){
			e.printStackTrace();
		}catch (CertificateException e){
			e.printStackTrace();
		}catch (IOException e){
			e.printStackTrace();
		}catch (UnrecoverableEntryException e){
			e.printStackTrace();
		}
	}
public static void main(String[] args)
			throws XMLStreamException, RemoteException
	{		

		System.setProperty(&quot;javax.net.debug&quot;, &quot;ssl&quot;);
		
		System.setProperty(&quot;java.protocol.handler.pkgs&quot;, &quot;com.sun.net.ssl.internal.www.protocol&quot;);  
		
		//System.setProperty(&quot;javax.net.ssl.trustStoreType&quot;, &quot;JKS&quot;);      
		//System.setProperty(&quot;javax.net.ssl.trustStore&quot;, &quot;./nfe1.jks&quot;);//caminho do arquivo criado pelo o InstallCert no caso o jssecacerts        
		//System.setProperty(&quot;javax.net.ssl.trustStorePassword&quot;, &quot;123456&quot;);
		//System.setProperty(&quot;javax.net.ssl.trustStoreAlias&quot;, &quot;nfeKey&quot;);
		
		System.setProperty(&quot;javax.net.ssl.trustStore&quot;, &quot;NONE&quot;);//caminho do arquivo criado pelo o InstallCert no caso o jssecacerts
		System.setProperty(&quot;javax.net.ssl.trustStoreType&quot;, &quot;PKCS11&quot;);
		
		System.setProperty(&quot;javax.net.ssl.keyStore&quot;, &quot;NONE&quot;);				
		System.setProperty(&quot;javax.net.ssl.keyStoreType&quot;, &quot;PKCS11&quot;);

		System.setProperty(&quot;javax.net.ssl.keyStoreProvider&quot;, &quot;SunPKCS11-SafeSign&quot;);
		
		System.setProperty(&quot;javax.net.ssl.keyStorePassword&quot;, &quot;123456&quot;);
		
		A3.signature();
	

		NfeStatusServico2Stub stub = new NfeStatusServico2Stub();
		NfeStatusServico2Stub.NfeDadosMsg dados = new NfeStatusServico2Stub.NfeDadosMsg();

		String s = &quot;&lt;consStatServ versao=\"2.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\"&gt;"
				+ "&lt;tpAmb&gt;2&lt;/tpAmb&gt;" + "&lt;cUF&gt;43&lt;/cUF&gt;" + "&lt;xServ&gt;STATUS&lt;/xServ&gt;" + "&lt;/consStatServ&gt;";

		OMElement el = AXIOMUtil.stringToOM(s);
		dados.setExtraElement(el);

		NfeStatusServico2Stub.NfeCabecMsg cab = new NfeStatusServico2Stub.NfeCabecMsg();
		cab.setVersaoDados("2.00");
		cab.setCUF("43");
		NfeStatusServico2Stub.NfeCabecMsgE cabE = new NfeStatusServico2Stub.NfeCabecMsgE();
		cabE.setNfeCabecMsg(cab);

		System.out.println(stub.nfeStatusServicoNF2(dados, cabE).getExtraElement());

	}

O erro que me retorna são esses:

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(Unknown Source)
	at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
	at sun.security.validator.Validator.validate(Unknown Source)
	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(Unknown Source)
	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
	... 49 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
	at java.security.cert.CertPathBuilder.build(Unknown Source)
	... 55 more

Alguém saberia como resolver isso???

Alguns sugerem utilizar a trustStore, mas não entendi se realmente é necessário e/ou como devo pegar esse arquivo.

Obrigado

[quote=carlos.scuna]Aí galera… estou com o mesmo problema aí de muitos, não conseguindo utilizar o certificado que está no cartão A3 para assinar a conexão com o Web Service.

O certificado está correto, já verifiquei. Inclusive a assinatura dos XMLs já está correta.

Meu leitor é aquele do Serasa, e o cartão é o e-CNPJ.

[/quote]

Vamos la, por partes:

Você afirmou que o seu problema não é assinar, ok?
Então o galho está na verificação do certificado do site de destino, o que não tem nada a ver com assinatura.

Para isso, você deve (pelo menos foi o que fiz e utilizo sem problemas) definir o truststore onde o certificado do site (SEFAZ) será validado.
Fiz assim:

    // configura o acesso dos certificados de validacao
    System.setProperty("javax.net.ssl.trustStoreType", "JKS");
    System.setProperty("javax.net.ssl.trustStore", pathV);
    System.setProperty("javax.net.ssl.trustStoreAlias", aliasV);
    System.setProperty("javax.net.ssl.trustStorePassword", passV);

onde:
pathV é uma String que indica o jks que contém todos os certificados de todas as ACs do brasil;
aliasV é o aliasV tenho setado como “serpro”, mas pra te dizer a verdade, não serve pra nada;
passV é a senha do jks.

como este JKS contém todos os certificados das ACs do brasil, qualquer certificado que o site use será validado.

Com isso e com o seu smartcard contendo também toda a cadeia de certificação do seu certificado, a conexão é garantida.
Caso precise, posso lhe disponibilizar o meu jks. Mande msg em pvt.

Alencar

Alguém ja montou a NFe do destinátario??
eu montei a nfe do destinatário , mas quando valido da um erro loco…

org.xml.sax.SAXParseException: Identity Constraint error: identity constraint "KeyRef@1d15445" has a keyref which refers to a key or unique that is out of scope.
se alguém tiver alguma dica…
alguem sabe de algum validador para o layout 2?

abraco

[quote=alves.Felipe]Alguém ja montou a NFe do destinátario??
eu montei a nfe do destinatário , mas quando valido da um erro loco…

org.xml.sax.SAXParseException: Identity Constraint error: identity constraint "KeyRef@1d15445" has a keyref which refers to a key or unique that is out of scope.
se alguém tiver alguma dica…
alguem sabe de algum validador para o layout 2?

abraco[/quote]

Pergunto: o que seria a NFe do destinatário? Algo como a " Distribuição da NF-e para o Destinatário", pg 105 do manual?

Você mesmo pode fazer um validador usando os schemas disponíveis pelo pacote em uso, hoje na versão PL005d.
A partir de abril/2010, versão PL006c (creio que seja a ultima).
Se quiser uma ajuda nisso, mande uma msg em pvt.

Alencar

[quote=philler][quote=alves.Felipe]Alguém ja montou a NFe do destinátario??
eu montei a nfe do destinatário , mas quando valido da um erro loco…

org.xml.sax.SAXParseException: Identity Constraint error: identity constraint "KeyRef@1d15445" has a keyref which refers to a key or unique that is out of scope.
se alguém tiver alguma dica…
alguem sabe de algum validador para o layout 2?

abraco[/quote]

Pergunto: o que seria a NFe do destinatário? Algo como a " Distribuição da NF-e para o Destinatário", pg 105 do manual?

Você mesmo pode fazer um validador usando os schemas disponíveis pelo pacote em uso, hoje na versão PL005d.
A partir de abril/2010, versão PL006c (creio que seja a ultima).
Se quiser uma ajuda nisso, mande uma msg em pvt.

Alencar[/quote]

então philler… é bem essa página mesmo…
mas consegui arrumar… na verdade eu estava usando o pacote de schema PL_006preC ai baixei o PL_006e e ai foi na boa…
pq no 6e não tem essa chave de referencia que tem no 6c…
acho que os caras tinham meio q se perdido com o schema e o layout…
mas valeo pela ajuda…

[quote=philler][quote=carlos.scuna]Aí galera… estou com o mesmo problema aí de muitos, não conseguindo utilizar o certificado que está no cartão A3 para assinar a conexão com o Web Service.

O certificado está correto, já verifiquei. Inclusive a assinatura dos XMLs já está correta.

Meu leitor é aquele do Serasa, e o cartão é o e-CNPJ.

[/quote]

Vamos la, por partes:

Você afirmou que o seu problema não é assinar, ok?
Então o galho está na verificação do certificado do site de destino, o que não tem nada a ver com assinatura.

Para isso, você deve (pelo menos foi o que fiz e utilizo sem problemas) definir o truststore onde o certificado do site (SEFAZ) será validado.
Fiz assim:

    // configura o acesso dos certificados de validacao
    System.setProperty("javax.net.ssl.trustStoreType", "JKS");
    System.setProperty("javax.net.ssl.trustStore", pathV);
    System.setProperty("javax.net.ssl.trustStoreAlias", aliasV);
    System.setProperty("javax.net.ssl.trustStorePassword", passV);

onde:
pathV é uma String que indica o jks que contém todos os certificados de todas as ACs do brasil;
aliasV é o aliasV tenho setado como “serpro”, mas pra te dizer a verdade, não serve pra nada;
passV é a senha do jks.

como este JKS contém todos os certificados das ACs do brasil, qualquer certificado que o site use será validado.

Com isso e com o seu smartcard contendo também toda a cadeia de certificação do seu certificado, a conexão é garantida.
Caso precise, posso lhe disponibilizar o meu jks. Mande msg em pvt.

Alencar
[/quote]

Aí… consegui resolver. Já testei tudo certinho com o Web Service de consulta de Status, tudo funcionou perfeito.

Consegui resolver depois de ler essa página: http://blogs.sun.com/andreas/entry/no_more_unable_to_find

O que faltava era importar os certificados da receita, os que são retornados para mim quando tento estabelecer uma conexão ssl com eles.
Porque se eu não tiver estes certificados marcados como confiáveis, a conexão não é estabelecida.

Nesse tutorial aí do link o cara passa um programa chamado InstallCert, que até já foi falado aqui no fórum.
Você tem que passar a URL da receita pro programa, no meu caso foi a de SP: homologacao.nfe.fazenda.sp.gov.br

O programa vai gerar um arquivo com o nome de jssecacerts

É este o arquivo que deve ser configurado lá nas propriedades do java, antes de fazer a conexão com o Web Service:

		System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
		
		// setando a armazenagem de certificados confiáveis
		System.setProperty("javax.net.ssl.trustStore", "./jssecacerts");
		System.setProperty("javax.net.ssl.trustStoreType", "JKS");

		// setando a armazenagem do certificado com a chave privada
		System.setProperty("javax.net.ssl.keyStore", "NONE");
		System.setProperty("javax.net.ssl.keyStoreType", "PKCS11");
		System.setProperty("javax.net.ssl.keyStoreProvider", "SunPKCS11-SafeSign");

		
		// conexão com o web service via o stub
		NfeStatusServico2Stub stub = new NfeStatusServico2Stub();
		NfeStatusServico2Stub.NfeDadosMsg dados = new NfeStatusServico2Stub.NfeDadosMsg();

		String s = "&lt;consStatServ versao=\"2.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\"&gt;"
				+ "&lt;tpAmb&gt;2&lt;/tpAmb&gt;" + "&lt;cUF&gt;43&lt;/cUF&gt;" + "&lt;xServ&gt;STATUS&lt;/xServ&gt;" + "&lt;/consStatServ&gt;";

		OMElement el = AXIOMUtil.stringToOM(s);
		dados.setExtraElement(el);

		NfeStatusServico2Stub.NfeCabecMsg cab = new NfeStatusServico2Stub.NfeCabecMsg();
		cab.setVersaoDados("2.00");
		cab.setCUF("43");
		NfeStatusServico2Stub.NfeCabecMsgE cabE = new NfeStatusServico2Stub.NfeCabecMsgE();
		cabE.setNfeCabecMsg(cab);

		System.out.println(stub.nfeStatusServicoNF2(dados, cabE).getExtraElement());

Aí funcionou.

Obrigado a todos os que tiram um tempo pra contribuir aqui no fórum. É por isso que Java é f*** demais, hehehehh

Fala pessoal,

Alguém esta com problemas para consulta de recibos de envio de lotes de NF-e em ambiente de homologação SP ?

Toda vez que consulta um lote que fiz a partir de hj dia 30/03/2010, me retorna a mensagem

225 - Falha no Schema XML do lote de Nfe.

Se eu consultar um lote que foi feito anteriormente, consulta tudo certinho…

Desde já agradeço.

Boa tarde pessoal!

Depois de alguns dias de luta estamos recebendo a seguinte exception :

Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:808) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1139) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123) 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:904) at com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl.getOutputStream(HttpsURLConnectionOldImpl.java:200) at org.springframework.ws.transport.http.HttpUrlConnection.getRequestOutputStream(HttpUrlConnection.java:81) at org.springframework.ws.transport.AbstractSenderConnection$RequestTransportOutputStream.createOutputStream(AbstractSenderConnection.java:101) at org.springframework.ws.transport.TransportOutputStream.getOutputStream(TransportOutputStream.java:41) at org.springframework.ws.transport.TransportOutputStream.write(TransportOutputStream.java:60) at com.sun.xml.internal.messaging.saaj.soap.MessageImpl.writeTo(MessageImpl.java:1217) at org.springframework.ws.soap.saaj.Saaj13Implementation.writeTo(Saaj13Implementation.java:292) at org.springframework.ws.soap.saaj.SaajSoapMessage.writeTo(SaajSoapMessage.java:165) at org.springframework.ws.transport.AbstractWebServiceConnection.send(AbstractWebServiceConnection.java:45) at org.springframework.ws.client.core.WebServiceTemplate.sendRequest(WebServiceTemplate.java:586) at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:549) at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:502) ... 5 more Caused by: java.io.EOFException: SSL peer shut down incorrectly at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:333) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:789) ... 23 more

Lembrando que estou setando algumas propriedades da seguinte maneira:

System.setProperty(“javax.net.ssl.trustStoreType”, “JKS”);
System.setProperty(“javax.net.ssl.trustStore”, “root.jks”); //Caminho do trustStore

Alguém poderia dar um help?
obrigado

dankshit ESTOU COM O MESMO PROBLEMA!!

QUEBREI A CABEÇA E AGORA PERCEBO QUE O ERRO DEVE SER DOS KRAS LAH!
DA LICENÇA!!!

REVISEI TOOODA MINHA ESTRUTURA KRA…
PERDI MAIOR TEMPO E O ERRO 225 - FALHA DE SCHEMA CONTINUA…

DEVE SER O PROBLEMA DELES LÁ , NÃO É POSSÍVEL, AQUI TA TUDO CERTO E PAROU DE ENVIAR DIA 30 TBM!