PDFSignature NullPointerException

"David Law via fop-users" <[email protected]> Tue, 17 Mar 2026 12:50:56 +0100
Newsgroups gmane.text.xml.fop.user
Message-ID <[email protected]>
--------------iHcd3HX2v1Iq0gBe6LluMRXy
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit

Hi there,

I'm trying to create a signed PDF with FOP v2.11 & JDK 17.

I am NOT using a Config file (i.e. fop.xconf).

Instead I'm supplying an instance of PDFSignParams.
-> FOP then internally creates an instance of PDFSignature.
-> I've checked the PDFSignature instance is able to read the Keystore & 
sign content.

When creating the PDF from the FO, a *NullPointerException* is raised.
The only Method invoked on PDFSignature is add(final PDFPage page).

The message is:
Cannot invoke "java.io.OutputStream.write(byte[], int, int)" because 
"this.out" is null

(I did something similar for encryption with an instance of 
PDFEncryptionParams. That worked fine)

Before I take time to create a detailed example,
I thought I'd ask if anyone has had the same problem.

The generatePDFfromFO Method looks like this:

private static byte[] generatePDFfromFO(final byte[] bytesFO, final 
TransformerFactory factory) throws Exception {

     final     var foUserAgent   = FOP_FACTORY.newFOUserAgent();
     ;             foUserAgent.setProducer("ap FOP");
     ;             foUserAgent.setCreationDate(new Date());
     ;             foUserAgent.setTargetResolution(300 /* dpi */);

     final     var foSignParms   = new 
PDFSignParams("path/fopTest.pkcs12", null, null, null, "fopTest");

     @SuppressWarnings("unchecked")
     final     var foRendOpt     = (Map<Object, Object>) 
foUserAgent.getRendererOptions();
     ;             foRendOpt.put("sign-params", foSignParms);

     final     var pdfBytesSizeGuess  = bytesFO.length / 2;
     final     var pdfBytesBaos       = new 
ByteArrayOutputStream(pdfBytesSizeGuess);

     try          (pdfBytesBaos)
     {
         final var fop                = 
foUserAgent.newFop(MimeConstants.MIME_PDF, pdfBytesBaos);
         final var saxResult          = new 
SAXResult(fop.getDefaultHandler());

         final var xmlSource          = getSource(bytesFO);

         final var transformer        = factory.newTransformer();
         ;         transformer.transform(xmlSource, saxResult); // -> 
*NullPointerException*
     }
     return        pdfBytesBaos.toByteArray();
}

Any ideas, anyone?

Thanks in advance,
DaveLaw
--------------iHcd3HX2v1Iq0gBe6LluMRXy
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    Hi there,<br>
    <br>
    I'm trying to create a signed PDF with FOP v2.11 &amp; JDK 17.<br>
    <br>
    I am NOT using a Config file (i.e. fop.xconf).<br>
    <br>
    Instead I'm supplying an instance of PDFSignParams.<br>
    -&gt; FOP then internally creates an instance of PDFSignature.<br>
    -&gt; I've checked the PDFSignature instance is able to read the
    Keystore &amp; sign content.<br>
    <br>
    When creating the PDF from the FO, a <b>NullPointerException</b> is
    raised.<br>
    The only Method invoked on PDFSignature is add(final PDFPage page).<br>
    <br>
    The message is:<br>
    Cannot invoke "java.io.OutputStream.write(byte[], int, int)" because
    "this.out" is null<br>
    <br>
    (I did something similar for encryption with an instance of
    PDFEncryptionParams. That worked fine)<br>
    <br>
    Before I take time to create a detailed example,<br>
    I thought I'd ask if anyone has had the same problem.<br>
    <br>
    The generatePDFfromFO Method looks like this:<br>
    <br>
    <font face="monospace">private static byte[] generatePDFfromFO(final
      byte[] bytesFO, final TransformerFactory factory) throws Exception
      {<br>
      <br>
          final     var foUserAgent   = FOP_FACTORY.newFOUserAgent();<br>
          ;             foUserAgent.setProducer("ap FOP");<br>
          ;             foUserAgent.setCreationDate(new Date());<br>
          ;             foUserAgent.setTargetResolution(300 /* dpi */);<br>
      <br>
          final     var foSignParms   = new
      PDFSignParams("path/fopTest.pkcs12", null, null, null, "fopTest");<br>
      <br>
          @SuppressWarnings("unchecked")<br>
          final     var foRendOpt     = (Map&lt;Object, Object&gt;)
      foUserAgent.getRendererOptions();<br>
          ;             foRendOpt.put("sign-params", foSignParms);<br>
      <br>
          final     var pdfBytesSizeGuess  = bytesFO.length / 2;<br>
          final     var pdfBytesBaos       = new
      ByteArrayOutputStream(pdfBytesSizeGuess);<br>
      <br>
          try          (pdfBytesBaos)<br>
          {<br>
              final var fop                =
      foUserAgent.newFop(MimeConstants.MIME_PDF, pdfBytesBaos);<br>
              final var saxResult          = new
      SAXResult(fop.getDefaultHandler());<br>
      <br>
              final var xmlSource          = getSource(bytesFO);<br>
      <br>
              final var transformer        = factory.newTransformer();<br>
              ;         transformer.transform(xmlSource, saxResult); //
      -&gt; <b>NullPointerException</b><br>
          }<br>
          return        pdfBytesBaos.toByteArray();<br>
      }<br>
    </font><br>
    Any ideas, anyone?<br>
    <br>
    Thanks in advance,<br>
    DaveLaw
  </body>
</html>

--------------iHcd3HX2v1Iq0gBe6LluMRXy--