From 85e574618b04a34d5e41444d17ce7e6d5a93cc5b Mon Sep 17 00:00:00 2001
From: netconomy <netconomy@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>
Date: Thu, 6 Sep 2007 12:18:45 +0000
Subject: =?UTF-8?q?Streaming=20R=C3=BCckbau?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@210 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c
---
 .../gv/egiz/pdfas/framework/input/DataSource.java  | 15 ++++++
 .../gv/egiz/pdfas/framework/output/DataSink.java   |  4 ++
 .../impl/input/ByteArrayPdfDataSourceImpl.java     | 23 +++++---
 .../impl/input/CompoundPdfDataSourceImpl.java      | 18 +++++++
 .../pdfas/impl/input/DelimitedPdfDataSource.java   | 18 +++++++
 .../impl/input/FileBasedPdfDataSourceImpl.java     | 30 ++++++++++-
 .../impl/input/FileBasedTextDataSourceImpl.java    | 18 +++++++
 .../egiz/pdfas/impl/input/TextDataSourceImpl.java  | 16 ++++++
 .../pdfas/impl/input/helper/DataSourceHelper.java  | 49 +++++++++++++----
 .../egiz/pdfas/impl/output/ByteArrayDataSink.java  |  3 ++
 .../signator/textual/TextualSignator_1_0_0.java    |  2 +-
 .../pdfas/impl/vfilter/VerificationFilterImpl.java | 19 +++++--
 .../gv/egiz/pdfas/web/SignSessionInformation.java  | 13 +++--
 .../egiz/pdfas/web/helper/SignServletHelper.java   | 22 ++++++--
 .../at/gv/egiz/pdfas/web/helper/TempDirHelper.java | 63 +++++++++++++++-------
 .../java/at/knowcenter/wag/egov/egiz/PdfAS.java    | 30 ++++++++---
 .../wag/egov/egiz/cfg/SettingsReader.java          | 15 +++---
 .../knowcenter/wag/egov/egiz/commandline/Main.java |  2 +-
 .../egov/egiz/framework/VerificationFilter.java    |  2 +-
 .../signators/DetachedSignator_1_0_0.java          |  2 +-
 .../signators/DetachedfTextualSignator_1_0_0.java  |  2 +-
 .../framework/signators/TextualSignator_1_0_0.java |  2 +-
 .../verificators/TextualVerificator_1_0_0.java     |  4 +-
 .../verificators/TextualVerificator_pdfasold.java  |  2 +-
 .../wag/egov/egiz/pdf/BinarySignature.java         |  7 +--
 .../at/knowcenter/wag/egov/egiz/pdf/EGIZDate.java  | 16 ++++--
 .../knowcenter/wag/egov/egiz/pdf/PDFUtilities.java | 15 ++++--
 .../wag/egov/egiz/pdf/TextualSignature.java        | 17 +++---
 .../knowcenter/wag/egov/egiz/tools/FileHelper.java |  4 +-
 .../wag/egov/egiz/web/servlets/DataURLServlet.java |  7 ++-
 .../wag/egov/egiz/web/servlets/SignServlet.java    |  5 +-
 31 files changed, 345 insertions(+), 100 deletions(-)

(limited to 'src/main/java')

diff --git a/src/main/java/at/gv/egiz/pdfas/framework/input/DataSource.java b/src/main/java/at/gv/egiz/pdfas/framework/input/DataSource.java
index 265cb0c..fcf55b8 100644
--- a/src/main/java/at/gv/egiz/pdfas/framework/input/DataSource.java
+++ b/src/main/java/at/gv/egiz/pdfas/framework/input/DataSource.java
@@ -32,4 +32,19 @@ public interface DataSource
    */
   public int getLength();
 
+  /**
+   * Returns the data of this DataSource as a byte array.
+   * 
+   * <p>
+   * Calling this method indicates that you need a byte array for random <strong>read</strong> access.
+   * The DataSource implementation should of course cache this byte array to avoid too much memory usage.
+   * </p>
+   * <p>
+   * Performance analysis has shown that the libraries internally convert the streams to byte arrays and
+   * that file system access is very slow.
+   * </p>
+   * 
+   * @return
+   */
+  public byte [] getAsByteArray();
 }
diff --git a/src/main/java/at/gv/egiz/pdfas/framework/output/DataSink.java b/src/main/java/at/gv/egiz/pdfas/framework/output/DataSink.java
index d7d0cc4..595df52 100644
--- a/src/main/java/at/gv/egiz/pdfas/framework/output/DataSink.java
+++ b/src/main/java/at/gv/egiz/pdfas/framework/output/DataSink.java
@@ -12,4 +12,8 @@ public interface DataSink
   public OutputStream createOutputStream(String mimeType);
 
   public OutputStream createOutputStream(String mimeType, String characterEncoding);
+
+  public String getMimeType();
+
+  public String getCharacterEncoding();
 }
diff --git a/src/main/java/at/gv/egiz/pdfas/impl/input/ByteArrayPdfDataSourceImpl.java b/src/main/java/at/gv/egiz/pdfas/impl/input/ByteArrayPdfDataSourceImpl.java
index 0d27781..e4a5649 100644
--- a/src/main/java/at/gv/egiz/pdfas/impl/input/ByteArrayPdfDataSourceImpl.java
+++ b/src/main/java/at/gv/egiz/pdfas/impl/input/ByteArrayPdfDataSourceImpl.java
@@ -23,34 +23,43 @@ public class ByteArrayPdfDataSourceImpl implements PdfDataSource
 {
   protected byte[] pdf = null;
   
-  protected int length = -1;
-
   public ByteArrayPdfDataSourceImpl(byte[] pdf)
   {
     PerformanceCounters.byteArrays.increment();
 
     this.pdf = pdf;
-    this.length = pdf.length;
   }
 
   public ByteArrayPdfDataSourceImpl(byte[] pdf, int length)
   {
     PerformanceCounters.byteArrays.increment();
 
-    this.pdf = pdf;
-    this.length = length;
+    if (pdf.length == length)
+    {
+      this.pdf = pdf;
+    }
+    else
+    {
+      this.pdf = new byte [length];
+      System.arraycopy(pdf, 0, this.pdf, 0, length);
+    }
   }
 
 
   public InputStream createInputStream()
   {
-    ByteArrayInputStream bais = new ByteArrayInputStream(this.pdf, 0, this.length);
+    ByteArrayInputStream bais = new ByteArrayInputStream(this.pdf);
     return bais;
   }
 
   public int getLength()
   {
-    return this.length;
+    return this.pdf.length;
   }
 
+  public byte[] getAsByteArray()
+  {
+    return this.pdf;
+  }
+  
 }
