Assinatura XML NFe

Bom dia Pessoal, estou tendo um erro ao tentar assinar meu xml

Segue meu código :

package assinador;

import assinador.X509KeySelector;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.security.KeyStore;
import java.security.Provider;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
import javax.xml.crypto.dsig.CanonicalizationMethod;
import javax.xml.crypto.dsig.DigestMethod;
import javax.xml.crypto.dsig.Reference;
import javax.xml.crypto.dsig.SignatureMethod;
import javax.xml.crypto.dsig.SignedInfo;
import javax.xml.crypto.dsig.Transform;
import javax.xml.crypto.dsig.XMLSignature;

import javax.xml.crypto.dsig.XMLSignatureFactory;
import javax.xml.crypto.dsig.dom.DOMSignContext;
import javax.xml.crypto.dsig.dom.DOMValidateContext;
import javax.xml.crypto.dsig.keyinfo.KeyInfo;
import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
import javax.xml.crypto.dsig.keyinfo.X509Data;
import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
import javax.xml.crypto.dsig.spec.TransformParameterSpec;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

/**
*

  • @author Administrador
    */
    public class assinadornfe {

    private static final String C14N_TRANSFORM__METHOD = “http://www.w3.org/tr/2001/REC-xml-c14n-20010315”;
    private static final String PROVIDER_CLASS_NAME = “org.jcp.xml.dsig.internal.dom.XMLDSigRI”;
    private static final String PROVIDER_NAME = “jsr105Provifer”;

    public void assinar(String arquivoXML, String arquivoCertificado,
    String password, String arquivoXMLNovo, String operacao) throws Exception {

     /* Operação
      * 1 = NFE
      * 2 = CANCELAMENTO
      * 3 = INUTILIZAÇÂO
      */
     String tag = "";
     if (operacao.equals("1")) {
         tag = "infNFE";
     } else if (operacao.equals("2")) {
         tag = "infCanc";
     } else if (operacao.equals("3")) {
         tag = "infInut";
     }
    
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
     factory.setNamespaceAware(false);
     DocumentBuilder builder = factory.newDocumentBuilder();
     Document docs = builder.parse(new File(arquivoXML));
     NodeList elements = docs.getElementsByTagName(tag);
     Element el = (Element) elements.item(0);
     String id = el.getAttribute("Id");
    
     //Cria um Dom do Tipo XMLSignatureFactory que será utilizado
     //para gerar a assinatura envelopada (emveloped signature)
    
     String providerName = System.getProperty(PROVIDER_NAME, PROVIDER_CLASS_NAME);
    
     XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", (Provider) Class.forName(providerName).newInstance());
    
     //Define os Algoritimos de Transformação
     ArrayList transformList = new ArrayList();
     TransformParameterSpec tps = null;
     Transform envelopedTransform = fac.newTransform(Transform.ENVELOPED, tps);
     Transform c14Ntransform = fac.newTransform(C14N_TRANSFORM__METHOD, tps);
     transformList.add(envelopedTransform);
     transformList.add(c14Ntransform);
    
     //Cria o objeto Reference
     Reference ref = fac.newReference("#" + id, fac.newDigestMethod(
             DigestMethod.SHA1, null), transformList, null, null);
    
     //Cria elemento SignedInfo
     SignedInfo si = fac.newSignedInfo(fac.newCanonicalizationMethod(
             CanonicalizationMethod.INCLUSIVE,
             (C14NMethodParameterSpec) null), fac.newSignatureMethod(SignatureMethod.RSA_SHA1, null),
             Collections.singletonList(ref));
    
     //Carrega o Keystore e obtem a chave do certificado
     KeyStore ks = KeyStore.getInstance("PKCS12");
     ks.load(new FileInputStream(arquivoCertificado), password.toCharArray());
     Enumeration aliasesEnum = ks.aliases();
     String alias = "";
     while (aliasesEnum.hasMoreElements()) {
         alias = (String) aliasesEnum.nextElement();
         if (ks.isKeyEntry(alias)) {
             break;
         }
     }
    
     KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(alias, new KeyStore.PasswordProtection(password.toCharArray()));
    

// Instancia um certificado do Tipo x509

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

//Cria o elemente Keyinfo contendo a X509Data.

    KeyInfoFactory kif = fac.getKeyInfoFactory();
    List x509Content = new ArrayList();
    x509Content.add(cert);
    X509Data xd = kif.newX509Data(x509Content);
    KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd));

