Este ejemplo tiene como objetivo firmar un documento XML mediante el servicio de firma de TrustedX. Para la comprensión de este ejemplo se recomienda haber entendido previamente el ejemplo Generación de una firma CMS/PKCS#7.

Para poder probar este ejemplo se debe descargar el archivo sampleSW3.zip y seguir las instrucciones que se encuentran en Configuración del entorno.

Al igual que en el ejemplo de firma CMS/PKCS#7 para realizar una petición de firma se debe utilizar un objeto SmartSignRequest, pero en este caso el perfil de la firma será XADES (o XML).

SmartSignRequest ssr = new SmartSignRequest(host);
ssr.setProfile(Constants.Profile.XADES);

En este ejemplo se pretende realizar la firma de los datos contenidos en el archivo Demo.xml, así se incluyen los datos codificados en Base64 a la petición. Además indicaremos con que certificado se debe realizar la firma, seleccionándolo a partir del nombre distinguido del usuario.

ssr.setInputXmlBase64(Util.readBinaryFileB64(path_in + filename));			
ssr.setKeySubjectName(distinguishedName);         

Dado que no se indica que tipo de firma se quiere realizar, por defecto la firma será detached. En sucesivas peticiones de firma, se mostrarán los otro dos tipos de peticiones que permite una firma XML, es decir el tipo que permite añadir la firma resultante dentro del documento original o firma envuelta (enveloped) y la que permiten añadir el documento dentro de la firma generada o firma envolvente (enveloping).

También se puede indicar el formato en el que se desea que se devuelva la firma resultante, en este caso en Base64.

ssr.setXmlReturnBase64(true);

Una vez se han introducido todos los datos en la petición se invoca la operación send() que envía la petición al host y recoge la respuesta en un objeto SmartSignResponse.

SmartSignResponse ssrs = ssr.send();

Una vez envidada la petición se puede comprobar si ésta se ha procesado correctamente consultando los parámetros de la respuesta. Para ello se usan las funciones de la clase auxiliar UtilTrustedX. Si todo va bien se recupera la firma de la respuesta y se almacena en un fichero, en el ejemplo de validación de firma XML se verá como se debe comprobar la validez de la firma realizada. Dado que se ha indicado la respuesta debía devolver la firma en Base64 y es una petición de perfil XADES el método que se debe utilizar para recuperarla es getSignatureXmlBase64().

if (UtilTrustedX.checkSW(ssrs.getResultMajor(), ssrs.getResultMinor(), ssrs.getResultMessage())) {
   String destFilename = path_out + filename.substring(0, filename.lastIndexOf("."))
         + "SignedDetachedSW.xml";
   Util.writeBinaryFileB64(destFilename, ssrs.getSignatureXmlBase64());
}     

Después de ejecutar el ejemplo se obtiene una respuesta como la siguiente y un archivo con la firma.

File saved successfully on: data/output/DemoSignedDetachedSW.xml