diff --git a/src/main/java/at/gv/egiz/pdfas/impl/input/CompoundPdfDataSourceImpl.java b/src/main/java/at/gv/egiz/pdfas/impl/input/CompoundPdfDataSourceImpl.java
index f77d6be..4f00bb5 100644
--- a/src/main/java/at/gv/egiz/pdfas/impl/input/CompoundPdfDataSourceImpl.java
+++ b/src/main/java/at/gv/egiz/pdfas/impl/input/CompoundPdfDataSourceImpl.java
@@ -43,5 +43,23 @@ public class CompoundPdfDataSourceImpl implements PdfDataSource
   {
     return this.originalDataSource.getLength() + this.appendix.length;
   }
+  
+  byte [] cache = null;
 
+  /**
+   * @see at.gv.egiz.pdfas.framework.input.DataSource#getAsByteArray()
+   */
+  public byte[] getAsByteArray()
+  {
+    if (cache != null)
+    {
+      return cache;
+    }
+    
+    cache = new byte [getLength()];
+    System.arraycopy(originalDataSource.getAsByteArray(), 0, cache, 0, originalDataSource.getLength());
+    System.arraycopy(appendix, 0, cache, originalDataSource.getLength(), appendix.length);
+    
+    return cache;
+  }
 }
diff --git a/src/main/java/at/gv/egiz/pdfas/impl/input/DelimitedPdfDataSource.java b/src/main/java/at/gv/egiz/pdfas/impl/input/DelimitedPdfDataSource.java
index 6c67be2..63874c7 100644
--- a/src/main/java/at/gv/egiz/pdfas/impl/input/DelimitedPdfDataSource.java
+++ b/src/main/java/at/gv/egiz/pdfas/impl/input/DelimitedPdfDataSource.java
@@ -41,4 +41,22 @@ public class DelimitedPdfDataSource implements PdfDataSource
     return this.len;
   }
 
+  byte [] cache = null;
+
+  /**
+   * @see at.gv.egiz.pdfas.framework.input.DataSource#getAsByteArray()
+   */
+  public byte[] getAsByteArray()
+  {
+    if (cache != null)
+    {
+      return cache;
+    }
+    
+    cache = new byte [getLength()];
+    System.arraycopy(dataSource.getAsByteArray(), 0, cache, 0, getLength());
+    
+    return cache;
+  }
+
 }
diff --git a/src/main/java/at/gv/egiz/pdfas/impl/input/FileBasedPdfDataSourceImpl.java b/src/main/java/at/gv/egiz/pdfas/impl/input/FileBasedPdfDataSourceImpl.java
index 8453192..a3a0803 100644
--- a/src/main/java/at/gv/egiz/pdfas/impl/input/FileBasedPdfDataSourceImpl.java
+++ b/src/main/java/at/gv/egiz/pdfas/impl/input/FileBasedPdfDataSourceImpl.java
@@ -3,6 +3,7 @@
  */
 package at.gv.egiz.pdfas.impl.input;
 
+import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -13,6 +14,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import at.gv.egiz.pdfas.framework.input.PdfDataSource;
+import at.gv.egiz.pdfas.impl.input.helper.DataSourceHelper;
 
 /**
  * @author wprinz
@@ -77,6 +79,15 @@ public class FileBasedPdfDataSourceImpl implements PdfDataSource, FileBased
    * @see at.gv.egiz.pdfas.framework.input.PdfDataSource#createInputStream()
    */
   public InputStream createInputStream()
+  {
+    if (cache == null)
+    {
+      getAsByteArray();
+    }
+    return new ByteArrayInputStream(cache);
+  }
+
+  protected InputStream createFileInputStream()
   {
     try
     {
@@ -92,7 +103,6 @@ public class FileBasedPdfDataSourceImpl implements PdfDataSource, FileBased
       return null;
     }
   }
-
   /**
    * @see at.gv.egiz.pdfas.framework.input.PdfDataSource#getLength()
    */
@@ -100,4 +110,22 @@ public class FileBasedPdfDataSourceImpl implements PdfDataSource, FileBased
   {
     return this.length;
   }
+  
+  byte [] cache = null;
+  
+  /**
+   * @see at.gv.egiz.pdfas.framework.input.DataSource#getAsByteArray()
+   */
+  public byte[] getAsByteArray()
+  {
+    if (cache != null)
+    {
+      return cache;
+    }
+    
+    cache = DataSourceHelper.convertInputStreamToByteArray(createFileInputStream());
+    
+    return cache;
+  }
+
 }
diff --git a/src/main/java/at/gv/egiz/pdfas/impl/input/FileBasedTextDataSourceImpl.java b/src/main/java/at/gv/egiz/pdfas/impl/input/FileBasedTextDataSourceImpl.java
index 6f6c7b4..1988519 100644
--- a/src/main/java/at/gv/egiz/pdfas/impl/input/FileBasedTextDataSourceImpl.java
+++ b/src/main/java/at/gv/egiz/pdfas/impl/input/FileBasedTextDataSourceImpl.java
@@ -13,6 +13,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import at.gv.egiz.pdfas.framework.input.TextDataSource;
+import at.gv.egiz.pdfas.impl.input.helper.DataSourceHelper;
 
 /**
  * @author wprinz
@@ -121,4 +122,21 @@ public class FileBasedTextDataSourceImpl implements TextDataSource, FileBased
     return (int) getFile().length();
   }
 
+  byte [] cache = null;
+  
+  /**
+   * @see at.gv.egiz.pdfas.framework.input.DataSource#getAsByteArray()
+   */
+  public byte[] getAsByteArray()
+  {
+    if (cache != null)
+    {
+      return cache;
+    }
+    
+    cache = DataSourceHelper.convertInputStreamToByteArray(createInputStream());
+    
+    return cache;
+  }
+
 }