// Instancia o documento que será assinado
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
Document doc = dbf.newDocumentBuilder().parse(new FileInputStream(arquivoXML));

// Cria o DOMSignContext especificando a chave e o nó pai
DOMSignContext dsc = new DOMSignContext(keyEntry.getPrivateKey(), doc.getDocumentElement());

// Cria o XMLSignature, mas não assina ainda
XMLSignature signature = fac.newXMLSignature(si, ki);

// Empacota (marshal), gera e assina
signature.sign(dsc);

// Arquivo Novo Assinado
OutputStream os = new FileOutputStream(arquivoXMLNovo);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer trans = tf.newTransformer();
trans.transform(new DOMSource(doc), new StreamResult(os));

// Encontra o elemente Siganature
NodeList nl = doc.getElementsByTagNameNS(XMLSignature.XMLNS, “Signature”);

    if (nl.getLength() == 0) {
        throw new Exception("Não foi possível encontrar o elemente Signature");

    }

// Cria um DOMvalidateContext
DOMValidateContext valContext = new DOMValidateContext(
new X509KeySelector(ks), nl.item(0));

// Desempacota (unmarshal) a XMLSignature
XMLSignature signatures = fac.unmarshalXMLSignature(valContext);

// Valida a XMLSignature
boolean coreValidity = signatures.validate(valContext);

// Checa o status da validação
if (coreValidity == false) {
System.err.println(“Falha na Assinatura !”);
} else {
System.out.println(“Assinatura Correta !”);

    }
}

public static void main(String[] args) throws Exception {

    /*  if (args.length != 5){
    System.out.println("Passe os Cinco parametros necessários");
    return;
    }*/
    String caminhoXml = "C:/Java/nfeteste.xml";
    String caminhoCertificado = "C:/Certificados/cebelo.pfx";
    String senha = "123";
    String arquivoXmlNovo = "C:/Java/nfetesteassinado.xml";
    String tipo = "1";

    File file = new File(caminhoXml);
    if (!file.exists()) {
        System.out.println("Arquivo" + caminhoCertificado + "não encontrado");
        return;
    }

    file = new File(caminhoCertificado);
    if (!file.exists()) {
        System.out.println("Arquivo" + caminhoCertificado + "não enontrado");
    return;
}
try{
    assinadornfe t = new assinadornfe ();
    t.assinar(caminhoXml, caminhoCertificado, senha, arquivoXmlNovo, tipo);
    System.out.println("Arquivo XML assinado com sucesso" + caminhoXml + "!");
    } catch (Exception e) {
        System.out.println("Erro ao tentar assinar arquivo XML !\n\n" + e.toString());

    }

}

}

E me retorna o o seguinte erro :ArquivoC:/Certificados/cebelo.pfxnão encontrado

Sera que é algum problema com meu certificado ??

Tenta assim:
C:\Certificados\cebelo.pfx ou assim C:\Certificados\cebelo.pfx

Iai Daniel blz ??

Ja tentei cara mas da o mesmo erro !

Estava dando uma olhada aqui site e vi alguns arquivos dizendo algo sobre um formato diferente q tem q ter o certificado ?

Alguem sabe a respeito ??

Acredito que o código esta correto só esta faltando entender oq acontece com o certificado

Pessoal corrigindo !!

Ele não está achando o caminho do meu xml !!

Por tanto ele nem chega a procurar o meu certificado !!

Mas o problema continua !

Alguma luz ???

no seu computador tem o caminho C:/Java/nfeteste.xml?

O erro que está ocorrendo é FileNotFoundException??
O seu metódo já tá achando o certificado??

Posta a exceção por favor que facilita.

