Sample code for 30+ languages & platforms
Java

Sign XML for eFactura DGI Uruguay (cfe.dgi.gub.uy)

See more XAdES Examples

Demonstrates how to sign XML for eFactura DGI (Uruguay, cfe.dgi.gub.uy).

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.Cert;
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.StringBuilder;
import com.chilkatsoft.chilkat2.XmlDSigGen;

public class ChilkatExample {

    public static void main(String[] args) {
        boolean success = false;

        // This example assumes the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        success = true;

        // <?xml version="1.0" encoding="utf-8"?>
        // <DGICFE:EnvioCFE version="1.0" xsi:schemaLocation="http://cfe.dgi.gub.uy EnvioCFE_v1.30.xsd" xmlns:DGICFE="http://cfe.dgi.gub.uy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        //     <DGICFE:Caratula version="1.0">
        //         <DGICFE:RutReceptor>...</DGICFE:RutReceptor>
        //         <DGICFE:RUCEmisor>...</DGICFE:RUCEmisor>
        //         <DGICFE:Idemisor>...</DGICFE:Idemisor>
        //         <DGICFE:CantCFE>1</DGICFE:CantCFE>
        //         <DGICFE:Fecha>2020-07-29T08:24:34-03:00</DGICFE:Fecha>
        //         <DGICFE:X509Certificate>MIIGc...UJwsTEnI
        // </DGICFE:X509Certificate>
        //     </DGICFE:Caratula>
        //     <CFE xmlns="http://cfe.dgi.gub.uy" version="1.0">
        //         <eFact>
        //             <TmstFirma>2020-07-21T12:34:01-03:00</TmstFirma>
        //             <Encabezado>
        //                 <IdDoc>
        //                     <TipoCFE>111</TipoCFE>
        //                     <Serie>A</Serie>
        //                     <Nro>...</Nro>
        //                     <FchEmis>2020-07-21</FchEmis>
        //                     <FmaPago>2</FmaPago>
        //                     <FchVenc>2020-09-19</FchVenc>
        //                 </IdDoc>
        //                 <Emisor>
        //                     <RUCEmisor>...</RUCEmisor>
        //                     <RznSoc>...</RznSoc>
        //                     <NomComercial>...</NomComercial>
        //                     <GiroEmis>...</GiroEmis>
        //                     <Telefono>(598)...</Telefono>
        //                     <Telefono>(598)...</Telefono>
        //                     <CorreoEmisor>...</CorreoEmisor>
        //                     <EmiSucursal>...</EmiSucursal>
        //                     <CdgDGISucur>7</CdgDGISucur>
        //                     <DomFiscal>...</DomFiscal>
        //                     <Ciudad>Montevideo</Ciudad>
        //                     <Departamento>Montevideo</Departamento>
        //                 </Emisor>
        //                 <Receptor>
        //                     <TipoDocRecep>2</TipoDocRecep>
        //                     <CodPaisRecep>UY</CodPaisRecep>
        //                     <DocRecep>...</DocRecep>
        //                     <RznSocRecep>...</RznSocRecep>
        //                     <DirRecep>...</DirRecep>
        //                     <CiudadRecep>...</CiudadRecep>
        //                     <DeptoRecep>...</DeptoRecep>
        //                     <PaisRecep/>
        //                     <CP>...</CP>
        //                     <InfoAdicional/>
        //                     <LugarDestEnt>...</LugarDestEnt>
        //                     <CompraID>...</CompraID>
        //                 </Receptor>
        //                 <Totales>
        //                     <TpoMoneda>UYU</TpoMoneda>
        //                     <MntNoGrv>0.00</MntNoGrv>
        //                     <MntExpoyAsim>0.00</MntExpoyAsim>
        //                     <MntImpuestoPerc>0.00</MntImpuestoPerc>
        //                     <MntIVaenSusp>0.00</MntIVaenSusp>
        //                     <MntNetoIvaTasaMin>2701.71</MntNetoIvaTasaMin>
        //                     <MntNetoIVATasaBasica>0.00</MntNetoIVATasaBasica>
        //                     <MntNetoIVAOtra>0.00</MntNetoIVAOtra>
        //                     <IVATasaMin>10.00</IVATasaMin>
        //                     <IVATasaBasica>22.00</IVATasaBasica>
        //                     <MntIVATasaMin>270.17</MntIVATasaMin>
        //                     <MntIVATasaBasica>0.00</MntIVATasaBasica>
        //                     <MntIVAOtra>0.00</MntIVAOtra>
        //                     <MntTotal>2971.88</MntTotal>
        //                     <MntTotRetenido>0.00</MntTotRetenido>
        //                     <CantLinDet>1</CantLinDet>
        //                     <MontoNF>0.11</MontoNF>
        //                     <MntPagar>2971.99</MntPagar>
        //                 </Totales>
        //             </Encabezado>
        //             <Detalle>
        //                 <Item>
        //                     <NroLinDet>1</NroLinDet>
        //                     <IndFact>2</IndFact>
        //                     <NomItem>...</NomItem>
        //                     <DscItem>...</DscItem>
        //                     <Cantidad>4.000</Cantidad>
        //                     <UniMed/>
        //                     <PrecioUnitario>662.185000</PrecioUnitario>
        //                     <DescuentoPct>0.000</DescuentoPct>
        //                     <DescuentoMonto>0.00</DescuentoMonto>
        //                     <RecargoPct>2.000</RecargoPct>
        //                     <RecargoMnt>52.97</RecargoMnt>
        //                     <MontoItem>2701.71</MontoItem>
        //                 </Item>
        //             </Detalle>
        //             <CAEData>
        //                 <CAE_ID>90200658285</CAE_ID>
        //                 <DNro>1015000</DNro>
        //                 <HNro>1016999</HNro>
        //                 <FecVenc>2022-05-07</FecVenc>
        //             </CAEData>
        //         </eFact>
        //     </CFE>
        // </DGICFE:EnvioCFE>

        XmlDSigGen gen = new XmlDSigGen();

        gen.setSigLocation("DGICFE:EnvioCFE|CFE");
        gen.setSigLocationMod(0);
        gen.setSigNamespacePrefix("");
        gen.setSigNamespaceUri("http://www.w3.org/2000/09/xmldsig#");
        gen.setSignedInfoCanonAlg("C14N");
        gen.setSignedInfoDigestMethod("sha1");

        // -------- Reference 1 --------
        gen.addSameDocRef("", "sha1", "C14N", "", "");

        // Provide a certificate + private key. (PFX password is test123)
        Cert cert = new Cert();
        try {
            cert.loadPfxFile("qa_data/pfx/cert_test123.pfx", "test123");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        gen.setX509Cert(cert, true);

        gen.setKeyInfoType("X509Data");
        gen.setX509Type("IssuerSerial");

        // Load XML to be signed...
        StringBuilder sbXml = new StringBuilder();
        try {
            sbXml.loadFile("qa_data/cfe.dgi.gub.uy/sample.xml", "utf-8");
        } catch (ChilkatException e) {
            System.out.println("Failed to load input XML document.");
            return;
        }

        gen.setBehaviors("IndentedSignature,CompactSignedXml");

        // Sign the XML...
        try {
            gen.createXmlDSigSb(sbXml);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // -----------------------------------------------

        // Save the signed XML to a file.
        sbXml.writeFile("qa_output/signed.xml", "utf-8", false);

        System.out.println(sbXml.getAsString());
    }
}