diff --git a/src/main/java/at/gv/egiz/pdfas/impl/input/TextDataSourceImpl.java b/src/main/java/at/gv/egiz/pdfas/impl/input/TextDataSourceImpl.java
index b259a3e..c983a8a 100644
--- a/src/main/java/at/gv/egiz/pdfas/impl/input/TextDataSourceImpl.java
+++ b/src/main/java/at/gv/egiz/pdfas/impl/input/TextDataSourceImpl.java
@@ -79,4 +79,20 @@ public class TextDataSourceImpl implements TextDataSource
     }
   }
 
+  /**
+   * @see at.gv.egiz.pdfas.framework.input.DataSource#getAsByteArray()
+   */
+  public byte[] getAsByteArray()
+  {
+    try
+    {
+      byte[] data = getText().getBytes("UTF-8");
+      return data;
+    }
+    catch (UnsupportedEncodingException e)
+    {
+      throw new RuntimeException(e);
+    }
+  }
+
 }
diff --git a/src/main/java/at/gv/egiz/pdfas/impl/input/helper/DataSourceHelper.java b/src/main/java/at/gv/egiz/pdfas/impl/input/helper/DataSourceHelper.java
index 1e2ffdc..138b269 100644
--- a/src/main/java/at/gv/egiz/pdfas/impl/input/helper/DataSourceHelper.java
+++ b/src/main/java/at/gv/egiz/pdfas/impl/input/helper/DataSourceHelper.java
@@ -3,6 +3,7 @@
  */
 package at.gv.egiz.pdfas.impl.input.helper;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -41,25 +42,55 @@ public class DataSourceHelper
    * @throws IOException
    */
   public static byte[] convertDataSourceToByteArray(DataSource pdfDataSource)
