Apache Cocoon es un framework de publicación XML. En Cocoon se define un origen XML (generator), una transformación XSL opcional (transformer) y se obtiene un documento (serializer) en el formato deseado (PDF, RTF, XHTML, Postscript, Excel, etc). Cocooon nos permite olvidarnos de los procesos de transformación de documentos XML, de forma que sólo tenemos que definir los distintos pasos por los que pasará nuestra información origen XML (pipelines).
En esta dirección podemos encontrar información adicional sobre Cocoon.
En un reciente artículo sobre firma digital de documentos PDF con iText veíamos cómo realizar la firma aislada de documentos PDF.
Para los que utilicen Cocoon, existe una forma de poder firmar los documentos PDF que se generen dinámicamente como resultado de una transformación. El proceso pasa por implementar nuestro propio serializer.
Lo que vamos a hacer es implementar una clase que herede de FOPSerializer (encargada de la generación de PDF) y, antes de que se emita el PDF como salida, pasar esta información por el proceso de firma descrito en el artículo anterior.
El resultado es la clase PDFSignSerializer.java que nos permite implementar el proceso.
Esta clase, al ser un nuevo serializer, debe ser definida en el fichero de configuración de Cocoon (sitemap.xmap):
<map:serializer logger="sitemap.serializer.fo2spdf" mime-type="application/pdf" name="fo2spdf"
src="org.apache.cocoon.serialization.PDFSignSerializer"/>
Y luego, ya podemos utilizarla en cualquier pipeline:
<map:match pattern="kk">
<map:generate src="samples/hello-world/content/hello.xml" />
<map:transform src="samples/hello-world/style/xsl/page2fo.xsl" />
<map:serialize type="fo2spdf" />
</map:match>

