Saltar al contenido principal

Preguntas frecuentes

¿Qué es el SignatureID?

signatureID Es el valor de ds:Signature Id="mySignID" dentro del XML, por ejemplo:

<ext:UBLExtensions>
<ext:UBLExtension>
<ext:ExtensionContent>
<ds:Signature Id="mySignID" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
</ds:Signature>
</ext:ExtensionContent>
</ext:UBLExtension>
</ext:UBLExtensions>

Selecciona un buen signatureID; el signatureID no debe de contener números ni espacios en blanco. La SUNAT rechaza signatureIDs como 12345678912 pero si acepta valores como MiEmpresa.

En caso de definir signatureIDs inválidos probablemente tendrás el error No se puede leer (parsear) el archivo XML al momento de enviar el XML a la SUNAT.

¿Cómo ver el contenido del XML firmado?

El XML firmado es obtenido en un objeto de la forma:

Document signedXML = XMLSigner.signXML(xml, signatureID, certificate, privateKey);

Nótese que el XML firmado no es un String sino un org.w3c.dom.Document por lo tanto no debes de intentar imprimirlo usando System.out.println(signedXML). Lo que debes de hacer es intentar escribirlo en un disco duro o convertirlo a bytes[] para que puedas empezar a usarlo.

Por ejemplo:

DOMSource source = new DOMSource(signedDocument);
FileWriter writer = new FileWriter(new File("D:/sunat/operaciones/12345678959-01-F001-00000001.xml"));
StreamResult resultXml = new StreamResult(writer);

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(source, resultXml);

File file = new File("D:/sunat/operaciones/12345678959-01-F001-00000001.xml"); // Este archivo contiene el XML firmado