+  {
+    return pdfDataSource.getAsByteArray();
+//    try
+//    {
+//      PerformanceCounters.byteArrays.increment();
+//
+//      byte[] data = new byte[pdfDataSource.getLength()];
+//
+//      int bytes_written = 0;
+//
+//      InputStream is = pdfDataSource.createInputStream();
+//      int n = 0;
+//      while ((n = is.read(data, bytes_written, data.length - bytes_written)) > 0)
+//      {
+//        bytes_written += n;
+//      }
+//      is.close();
+//
+//      assert bytes_written == data.length;
+//
+//      return data;
+//    }
+//    catch (IOException e)
+//    {
+//      log.error(e);
+//      throw new RuntimeException(e);
+//    }
+  }
+  
+  public static byte [] convertInputStreamToByteArray(InputStream inputStream)
   {
     try
     {
       PerformanceCounters.byteArrays.increment();
 
-      byte[] data = new byte[pdfDataSource.getLength()];
+      ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
+      
+      byte[] temp = new byte[4096];
 
-      int bytes_written = 0;
-
-      InputStream is = pdfDataSource.createInputStream();
       int n = 0;
-      while ((n = is.read(data, bytes_written, data.length - bytes_written)) > 0)
+      while ((n = inputStream.read(temp)) > 0)
       {
-        bytes_written += n;
+        baos.write(temp, 0, n);
       }
-      is.close();
-
-      assert bytes_written == data.length;
+      inputStream.close();
 
+      baos.close();
+      byte [] data = baos.toByteArray();
+      
       return data;
     }
     catch (IOException e)
diff --git a/src/main/java/at/gv/egiz/pdfas/impl/output/ByteArrayDataSink.java b/src/main/java/at/gv/egiz/pdfas/impl/output/ByteArrayDataSink.java
index f3d1283..3a3aeca 100644
--- a/src/main/java/at/gv/egiz/pdfas/impl/output/ByteArrayDataSink.java
+++ b/src/main/java/at/gv/egiz/pdfas/impl/output/ByteArrayDataSink.java
@@ -47,6 +47,9 @@ public class ByteArrayDataSink implements DataSink
    */
   public OutputStream createOutputStream(String mimeType, String characterEncoding)
   {
+    this.mimeType = mimeType;
+    this.characterEncoding = characterEncoding;
+    
     if (this.baos != null)
     {
       log.warn("An output stream is created twice. The old one will be rendered useless.");
diff --git a/src/main/java/at/gv/egiz/pdfas/impl/signator/textual/TextualSignator_1_0_0.java b/src/main/java/at/gv/egiz/pdfas/impl/signator/textual/TextualSignator_1_0_0.java
index b0494c8..1714afc 100644
--- a/src/main/java/at/gv/egiz/pdfas/impl/signator/textual/TextualSignator_1_0_0.java
+++ b/src/main/java/at/gv/egiz/pdfas/impl/signator/textual/TextualSignator_1_0_0.java
@@ -91,7 +91,7 @@ public class TextualSignator_1_0_0 implements Signator
       tsi.profile = profile;
       tsi.pos = pos;
 
-      String document_text = PdfAS.extractNormalizedTextTextual(pdfDataSource.createInputStream());
+      String document_text = PdfAS.extractNormalizedTextTextual(pdfDataSource);
       // logger_.debug("signed_text = " + document_text);
 
       DataSource ds = new TextDataSourceImpl(document_text);
diff --git a/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java b/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java
index 981b868..0c9e1f2 100644
--- a/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java
+++ b/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java
@@ -18,7 +18,7 @@ import at.gv.egiz.pdfas.framework.input.TextDataSource;
 import at.gv.egiz.pdfas.framework.verificator.Verificator;
 import at.gv.egiz.pdfas.framework.vfilter.VerificationFilter;
 import at.gv.egiz.pdfas.framework.vfilter.VerificationFilterParameters;
-import at.gv.egiz.pdfas.impl.input.DelimitedInputStream;
+import at.gv.egiz.pdfas.impl.input.DelimitedPdfDataSource;
 import at.gv.egiz.pdfas.impl.input.helper.DataSourceHelper;
 import at.gv.egiz.pdfas.impl.vfilter.helper.VerificationFilterBinaryHelper;
 import at.gv.egiz.pdfas.impl.vfilter.helper.VerificationFilterHelper;
@@ -285,8 +285,9 @@ public class VerificationFilterImpl implements VerificationFilter
 
   protected String extractText(PdfDataSource pdf, int endOfDocument) throws PresentableException
   {
-    DelimitedInputStream dis = new DelimitedInputStream(pdf.createInputStream(), endOfDocument);
-    return PdfAS.extractNormalizedTextTextual(dis);
+    DelimitedPdfDataSource dds = new DelimitedPdfDataSource(pdf, endOfDocument);
+    //DelimitedInputStream dis = new DelimitedInputStream(pdf.createInputStream(), endOfDocument);
+    return PdfAS.extractNormalizedTextTextual(dds);
   }
 
   protected List extractNewSignaturesFromText(String text) throws VerificationFilterException
@@ -453,6 +454,18 @@ public class VerificationFilterImpl implements VerificationFilter
       log.debug("Extracting signatures:");
       List extractedSignatures = extractNewSignaturesFromText(extractedText);
       log.debug("Extracting signatures finished.");
+      
+      if (log.isDebugEnabled())
+      {
+        log.debug("extracted signatures:");
+        for (int i = 0; i < extractedSignatures.size(); i++)
+        {
+          SignatureHolder sh = (SignatureHolder)extractedSignatures.get(i);
+          String dateStr = sh.getSignatureObject().getSignationDate();
+          EGIZDate ed = EGIZDate.parseFromString(dateStr);
+          log.debug("#" + i + ": dateStr = " + dateStr + ", egizDate = " + ed.toString());
+        }
+      }
 
       return extractedSignatures;
     }
diff --git a/src/main/java/at/gv/egiz/pdfas/web/SignSessionInformation.java b/src/main/java/at/gv/egiz/pdfas/web/SignSessionInformation.java
index 459a104..1ed0cab 100644
--- a/src/main/java/at/gv/egiz/pdfas/web/SignSessionInformation.java
+++ b/src/main/java/at/gv/egiz/pdfas/web/SignSessionInformation.java
@@ -9,14 +9,13 @@ import java.util.Properties;
 import javax.servlet.http.HttpSessionBindingEvent;
 import javax.servlet.http.HttpSessionBindingListener;
 
-import at.gv.egiz.pdfas.impl.input.FileBasedPdfDataSourceImpl;
-import at.gv.egiz.pdfas.impl.output.FileBasedDataSink;
-import at.gv.egiz.pdfas.web.helper.TempDirHelper;
-import at.gv.egiz.pdfas.framework.signator.SignatorInformation;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import at.gv.egiz.pdfas.framework.input.PdfDataSource;
+import at.gv.egiz.pdfas.framework.output.DataSink;
+import at.gv.egiz.pdfas.framework.signator.SignatorInformation;
+import at.gv.egiz.pdfas.web.helper.TempDirHelper;
 import at.knowcenter.wag.egov.egiz.pdf.TablePos;
 import at.knowcenter.wag.egov.egiz.web.ExternAppInformation;
 import at.knowcenter.wag.egov.egiz.web.LocalRequest;
@@ -55,7 +54,7 @@ public class SignSessionInformation implements HttpSessionBindingListener, Seria
   /**
    * The original, uploaded pdf.
    */
-  public FileBasedPdfDataSourceImpl pdfDataSource = null;
+  public PdfDataSource pdfDataSource = null;
 
   /**
    * The type/profile of the signature.
@@ -94,7 +93,7 @@ public class SignSessionInformation implements HttpSessionBindingListener, Seria
   /**
    * The DataSink to write the output data to.
    */
-  public FileBasedDataSink output = null;
+  public DataSink output = null;
 
   /**
    * The local request to be sent to the device.
diff --git a/src/main/java/at/gv/egiz/pdfas/web/helper/SignServletHelper.java b/src/main/java/at/gv/egiz/pdfas/web/helper/SignServletHelper.java
index af1d0ae..9826500 100644
--- a/src/main/java/at/gv/egiz/pdfas/web/helper/SignServletHelper.java
+++ b/src/main/java/at/gv/egiz/pdfas/web/helper/SignServletHelper.java
@@ -18,6 +18,8 @@ import org.apache.commons.logging.LogFactory;
 
 import at.gv.egiz.pdfas.framework.SignatorFactory;
 import at.gv.egiz.pdfas.framework.signator.Signator;
+import at.gv.egiz.pdfas.impl.output.ByteArrayDataSink;
+import at.gv.egiz.pdfas.impl.output.FileBasedDataSink;
 import at.gv.egiz.pdfas.web.SignSessionInformation;
 import at.knowcenter.wag.egov.egiz.PdfASID;
 import at.knowcenter.wag.egov.egiz.exceptions.PresentableException;
@@ -185,10 +187,21 @@ public class SignServletHelper
     else
     {
       // TODO @tzefferer: what is this code?
-      byte[] signed_pdf = new byte [(int)si.output.getFile().length()];
-      FileInputStream fis = new FileInputStream(si.output.getFile());
-      fis.read(signed_pdf);
-      fis.close();
+      byte [] signed_pdf = null;
+      if (si.output instanceof FileBasedDataSink)
+      {
+        FileBasedDataSink fbds = (FileBasedDataSink)si.output;
+        signed_pdf = new byte [(int)fbds.getFile().length()];
+        FileInputStream fis = new FileInputStream(fbds.getFile());
+        fis.read(signed_pdf);
+        fis.close();
+      }
+      else
+      {
+        ByteArrayDataSink bads = (ByteArrayDataSink)si.output;
+        signed_pdf = bads.getByteArray();
+      }
+      
       PDFContainer entry = new PDFContainer(signed_pdf, si.exappinf.pdf_id);
       ProvidePDFServlet.signedDocuments.add(entry);
 
@@ -205,7 +218,6 @@ public class SignServletHelper
           + "=" + pdf_id + "&" + FormFields.FIELD_FILE_LENGTH + "=" + signed_pdf.length;
 
       response.sendRedirect(query);
-
     }
 
   }
diff --git a/src/main/java/at/gv/egiz/pdfas/web/helper/TempDirHelper.java b/src/main/java/at/gv/egiz/pdfas/web/helper/TempDirHelper.java
index 0745bcc..23c01fd 100644
--- a/src/main/java/at/gv/egiz/pdfas/web/helper/TempDirHelper.java
+++ b/src/main/java/at/gv/egiz/pdfas/web/helper/TempDirHelper.java
@@ -21,12 +21,16 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import at.gv.egiz.pdfas.framework.input.DataSource;
+import at.gv.egiz.pdfas.framework.input.PdfDataSource;
 import at.gv.egiz.pdfas.framework.input.TextDataSource;
 import at.gv.egiz.pdfas.framework.output.DataSink;
+import at.gv.egiz.pdfas.impl.input.ByteArrayPdfDataSourceImpl;
 import at.gv.egiz.pdfas.impl.input.FileBased;
 import at.gv.egiz.pdfas.impl.input.FileBasedPdfDataSourceImpl;
 import at.gv.egiz.pdfas.impl.input.FileBasedTextDataSourceImpl;
 import at.gv.egiz.pdfas.impl.input.TextDataSourceImpl;
+import at.gv.egiz.pdfas.impl.input.helper.DataSourceHelper;
+import at.gv.egiz.pdfas.impl.output.ByteArrayDataSink;
 import at.gv.egiz.pdfas.impl.output.FileBasedDataSink;
 import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
 import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder;
@@ -119,11 +123,16 @@ public class TempDirHelper
     return textLength >= 10000;
   }
 
-  public static FileBasedPdfDataSourceImpl placePdfIntoTempDir(InputStream pdfInput, String fileNameSuffix) throws IOException
+  public static PdfDataSource placePdfIntoTempDir(InputStream pdfInput, String fileNameSuffix) throws IOException
   {
-    File pdfFile = placeInputIntoTempDirFile(pdfInput, fileNameSuffix);
-
-    FileBasedPdfDataSourceImpl pdfDataSource = new FileBasedPdfDataSourceImpl(pdfFile, (int) pdfFile.length());
+    log.debug("PERF: placing pdf into memory cache");
+    
+    byte [] pdfData = DataSourceHelper.convertInputStreamToByteArray(pdfInput);
+    PdfDataSource pdfDataSource = new ByteArrayPdfDataSourceImpl(pdfData); 
+    
+//    File pdfFile = placeInputIntoTempDirFile(pdfInput, fileNameSuffix);
+//
+//    FileBasedPdfDataSourceImpl pdfDataSource = new FileBasedPdfDataSourceImpl(pdfFile, (int) pdfFile.length());
     return pdfDataSource;
   }
 
@@ -177,35 +186,49 @@ public class TempDirHelper
     return tmpFile;
   }
 
-  public static FileBasedDataSink createTempDataSink(String fileNameSuffix) throws IOException
+  public static DataSink createTempDataSink(String fileNameSuffix) throws IOException
   {
-    String fileName = formatFileName(fileNameSuffix);
-
-    File tmpFile = createTempFileInDir(fileName);
+    log.debug("PERF: placing pdf into memory cache");
 
-    FileBasedDataSink fbds = new FileBasedDataSink(tmpFile);
+    DataSink ds = new ByteArrayDataSink();
+    
+//    String fileName = formatFileName(fileNameSuffix);
+//
+//    File tmpFile = createTempFileInDir(fileName);
+//
+//    FileBasedDataSink ds = new FileBasedDataSink(tmpFile);
 
-    return fbds;
+    return ds;
   }
 
-  public static void writeDataSinkToHttpResponse(FileBasedDataSink fbds, HttpServletResponse response) throws IOException
+  public static void writeDataSinkToHttpResponse(DataSink ds, HttpServletResponse response) throws IOException
   {
 
-    response.setContentType(fbds.getMimeType());
-    response.setCharacterEncoding(fbds.getCharacterEncoding());
+    response.setContentType(ds.getMimeType());
+    response.setCharacterEncoding(ds.getCharacterEncoding());
 
     OutputStream os = response.getOutputStream();
 
-    byte[] buffer = new byte[2048];
-    FileInputStream fis = new FileInputStream(fbds.getFile());
-    int n = -1;
-    while ((n = fis.read(buffer)) > 0)
+    if (ds instanceof FileBasedDataSink)
     {
-      os.write(buffer, 0, n);
+      FileBasedDataSink fbds = (FileBasedDataSink)ds;
+      byte[] buffer = new byte[2048];
+      FileInputStream fis = new FileInputStream(fbds.getFile());
+      int n = -1;
+      while ((n = fis.read(buffer)) > 0)
+      {
+        os.write(buffer, 0, n);
+      }
+      fis.close();
     }
-    fis.close();
+    else
+    {
+      ByteArrayDataSink bads = (ByteArrayDataSink)ds;
+      os.write(bads.getByteArray());
+    }
+
     os.close();
-  }
+}
 
   /**
    * Deletes the underlying file of the FileBased DataSource.
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/PdfAS.java b/src/main/java/at/knowcenter/wag/egov/egiz/PdfAS.java
index e2505ea..6fc7b84 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/PdfAS.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/PdfAS.java
@@ -28,6 +28,7 @@ import java.util.Vector;
 
 import at.gv.egiz.pdfas.commandline.CommandlineConnectorChooser;
 import at.gv.egiz.pdfas.exceptions.ErrorCode;
+import at.gv.egiz.pdfas.impl.input.ByteArrayPdfDataSourceImpl;
 import at.gv.egiz.pdfas.impl.input.DelimitedInputStream;
 import at.gv.egiz.pdfas.impl.input.TextDataSourceImpl;
 import at.gv.egiz.pdfas.impl.input.helper.DataSourceHelper;
@@ -1026,19 +1027,30 @@ public abstract class PdfAS
 //    return extractNormalizedTextTextual(pdf, pdf.length);
 //  }
 
-  public static String extractNormalizedTextTextual(InputStream pdfInputStream) throws PresentableException
+  public static String extractNormalizedTextTextual(PdfDataSource pdfDataSource) throws PresentableException
   {
-    String raw_document_text = TextualSignature.extractTextTextual(pdfInputStream);
+    String raw_document_text = TextualSignature.extractTextTextual(pdfDataSource);
     String document_text = normalizeText(raw_document_text);
     return document_text;   
   }
-  public static String extractNormalizedTextTextual(InputStream pdfInputStream, int length) throws PresentableException
+  /**
+  @deprecated
+  */
+  public static String extractNormalizedTextTextual(byte [] pdf,  int length) throws PresentableException
   {
-    DelimitedInputStream dis = new DelimitedInputStream(pdfInputStream, length);
-    String raw_document_text = TextualSignature.extractTextTextual(dis);
+    ByteArrayPdfDataSourceImpl pdfDataSource = new ByteArrayPdfDataSourceImpl(pdf, length);
+    String raw_document_text = TextualSignature.extractTextTextual(pdfDataSource);
     String document_text = normalizeText(raw_document_text);
     return document_text;   
   }
+
+//  public static String extractNormalizedTextTextual(InputStream pdfInputStream, int length) throws PresentableException
+//  {
+//    DelimitedInputStream dis = new DelimitedInputStream(pdfInputStream, length);
+//    String raw_document_text = TextualSignature.extractTextTextual(dis);
+//    String document_text = normalizeText(raw_document_text);
+//    return document_text;   
+//  }
 //  /**
 //   * Extracts and normalizes the text from the pdf.
 //   * 
@@ -1380,9 +1392,11 @@ public abstract class PdfAS
   {
     try
     {
-      InputStream is = pdfDataSource.createInputStream();
-      PdfReader reader = new PdfReader(is);
-      is.close();
+      //InputStream is = pdfDataSource.createInputStream();
+      // PERF: byte array instead of stream
+      byte [] pdf_data = pdfDataSource.getAsByteArray();
+      PdfReader reader = new PdfReader(pdf_data);
+      //is.close();
       return reader;
     }
     catch (IOException e)
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/cfg/SettingsReader.java b/src/main/java/at/knowcenter/wag/egov/egiz/cfg/SettingsReader.java
index a158729..b7fcb96 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/cfg/SettingsReader.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/cfg/SettingsReader.java
@@ -284,7 +284,7 @@ public class SettingsReader implements Serializable
       if (logger_.isInfoEnabled())
       {
         File file = new File(settingsFile_);
-        logger_.info("load Settings:" + file.getAbsolutePath());
+        logger_.debug("load Settings:" + file.getAbsolutePath());
         // Properties sys_prop = System.getProperties();
         // Enumeration prop_keys = sys_prop.propertyNames();
         // while (prop_keys.hasMoreElements()) {
@@ -303,7 +303,7 @@ public class SettingsReader implements Serializable
       // load properties from current package!
       // properties_.load(getClass().getResourceAsStream(settingsFile_));
       Enumeration prop_keys = properties_.propertyNames();
-      
+
       while (prop_keys.hasMoreElements())
       {
         String key = (String) prop_keys.nextElement();
@@ -456,8 +456,7 @@ public class SettingsReader implements Serializable
    *          the default value if the defaultKey is not found
    * @return the value of the property key
    */
-  public String getSetting(String primaryKey, String defaultKey,
-      String defaultValue)
+  public String getSetting(String primaryKey, String defaultKey, String defaultValue)
   {
     String key = primaryKey;
     String result = properties_.getProperty(key);
@@ -640,7 +639,7 @@ public class SettingsReader implements Serializable
   public static void clearTemporaryDirectory()
   {
     File temp_dir = assembleTemporaryDirectoryFile();
-    logger_.info("Clearing temporary directory: " + temp_dir);
+    logger_.debug("Clearing temporary directory: " + temp_dir);
 
     if (!temp_dir.exists())
     {
@@ -650,7 +649,7 @@ public class SettingsReader implements Serializable
     File[] files = temp_dir.listFiles();
     for (int i = 0; i < files.length; i++)
     {
-      logger_.info("  Clearing temporary file: " + files[i]);
+      logger_.debug("  Clearing temporary file: " + files[i]);
       boolean delete_success = files[i].delete();
       if (!delete_success)
       {
@@ -662,7 +661,9 @@ public class SettingsReader implements Serializable
   /**
    * Initializes the paths of the SettingsReader for web application usage.
    * 
-   * @param base_dir The base directory of this web application. E.g. TOMCAT_HOME/webapps/pdf-as
+   * @param base_dir
+   *          The base directory of this web application. E.g.
+   *          TOMCAT_HOME/webapps/pdf-as
    */
   public static void initializeForWeb(String base_dir)
   {
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/commandline/Main.java b/src/main/java/at/knowcenter/wag/egov/egiz/commandline/Main.java
index b0c7c30..72565d9 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/commandline/Main.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/commandline/Main.java
@@ -448,7 +448,7 @@ public abstract class Main
     {
       carryOutVerify(input, connector, verify_which, messageOutput);
     }
-    messageOutput.close();
+    messageOutput.flush();
   }
 
   public static void carryOutSign(String input, String connector, String signature_mode, String signature_type, String pos_string, String user_name, String user_password, String output,
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/framework/VerificationFilter.java b/src/main/java/at/knowcenter/wag/egov/egiz/framework/VerificationFilter.java
index 2631028..6309ad4 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/framework/VerificationFilter.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/framework/VerificationFilter.java
@@ -225,7 +225,7 @@ public class VerificationFilter
         	  logger_.debug("Incemental block" + prev_end + " and there are " + text_holders.size() + " text holders");
         	  logger_.debug("Checking for older textual Signatures");
         	  logger_.debug("Extracting text to " + bpr.next_index);
-            rest_text = PdfAS.extractNormalizedTextTextual(new ByteArrayInputStream(pdf), bpr.next_index); 
+            rest_text = PdfAS.extractNormalizedTextTextual(pdf, bpr.next_index); 
           }
 
           List old_holders = PdfAS.extractSignatureHoldersTextual(rest_text, true);
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedSignator_1_0_0.java b/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedSignator_1_0_0.java
index 4ef1e15..0728aae 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedSignator_1_0_0.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedSignator_1_0_0.java
@@ -87,7 +87,7 @@ public class DetachedSignator_1_0_0 implements Signator
     iui.signature_type = signature_type;
     iui.pos = pos;
 
-    String document_text = PdfAS.extractNormalizedTextTextual(pdf.createInputStream());
+    String document_text = PdfAS.extractNormalizedTextTextual(pdf);
     // logger_.debug("signed_text = " + document_text);
     
     DataSource ds = new TextDataSourceImpl(document_text);
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedfTextualSignator_1_0_0.java b/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedfTextualSignator_1_0_0.java
index d7c79ea..923d232 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedfTextualSignator_1_0_0.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/DetachedfTextualSignator_1_0_0.java
@@ -95,7 +95,7 @@ public class DetachedfTextualSignator_1_0_0 implements Signator
     iui.signature_type = signature_type;
     iui.pos = pos;
 
-    String document_text = PdfAS.extractNormalizedTextTextual(pdf.createInputStream());
+    String document_text = PdfAS.extractNormalizedTextTextual(pdf);
     // logger_.debug("signed_text = " + document_text);
     
     DataSource ds = new TextDataSourceImpl(document_text);
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/TextualSignator_1_0_0.java b/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/TextualSignator_1_0_0.java
index 33de15e..5ce21ce 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/TextualSignator_1_0_0.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/framework/signators/TextualSignator_1_0_0.java
@@ -89,7 +89,7 @@ public class TextualSignator_1_0_0 implements Signator
     iui.signature_type = signature_type;
     iui.pos = pos;
 
-    String document_text = PdfAS.extractNormalizedTextTextual(pdf.createInputStream());
+    String document_text = PdfAS.extractNormalizedTextTextual(pdf);
     // logger_.debug("signed_text = " + document_text);
     
     DataSource ds = new TextDataSourceImpl(document_text);
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/framework/verificators/TextualVerificator_1_0_0.java b/src/main/java/at/knowcenter/wag/egov/egiz/framework/verificators/TextualVerificator_1_0_0.java
index 176c0f0..1cd5930 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/framework/verificators/TextualVerificator_1_0_0.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/framework/verificators/TextualVerificator_1_0_0.java
@@ -81,7 +81,7 @@ public class TextualVerificator_1_0_0 implements Verificator
   public List parseBlock(byte[] pdf, FooterParseResult block,
       int start_of_whole_block) throws PresentableException
   {
-    String block_text = PdfAS.extractNormalizedTextTextual(new ByteArrayInputStream(pdf), block.next_index);
+    String block_text = PdfAS.extractNormalizedTextTextual(pdf, block.next_index);
 
     logger_.debug("Scanning block:");
     //List signature_holders = PdfAS.extractSignatureHoldersTextual(block_text, false);
@@ -100,7 +100,7 @@ public class TextualVerificator_1_0_0 implements Verificator
     {
       text_holder_candidates = new ArrayList();
       
-      String prev_text = PdfAS.extractNormalizedTextTextual(new ByteArrayInputStream(pdf), start_of_whole_block);
+      String prev_text = PdfAS.extractNormalizedTextTextual(pdf, start_of_whole_block);
 
       logger_.debug("Scanning prev block:");
       //List prev_signature_holders = PdfAS.extractSignatureHoldersTextual(prev_text, false);
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/framework/verificators/TextualVerificator_pdfasold.java b/src/main/java/at/knowcenter/wag/egov/egiz/framework/verificators/TextualVerificator_pdfasold.java
index ea84e7e..85bc96c 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/framework/verificators/TextualVerificator_pdfasold.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/framework/verificators/TextualVerificator_pdfasold.java
@@ -61,7 +61,7 @@ public class TextualVerificator_pdfasold implements Verificator
       throw new PDFDocumentException(201, "The PDF-AS-old Verificator can only be applied on original documents.");
     }
     
-    String normalized_text = PdfAS.extractNormalizedTextTextual(new ByteArrayInputStream(pdf), block.next_index);
+    String normalized_text = PdfAS.extractNormalizedTextTextual(pdf, block.next_index);
 
     logger_.debug("Scanning block:");
     List signature_holders = PdfAS.extractSignatureHoldersTextual(normalized_text, true);
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java b/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java
index d253393..677990b 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/pdf/BinarySignature.java
@@ -689,9 +689,10 @@ public abstract class BinarySignature
 
       // System.out.println("wprinz: STAMPING PDF");
 
-      InputStream is = original_document.createInputStream();
-      PdfReader reader = new PdfReader(is);
-      is.close();
+      //InputStream is = original_document.createInputStream();
+      byte [] pdf_data = original_document.getAsByteArray();
+      PdfReader reader = new PdfReader(pdf_data);
+      //is.close();
 
       OutputStream baos = written_pdf.createOutputStream("application/pdf");
       // ByteArrayOutputStream baos = new ByteArrayOutputStream();
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/pdf/EGIZDate.java b/src/main/java/at/knowcenter/wag/egov/egiz/pdf/EGIZDate.java
index 8b8475c..b801706 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/pdf/EGIZDate.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/pdf/EGIZDate.java
@@ -134,9 +134,19 @@ public class EGIZDate {
 			if (li >= 19) {
 				date_value = new StringBuffer(date_value).deleteCharAt(li).toString();
 			}
-			if (date_value.endsWith("Z")) {
-				date_value = date_value.substring(0, date_value.length()-2) + "UTC";
-			}
+			// FIXME: @iaik: wenn man bei UTC+"Z" die letzten -2 Zeichen durch "UTC" ersetzt verliert die Zeit ihre Sekunden-Einerstelle!!!!!!!
+      // alter code:
+//			if (date_value.endsWith("Z")) {
+//				date_value = date_value.substring(0, date_value.length()-2) + "UTC";
+//			}
+			// neuer code:
+      if (date_value.endsWith("ZZ")) {
+        date_value = date_value.substring(0, date_value.length()-2) + "UTC";
+      }
+      if (date_value.endsWith("Z")) {
+        date_value = date_value.substring(0, date_value.length()-1) + "UTC";
+      }
+			
 		} else  {			
 			date_value += "UTC";
 		}		
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFUtilities.java b/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFUtilities.java
index e19c244..b40d129 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFUtilities.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/pdf/PDFUtilities.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 import java.util.List;
 
 import at.gv.egiz.pdfas.framework.input.PdfDataSource;
+import at.gv.egiz.pdfas.impl.input.ByteArrayPdfDataSourceImpl;
 
 import org.pdfbox.pdfparser.PDFParser;
 import org.pdfbox.pdmodel.PDDocument;
@@ -47,7 +48,7 @@ public abstract class PDFUtilities
 	    {
 	      //ByteArrayInputStream original_bais = new ByteArrayInputStream(pdf);
 	      //byte [] normalized_pdf = TextualSignature.normalizePDF(original_bais);
-	      byte [] normalized_pdf = TextualSignature.normalizePDF(pdfDataSource.createInputStream());
+	      byte [] normalized_pdf = TextualSignature.normalizePDF(pdfDataSource);
 	      
 	      // PERF: The whole PDF normalization process is costy
 	      ByteArrayInputStream bais = new ByteArrayInputStream(normalized_pdf);
@@ -80,12 +81,20 @@ public abstract class PDFUtilities
 	    return calculatePageLength(pdpage, footer_line);
 	  }	
 	
+	  /**
+	   * @deprecated
+	   * @param pdf
+	   * @param footer_line
+	   * @return
+	   * @throws PDFDocumentException
+	   */
   public static float calculateLastPageLength(final byte[] pdf, float footer_line) throws PDFDocumentException
   {
     try
     {
-      ByteArrayInputStream original_bais = new ByteArrayInputStream(pdf);
-      byte [] normalized_pdf = TextualSignature.normalizePDF(original_bais);
+      //ByteArrayInputStream original_bais = new ByteArrayInputStream(pdf);
+      PdfDataSource dataSource = new ByteArrayPdfDataSourceImpl(pdf);
+      byte [] normalized_pdf = TextualSignature.normalizePDF(dataSource);
       
       ByteArrayInputStream bais = new ByteArrayInputStream(normalized_pdf);
 
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/pdf/TextualSignature.java b/src/main/java/at/knowcenter/wag/egov/egiz/pdf/TextualSignature.java
index 668bbcb..04b96fc 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/pdf/TextualSignature.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/pdf/TextualSignature.java
@@ -25,6 +25,7 @@ import java.io.InputStream;
 
 import at.gv.egiz.pdfas.performance.PerformanceCounters;
 import at.gv.egiz.pdfas.exceptions.pdf.TextExtractionException;
+import at.gv.egiz.pdfas.framework.input.PdfDataSource;
 
 import org.apache.log4j.Logger;
 import org.pdfbox.pdfparser.PDFParser;
@@ -64,7 +65,7 @@ public class TextualSignature
    * @throws PresentableException
    *           Forwarded exception.
    */
-  public static String extractTextTextual(InputStream pdf_stream) throws TextExtractionException
+  public static String extractTextTextual(PdfDataSource pdfDataSource) throws TextExtractionException
   {
     PerformanceCounters.textExtractions.increment();
     
@@ -83,8 +84,9 @@ public class TextualSignature
      // byte[] bytes = normalizePDF(pdf_stream);
     	//iText  
     	
-        PdfReader reader = new PdfReader(pdf_stream);
-        pdf_stream.close();
+        byte [] pdf_data = pdfDataSource.getAsByteArray();
+        PdfReader reader = new PdfReader(pdf_data);
+        //pdf_stream.close();
 
         // PERF: PDF normalization needs byte array - this is costy
         ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
@@ -202,11 +204,12 @@ public class TextualSignature
    * @throws IOException
    * @throws DocumentException
    */
-  public static byte[] normalizePDF(InputStream input_pdf) throws IOException, DocumentException
+  public static byte[] normalizePDF(PdfDataSource pdfDataSource) throws IOException, DocumentException
   {
-	//iText  
-    PdfReader reader = new PdfReader(input_pdf);
-    input_pdf.close();
+	  //iText
+    byte [] pdf_data = pdfDataSource.getAsByteArray();
+    PdfReader reader = new PdfReader(pdf_data);
+    //input_pdf.close();
     
     // PERF: PDF Normalization needs byte array
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/tools/FileHelper.java b/src/main/java/at/knowcenter/wag/egov/egiz/tools/FileHelper.java
index 0c1a420..53ac7cf 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/tools/FileHelper.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/tools/FileHelper.java
@@ -58,9 +58,9 @@ public class FileHelper {
       }
       reader.close();
     } catch (FileNotFoundException e) {
-      logger_.info("File not found:" + fileName);
+      logger_.debug("File not found:" + fileName);
     } catch (IOException e) {
-      logger_.info("File can not read:" + fileName);
+      logger_.debug("File can not read:" + fileName);
     }
     return file_string;
   }
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java
index 2844c6d..ed4fc7a 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java
@@ -17,6 +17,9 @@ import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 import at.gv.egiz.pdfas.exceptions.framework.SignatorException;
 import at.gv.egiz.pdfas.framework.SignatorFactory;
 import at.gv.egiz.pdfas.framework.signator.Signator;
@@ -25,10 +28,6 @@ import at.gv.egiz.pdfas.web.VerifySessionInformation;
 import at.gv.egiz.pdfas.web.helper.SessionHelper;
 import at.gv.egiz.pdfas.web.helper.SignServletHelper;
 import at.gv.egiz.pdfas.web.helper.TempDirHelper;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
 import at.knowcenter.wag.egov.egiz.PdfASID;
 import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException;
 import at.knowcenter.wag.egov.egiz.exceptions.InvalidIDException;
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignServlet.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignServlet.java
index 60b3431..04971c6 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignServlet.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignServlet.java
@@ -37,6 +37,7 @@ import javax.servlet.http.HttpServletResponse;
 import at.gv.egiz.pdfas.exceptions.ErrorCode;
 import at.gv.egiz.pdfas.exceptions.ErrorCodeHelper;
 import at.gv.egiz.pdfas.exceptions.external.ExternalErrorException;
+import at.gv.egiz.pdfas.framework.input.PdfDataSource;
 import at.gv.egiz.pdfas.impl.input.FileBasedPdfDataSourceImpl;
 import at.gv.egiz.pdfas.web.SignSessionInformation;
 import at.gv.egiz.pdfas.web.helper.SignServletHelper;
@@ -427,7 +428,7 @@ public class SignServlet extends HttpServlet
       throw new PDFDocumentException(250, "The document is empty."); //$NON-NLS-1$
     }
 
-    FileBasedPdfDataSourceImpl pdfDataSource = null;
+    PdfDataSource pdfDataSource = null;
     try
     {
       pdfDataSource = TempDirHelper.placePdfIntoTempDir(file_upload_fi.getInputStream(), doc_file_name);
@@ -571,7 +572,7 @@ public class SignServlet extends HttpServlet
 
     protected String file_name = null;
 
-    protected FileBasedPdfDataSourceImpl pdfDataSource = null;
+    protected PdfDataSource pdfDataSource = null;
     // protected byte[] pdf = null;
   }
 }
\ No newline at end of file
-- 
cgit v1.2.3