cancel
Showing results for 
Search instead for 
Did you mean: 

Assinador XML CTe no PI 7.1

former_member325647
Discoverer
0 Kudos

Olá Pessoal!

Eu tenho um programa para assinar CTe rodando na versão 7.4 do PI. Porém agora necessito adaptar o mesmo para rodar na versão 7.1 (que foi homologada para o java 1.5), e não estou conseguindo assinar a nota nesta versão. Ao realizar um teste de request tenho o seguinte erro:

Os metodos assinaCte e assinaEnvioCTe estão dá seguinte forma:

public String assinaCTe(String xml, String certificado, String senha) throws Exception {
		this.document = documentFactory(xml);  
		this.signatureFactory = XMLSignatureFactory.getInstance("DOM");  
		this.transformList = signatureFactory(this.signatureFactory);  
		
		loadCertificates(certificado, senha, this.signatureFactory);  
		assinaEnvioCTe(this.signatureFactory, this.transformList, this.privateKey, this.keyInfo);
		return outputXML(this.document);  
	}


	public void assinaEnvioCTe(XMLSignatureFactory fac, ArrayList<Transform> transformList, PrivateKey privateKey, KeyInfo ki)  
					throws NoSuchAlgorithmException,  
					InvalidAlgorithmParameterException, MarshalException,  
					XMLSignatureException, javax.xml.crypto.MarshalException {  


		this.elements = this.document.getDocumentElement().getElementsByTagName("infEvento"); 
		this.el = (org.w3c.dom.Element) this.elements.item(0);


		String id = el.getAttribute("Id");
		el.setIdAttribute("Id", true);
		
		this.ref = fac.newReference(new String("#"+ id),  
				fac.newDigestMethod(DigestMethod.SHA1, null), transformList,  
				null, null);  
		
		this.si = fac  
				.newSignedInfo(fac.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE, (C14NMethodParameterSpec) null), 
						fac.newSignatureMethod(SignatureMethod.RSA_SHA1, null), 
						Collections.singletonList(ref));
		
		this.signature = fac.newXMLSignature(si, ki);  
		
		this.dsc = new DOMSignContext(privateKey, document.getDocumentElement());
		this.signature.sign(this.dsc);  
	}  

Sendo assim, alguém poderia me ajudar a resolver este problema na versão 7.1 do PI.

Desde já agradeço.

Accepted Solutions (0)

Answers (2)

Answers (2)

former_member325647
Discoverer
0 Kudos

raphael.almeida você conhece alguma classe para realizar assinatura de XML na versão JDK 1.5, ou alguma forma de instanciar classes de versões acima em versões anteriores?

raphael_almeida
Active Contributor
0 Kudos

Olá ulissesaa !

Pelo erro apresentado, isso aparenta ser erro dentro da classe XMLSignContext ou a mesma não exista, pois o erro diz que não conseguiu instanciar a classe. Como me parece um downport entre versões (Mais nova para 1.5) bem capaz que seja alguma instrução que não existe na versão mais velha, fazendo assim não compilar direito ou esse objeto não foi transportado corretamente.

Dê uma olha nessa classe em especial, caso ecusrae verifique o código da mesma.

Abs,

Pacheco.

former_member325647
Discoverer

Olá raphael.almeida muito obrigado pelo seu comentário, de fato é este o problema. Vou pesquisar mais e volto para informar caso consiga resolver sem perder o que já tenho.