Fala Galera desculpe a demora, tive um problema com a net aqui !
Em relação ao xml ele ja esta encontrando.
Mas quando é para encontrar o certificado ele da o seguinte erro :

Erro ao tentar o assinar o arquivo xml !

java.lang.NullPointerException

Eu debuguei e tudo mais, é bem na hora que ele procura o certificado, ai caio no erro !

Debuga ai e fala para gente em que linha está dando nullpointer.

Puts Daniel não estou conseguindo descobrir como debugar isso !!
Faz 2 semanas que comecei com Java e estou começando a pegar as manhas do NetB. agora !

Oq eu consegui ver é que quando chega na ultima linha desse bloco de comando ele sai e cai no erro !

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(false);
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document docs = builder.parse(new File(arquivoXML));
    NodeList elements = docs.getElementsByTagName(tag);
    Element el = (Element) elements.item(0);
    String id = el.getAttribute("Id");

Se eu puder fazer mais alguma coisas para poder deixar claro !
Fico a disposição !

Bom dia Galera !!

Depois de pesquisar muito, encontrei alguns exemplos dizendo que meu erro poderia estar na minha classe X509Certificate, ai procurei e achei uma outra classe diferente da minha.

Mas ainda esta dando erro, mas diferente agora :

java.io.IOException: DER input, Integer tag error

Não sei mais oq fazer, será que alguma alma caridosa poderia me apontar uma solução !! rsrsrsrs

Bem galera agradeço a ajuda de todos, graças a Deus consegui resolver meu problema.

Exclui aquele projeto e inicei outro, para ver c enchergava o erro, e deu certo o problema era que estava falatando um import, esse: import assinador01.X509KeySelector;

Segue Abaixo o código para quem precisar ou tiver alguma sugestão para melhorar.

package assinador;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.security.KeyStore;
import java.security.Provider;
import java.security.Security;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.xml.crypto.dsig.CanonicalizationMethod;
import javax.xml.crypto.dsig.DigestMethod;
import javax.xml.crypto.dsig.Reference;
import javax.xml.crypto.dsig.SignatureMethod;
import javax.xml.crypto.dsig.SignedInfo;
import javax.xml.crypto.dsig.Transform;
import javax.xml.crypto.dsig.XMLSignature;
import javax.xml.crypto.dsig.XMLSignatureFactory;
import javax.xml.crypto.dsig.dom.DOMSignContext;
import javax.xml.crypto.dsig.dom.DOMValidateContext;
import javax.xml.crypto.dsig.keyinfo.KeyInfo;
import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
import javax.xml.crypto.dsig.keyinfo.X509Data;
import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
import javax.xml.crypto.dsig.spec.TransformParameterSpec;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.util.Enumeration;
import java.io.ByteArrayOutputStream;
import java.io.ByteArrayInputStream;
import java.security.PrivateKey;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import javax.swing.JOptionPane;

import assinador01.X509KeySelector;

