Assinar XML NFS-e

2 respostas
R
Boa tarde!

Estou criando método para cancelar uma NFS-e, nota de serviço pelo sistema GINFES. O problema é que sempre me da a mensagem de arquivo fora do padrão, ou seja xml não esta correto. Então eu baixei o programa Altova e validei o xml. O único erro que ele me apresenta e o Id que não deve existir. Então se eu tirar este Id ele passa. O problema é que sem este Id eu não estou conseguindo assinar o XML, pois ele precisa deste elemento(Veja parte do código de assinatura abaixo). Então, como eu faço para assinar o xml sem esta campo Id?

`NodeList elements = doc.getElementsByTagName(ConsultarLoteRpsEnvio);

org.w3c.dom.Element el = (org.w3c.dom.Element) elements.item(0);

String id = el.getAttribute(Id);

el.setIdAttribute(Id”, true);
Reference ref = fac.newReference("#".concat(id),
                fac.newDigestMethod(DigestMethod.SHA1, null),
                listTransforms, null, null);

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

2 Respostas

A

Ola Rpassos81,

no construtor do seu método você pode definir uma variável para este sinal(#) ex: String prefixoId, e passar null quando não tem o elemento Id, no seu código faça assim:

Reference ref;
    if (prefixoDoId != null) {
        String id = el.getAttribute("Id");
        ref = fac.newReference(prefixoDoId + id, fac.newDigestMethod(DigestMethod.SHA1, null), transformList, null, null);
    } else {
        ref = fac.newReference("", fac.newDigestMethod(DigestMethod.SHA1, null), transformList, null, null);
    }
R

Bom dia!
Obrigado por responder.
Tudo certo, resolveu meu problema. Eu havia enviado null ao invez de “”.

Abraço!

Criado 11 de abril de 2016
Ultima resposta 14 de abr. de 2016
Respostas 2
Participantes 2