public class Assinadornf {

private static final String C14N_TRANSFORM_METHOD = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315";
private static final String PROVIDER_CLASS_NAME = "org.jcp.xml.dsig.internal.dom.XMLDSigRI";
private static final String PROVIDER_NAME = "jsr105Provider";

public void assinar(String caminhoXml, String caminhoCertificado, String senha, String caminhoXmlNovo, String tipo) throws Exception {
   
    /*
     * Operação
     * '1' - NFE
     * '2' - CANCELAMENTO
     * '3' - INUTILIZAÇÃO
     */

    String tag = "";
    if (tipo.equals("1")) {
        tag = "infNFe";
    } else if (tipo.equals("2")) {
        tag = "infCanc";
    } else if (tipo.equals("3")) {
        tag = "infInut";
    }



    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(false);
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document docs = builder.parse(new File(caminhoXml));
    NodeList elements = docs.getElementsByTagName(tag);
    Element el = (Element) elements.item(0);
    String id = el.getAttribute("Id");


    // Cria um DOM do Tipo XMLSignatureFactory que será utilizado
    // para gerar a assinatura envelopada (eneveloped signature)
    String providerName = System.getProperty(PROVIDER_NAME, PROVIDER_CLASS_NAME);
    XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", (Provider) Class.forName(providerName).newInstance());

     // Define os Algoritimos de Transformação
    ArrayList transformList = new ArrayList();
    TransformParameterSpec tps = null;
    Transform envelopedTransform = fac.newTransform(Transform.ENVELOPED, tps);
    Transform c14NTransform = fac.newTransform(C14N_TRANSFORM_METHOD, tps);
    transformList.add(envelopedTransform);
    transformList.add(c14NTransform);

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

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


    // Carrega o keyStore e obtem a chave do certificado
    KeyStore ks = KeyStore.getInstance("PKCS12");
    ks.load(new FileInputStream(caminhoCertificado), senha.toCharArray());
    Enumeration aliasesEnum = ks.aliases();
    String alias = "";
    while (aliasesEnum.hasMoreElements()) {
        alias = (String) aliasesEnum.nextElement();

        if (ks.isKeyEntry(alias)) {

            break;
        }
    }


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

    // Instancia um certificado do tipo  X509
    X509Certificate cert = (X509Certificate) keyEntry.getCertificate();

    // Cria o elemento KeyInfo contendo a X509Data;
    KeyInfoFactory kif = fac.getKeyInfoFactory();
    List x509Content = new ArrayList();
    x509Content.add(cert);
    X509Data xd = kif.newX509Data(x509Content);
    KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd));

    // Instancia o documento que será assinado
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);
    Document doc = dbf.newDocumentBuilder().parse(new FileInputStream(caminhoXml));

    // Cria o DOMSignContext especificando a chave e o nó pai
    DOMSignContext dsc = new DOMSignContext(keyEntry.getPrivateKey(), doc.getDocumentElement());

    // Cria a XMLSignature, mas não assina ainda
    XMLSignature signature = fac.newXMLSignature(si, ki);

    // Empacota (marshal), gera e assina
    signature.sign(dsc);

    // Arquivo novo Assinado
    OutputStream os = new FileOutputStream(caminhoXmlNovo);
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer trans = tf.newTransformer();
    trans.transform(new DOMSource(doc), new StreamResult(os));

    // Encontra o elemente Signature
    NodeList nl = doc.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");

    if (nl.getLength() == 0) {
        throw new Exception("Cannot find Signature element");
    }

    // Cria um DOMValidateContext
    DOMValidateContext valContext = new DOMValidateContext(new X509KeySelector(ks), nl.item(0));

    // Desempacota (unmarshal) a XMLsignature
    XMLSignature signatures = fac.unmarshalXMLSignature(valContext);

    // Validate the XMLSignature.
    boolean coreValidity = signatures.validate(valContext);

    //Checa o status da Validação
    if (coreValidity == false) {
        System.err.println("Falha na Assinatura!");
    } else {
        System.out.println("Assinatura Correta!");
    }
}

public static void main(String[] args) throws Exception {

  /*  if (args.length != 5) {
  //JOptionPane.showMessageDialog(null, "São esperados 5 parâmetros!", "Atenção", JOptionPane.INFORMATION_MESSAGE);
        System.out.println("Sao esperados 5 parametros!");
        return;
    }*/
    String caminhoXml = "C:/nota.xml";
    String caminhoCertificado = "C:/keystore/cebelo.p12";
    String senha = "123";
    String arquivoXmlNovo = "C:/notaassinado.xml";
    String tipo = "1";


    File file = new File(caminhoXml);
    if (!file.exists()) {

//JOptionPane.showMessageDialog(null, “Arquivo " + caminhoXml + " não encontrado!”, “Atenção”, JOptionPane.INFORMATION_MESSAGE);
System.out.println(“Arquivo " + caminhoXml + " não encontrado!”);
return;
}
file = new File(caminhoCertificado);
if (!file.exists()) {
//JOptionPane.showMessageDialog(null, “Arquivo " + caminhoCertificado + " não encontrado!”, “Atenção”, JOptionPane.INFORMATION_MESSAGE);
System.out.println(“Arquivo " + caminhoCertificado + " não encontrado!”);
return;
}
try {
Assinadornf t = new Assinadornf();
t.assinar(caminhoXml, caminhoCertificado, senha, arquivoXmlNovo, tipo);
//JOptionPane.showMessageDialog(null, “Arquivo xml assinado com sucesso!”, “Atenção”, JOptionPane.INFORMATION_MESSAGE);
System.out.println(“Arquivo xml assinado com sucesso” + caminhoXml + “!”);
} catch (Exception e) {
//JOptionPane.showMessageDialog(null, “Erro ao tentar assinar arquivo xml! \n\n” + e.toString(), “Atenção”, JOptionPane.INFORMATION_MESSAGE);
System.out.println(“Erro ao tentar assinar arquivo xml! \n\n” + e.toString());
}
}
}

Agora vou partir para o envio da Nfe para o web service, c alguem tiver algo para ajudar, ficarei grato.

Boa Tarde pessoal,
aproveitando o post, primeira vez q posto aqui, pois to precisando de ajuda Urgente! :confused:

estou tentando assinar um arquivo xml, e o codigo que estou usando é este ai: o erro

Erro ao tentar assinar arquivo xml!

java.lang.NullPointerException

Não consegui encontrar o erro. Obrigado!

XML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE eSocialTeste>
-<eSocial id="1">

-<empregador>
<nomeRazaoEmpregador>ATS CONTABILIDADE LTDA</nomeRazaoEmpregador>
<nomeFantasiaEmpregador>ATS CONTABIL</nomeFantasiaEmpregador>
<cnpjEmpregador>01.123.456/0001-52</cnpjEmpregador>
<ieEmpregador/>
<cnaePreponderante>123</cnaePreponderante>
</empregador>

-<endereco>
<cidadeEmpregador/>
<bairroEmpregador>SETOR CENTRAL</bairroEmpregador>
<nEmpregador>145</nEmpregador>
<cepEmpregador>75523170</cepEmpregador>
<complEmpregador/>
<refEmpregador/>
</endereco>

-<contribuinte>
<nomeContribuinte>VICTOR MARQUES DE PAULA</nomeContribuinte>
<cpfContribuinte>03969661102</cpfContribuinte>
<dtNascimentoContribuinte>1993-11-16</dtNascimentoContribuinte>
<ieContribuinte>123</ieContribuinte>
<rgContribuinte>5594603</rgContribuinte>
<ceiContribuinte>123</ceiContribuinte>
</contribuinte>

-<enderecoContribuinte>
<cidadeContribuinte>Itumbiara</cidadeContribuinte>
<bairroContribuinte>ALTO DA BOA VISTA</bairroContribuinte>
<nContribuinte>647</nContribuinte>
<cepContribuinte>75523170</cepContribuinte>
<complContribuinte>teste</complContribuinte>
<refContribuinte>teste1</refContribuinte>
</enderecoContribuinte>

-<rubricasContribuinte>
<rubNRazaoEmpregador>ATS CONTABILIDADE LTDA</rubNRazaoEmpregador>
<rubNContribuinte>VICTOR MARQUES DE PAULA</rubNContribuinte>
<descRubrica>AJUDA DE CUSTO</descRubrica>
<rubValor>50.00</rubValor>
<rubdiaDesconto>2014-09-15</rubdiaDesconto>
</rubricasContribuinte>

-<hrsContribuinte>
<hrsNRazaoEmpregador>ATS CONTABILIDADE LTDA</hrsNRazaoEmpregador>
<hrsNContribuinte>VICTOR MARQUES DE PAULA</hrsNContribuinte>
<hrsEntrada>08:00:00</hrsEntrada>
<hrsEntradaII>13:00:00</hrsEntradaII>
<hrsSaida>11:30:00</hrsSaida>
<hrsSaidaII>18:00:00</hrsSaidaII>
<hrsExtras/>
<hrsInterv>01:30:00</hrsInterv>
<hrsStatus>diurno</hrsStatus>
</hrsContribuinte>
</eSocial>
package principal;

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.OutputStream; 
import java.security.KeyStore; 
import java.security.Provider; 
import java.security.Security; 
import java.security.cert.X509Certificate; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 

import javax.xml.crypto.dsig.CanonicalizationMethod; 
import javax.xml.crypto.dsig.DigestMethod; 
import javax.xml.crypto.dsig.Reference; 
import javax.xml.crypto.dsig.SignatureMethod; 
import javax.xml.crypto.dsig.SignedInfo; 
import javax.xml.crypto.dsig.Transform; 
import javax.xml.crypto.dsig.XMLSignature; 
import javax.xml.crypto.dsig.XMLSignatureFactory; 
import javax.xml.crypto.dsig.dom.DOMSignContext; 
import javax.xml.crypto.dsig.dom.DOMValidateContext; 
import javax.xml.crypto.dsig.keyinfo.KeyInfo; 
import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory; 
import javax.xml.crypto.dsig.keyinfo.X509Data; 
import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec; 
import javax.xml.crypto.dsig.spec.TransformParameterSpec; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NodeList; 
import java.util.Enumeration; 
import java.io.ByteArrayOutputStream; 
import java.io.ByteArrayInputStream; 
import java.security.PrivateKey; 
import java.io.FileReader; 
import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.Serializable; 
import javax.swing.JOptionPane; 

public class Teste { 

private static final String C14N_TRANSFORM_METHOD = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"; 
private static final String PROVIDER_CLASS_NAME = "org.jcp.xml.dsig.internal.dom.XMLDSigRI"; 
private static final String PROVIDER_NAME = "jsr105Provider"; 

public void assinar(String caminhoXml, String caminhoCertificado, String senha, String caminhoXmlNovo, String tipo) throws Exception { 

/* 
* Operação 
* '1' - NFE 
* '2' - CANCELAMENTO 
* '3' - INUTILIZAÇÃO 
*/ 

String tag = "eSocial"; 
if (tipo.equals("1")) { 
tag = "eSocial"; 
} else if (tipo.equals("2")) { 
tag = "infCanc"; 
} else if (tipo.equals("3")) { 
tag = "infInut"; 
} 



DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
factory.setNamespaceAware(false); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
Document docs = builder.parse(new File(caminhoXml)); 
NodeList elements = docs.getElementsByTagName(tag); 
Element el = (Element) elements.item(0); 


String id = el.getAttribute("id"); 
el.setIdAttribute("Id", true); 


// Cria um DOM do Tipo XMLSignatureFactory que será utilizado 
// para gerar a assinatura envelopada (eneveloped signature) 
String providerName = System.getProperty(PROVIDER_NAME, PROVIDER_CLASS_NAME); 
XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", (Provider) Class.forName(providerName).newInstance()); 

// Define os Algoritimos de Transformação 
ArrayList transformList = new ArrayList(); 
TransformParameterSpec tps = null; 
Transform envelopedTransform = fac.newTransform(Transform.ENVELOPED, tps); 
Transform c14NTransform = fac.newTransform(C14N_TRANSFORM_METHOD, tps); 
transformList.add(envelopedTransform); 
transformList.add(c14NTransform); 

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

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


// Carrega o keyStore e obtem a chave do certificado 
KeyStore ks = KeyStore.getInstance("PKCS12"); 
ks.load(new FileInputStream(caminhoCertificado), senha.toCharArray()); 
Enumeration aliasesEnum = ks.aliases(); 
String alias = ""; 
while (aliasesEnum.hasMoreElements()) { 
alias = (String) aliasesEnum.nextElement(); 

if (ks.isKeyEntry(alias)) { 

break; 
} 
} 


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

// Instancia um certificado do tipo X509 
X509Certificate cert = (X509Certificate) keyEntry.getCertificate(); 

// Cria o elemento KeyInfo contendo a X509Data; 
KeyInfoFactory kif = fac.getKeyInfoFactory(); 
List x509Content = new ArrayList(); 
x509Content.add(cert); 
X509Data xd = kif.newX509Data(x509Content); 
KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd)); 

// Instancia o documento que será assinado 
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
dbf.setNamespaceAware(true); 
Document doc = dbf.newDocumentBuilder().parse(new FileInputStream(caminhoXml)); 

// Cria o DOMSignContext especificando a chave e o nó pai 
DOMSignContext dsc = new DOMSignContext(keyEntry.getPrivateKey(), doc.getDocumentElement()); 

// Cria a XMLSignature, mas não assina ainda 
XMLSignature signature = fac.newXMLSignature(si, ki); 

// Empacota (marshal), gera e assina 
signature.sign(dsc); 

// Arquivo novo Assinado 
OutputStream os = new FileOutputStream(caminhoXmlNovo); 
TransformerFactory tf = TransformerFactory.newInstance(); 
Transformer trans = tf.newTransformer(); 
trans.transform(new DOMSource(doc), new StreamResult(os)); 

// Encontra o elemente Signature 
NodeList nl = doc.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature"); 

if (nl.getLength() == 0) { 
throw new Exception("Cannot find Signature element"); 
} 

// Cria um DOMValidateContext 
DOMValidateContext valContext = new DOMValidateContext(new X509KeySelector(ks), nl.item(0)); 

// Desempacota (unmarshal) a XMLsignature 
XMLSignature signatures = fac.unmarshalXMLSignature(valContext); 

// Validate the XMLSignature. 
boolean coreValidity = signatures.validate(valContext); 

//Checa o status da Validação 
if (coreValidity == false) { 
System.err.println("Falha na Assinatura!"); 
} else { 
System.out.println("Assinatura Correta!"); 
} 
} 

public static void main(String[] args) throws Exception { 

/* if (args.length != 5) { 
//JOptionPane.showMessageDialog(null, "São esperados 5 parâmetros!", "Atenção", JOptionPane.INFORMATION_MESSAGE); 
System.out.println("Sao esperados 5 parametros!"); 
return; 
}*/ 
String caminhoXml = "C:/teste.xml"; 
String caminhoCertificado = "C:/GAVOLA.pfx"; 
String senha = "ARSOLUTI"; 
String arquivoXmlNovo = "C:/notaassinado.xml"; 
String tipo = "1"; 


File file = new File(caminhoXml); 
if (!file.exists()) { 
//JOptionPane.showMessageDialog(null, "Arquivo " + caminhoXml + " não encontrado!", "Atenção", JOptionPane.INFORMATION_MESSAGE); 
System.out.println("Arquivo " + caminhoXml + " não encontrado!"); 
return; 
} 
file = new File(caminhoCertificado); 
if (!file.exists()) { 
//JOptionPane.showMessageDialog(null, "Arquivo " + caminhoCertificado + " não encontrado!", "Atenção", JOptionPane.INFORMATION_MESSAGE); 
System.out.println("Arquivo " + caminhoCertificado + " não encontrado!"); 
return; 
} 
try { 
Teste t = new Teste(); 
t.assinar(caminhoXml, caminhoCertificado, senha, arquivoXmlNovo, tipo); 
//JOptionPane.showMessageDialog(null, "Arquivo xml assinado com sucesso!", "Atenção", JOptionPane.INFORMATION_MESSAGE); 
System.out.println("Arquivo xml assinado com sucesso" + caminhoXml + "!"); 
} catch (Exception e) { 
//JOptionPane.showMessageDialog(null, "Erro ao tentar assinar arquivo xml! \n\n" + e.toString(), "Atenção", JOptionPane.INFORMATION_MESSAGE); 
System.out.println("Erro ao tentar assinar arquivo xml! \n\n" + e.toString()); 
} 
} 
} 

O erro é seu por não mostrar a mensagem de erro para você mesmo.
Coloque e.printStrackTrace() nos seus catch’s. Ele irá mostrar a mensagem completa do erro.

Ok, tinha esquecido realmente.

Trouxe o erro na linha

String id = el.getAttribute("id"); 
el.setIdAttribute("Id", true);