diff options
| author | tknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c> | 2010-08-20 10:59:37 +0000 | 
|---|---|---|
| committer | tknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c> | 2010-08-20 10:59:37 +0000 | 
| commit | a95ebceaf0f77a25c26f866dff60faa6b388526c (patch) | |
| tree | 306312ff46ede4feca7cc87721af1542bd4180ae | |
| parent | c8481184208979098d9da7278ffd9f760a32ec9b (diff) | |
| download | pdf-as-3-a95ebceaf0f77a25c26f866dff60faa6b388526c.tar.gz pdf-as-3-a95ebceaf0f77a25c26f866dff60faa6b388526c.tar.bz2 pdf-as-3-a95ebceaf0f77a25c26f866dff60faa6b388526c.zip | |
Internal error passed as RuntimeException instead of being ignored.
PdfAsFactory: Switch implemented that allows to skip provider registration.
git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@589 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c
4 files changed, 173 insertions, 34 deletions
| diff --git a/src/main/java/at/gv/egiz/pdfas/PdfAsFactory.java b/src/main/java/at/gv/egiz/pdfas/PdfAsFactory.java index 6ec16f1..ceaae85 100644 --- a/src/main/java/at/gv/egiz/pdfas/PdfAsFactory.java +++ b/src/main/java/at/gv/egiz/pdfas/PdfAsFactory.java @@ -9,6 +9,7 @@ import at.gv.egiz.pdfas.api.PdfAs;  import at.gv.egiz.pdfas.api.exceptions.PdfAsException;
  import at.gv.egiz.pdfas.impl.api.PdfAsObject;
  import at.knowcenter.wag.egov.egiz.PdfAS;
 +import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
  /**
   * Main factory for creating a PDF-AS API Instance (PdfAs Interface).
 @@ -24,7 +25,8 @@ public class PdfAsFactory      * 
      * @param workDirectory
      *          The work directory. If <code>null</code> the configuration is assumed to be located
 -    *          within the user's home directory.
 +    *          within the user's home directory. Note: IAIK JCE and IAIK ECC security provders are
 +    *          automatically registered.
      * 
      * @return Returns an instance of the PDF-AS API.
      * @throws IllegalArgumentException
 @@ -36,12 +38,35 @@ public class PdfAsFactory      */
     public static PdfAs createPdfAs(File workDirectory) throws PdfAsException
     {
 -     return new PdfAsObject(workDirectory);
 +      return createPdfAs(workDirectory, SettingsReader.REGISTER_IAIK_PROVIDERS_ON_DEFAULT);
 +   }
 +   
 +   /**
 +    * Creates a PDF-AS API instance for the given work directory.
 +    * 
 +    * @param workDirectory
 +    *          The work directory. If <code>null</code> the configuration is assumed to be located
 +    *          within the user's home directory.
 +    * 
 +   * @param registerProvider <code>true</code>: automatically registers IAIK JCE and ECC Provider;
 +   * <code>false</code>: providers will NOT be automatically registered, providers
 +   * needed have to be registered by the API user 
 +    * @return Returns an instance of the PDF-AS API.
 +    * @throws IllegalArgumentException
 +    *           Thrown, if the workDirectory doesn't exist.
 +    * @throws PdfAsException
 +    *           Thrown, if the work directory does not meet its requirements, or
 +    *           if the config file is invalid.
 +    * @see PdfAS#USERHOME_CONFIG_FOLDER          
 +    */
 +   public static PdfAs createPdfAs(File workDirectory, boolean registerProvider) throws PdfAsException
 +   {
 +     return new PdfAsObject(workDirectory, registerProvider);
     }
     /**
      * Creates a PDF-AS API instance assuming that the configuration is located within the user's
 -    * home directory.
 +    * home directory. Note: IAIK JCE and IAIK ECC security providers are automatically registered.
      * 
      * @return Returns an instance of the PDF-AS API.
      * @throws IllegalArgumentException
 @@ -53,7 +78,27 @@ public class PdfAsFactory      */
     public static PdfAs createPdfAs() throws PdfAsException
     {
 -     return createPdfAs(null);
 +      return createPdfAs(null);
 +   }
 +   
 +   /**
 +    * Creates a PDF-AS API instance assuming that the configuration is located within the user's
 +    * home directory.
 +    * 
 +    * @return Returns an instance of the PDF-AS API.
 +    * @param registerProvider <code>true</code>: automatically registers IAIK JCE and ECC Provider;
 +    * <code>false</code>: providers will NOT be automatically registered, providers
 +    * needed have to be registered by the API user 
 +    * @throws IllegalArgumentException
 +    *           Thrown, if the work directory doesn't exist within the user's home directory.
 +    * @throws PdfAsException
 +    *           Thrown, if the work directory does not meet its requirements, or
 +    *           if the config file is invalid.
 +    * @see PdfAS#USERHOME_CONFIG_FOLDER          
 +    */
 +   public static PdfAs createPdfAs(boolean registerProvider) throws PdfAsException
 +   {
 +     return createPdfAs(null, registerProvider);
     }
  }
 diff --git a/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java b/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java index 2ccc1b7..e94acfd 100644 --- a/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java +++ b/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java @@ -81,6 +81,7 @@ public class PdfAsObject implements PdfAs    /**
     * This constructor is for internal use only - use
     * {@link at.gv.egiz.pdfas.PdfAsFactory} instead.
 +   * Note: IAIK JCE and IAIK ECC security providers are automatically registered.
     * 
     * @param workDirectory
     *          The work directory.
 @@ -89,14 +90,32 @@ public class PdfAsObject implements PdfAs     */
    public PdfAsObject(File workDirectory) throws PdfAsException
    {
 -     String path = workDirectory != null ? workDirectory.getPath() : null;
 +     this(workDirectory, SettingsReader.REGISTER_IAIK_PROVIDERS_ON_DEFAULT);
 +  }
 +  
 +  /**
 +   * This constructor is for internal use only - use
 +   * {@link at.gv.egiz.pdfas.PdfAsFactory} instead.
 +   * 
 +   * @param workDirectory
 +   *          The work directory.
 +   * @param registerProvider <code>true</code>: automatically registers IAIK JCE and ECC Provider;
 +   * <code>false</code>: providers will NOT be automatically registered, providers
 +   * needed have to be registered by the API user 
 +   * @throws PdfAsException
 +   *           Thrown, if the configuration cannot be processed.
 +   */
 +  public PdfAsObject(File workDirectory, boolean registerProvider) throws PdfAsException
 +  {
 +    String path = workDirectory != null ? workDirectory.getPath() : null;
      SettingsReader.initialize(path, path);
 -    reloadConfig();
 +    reloadConfig(registerProvider);
    }
    /**
     * This constructor is for internal use only - use
     * {@link at.gv.egiz.pdfas.PdfAsFactory} instead.
 +   * Note: IAIK JCE and IAIK ECC security providers are automatically registered.
     * 
     * @throws PdfAsException
     *           Thrown, if the configuration cannot be processed.
 @@ -112,7 +131,20 @@ public class PdfAsObject implements PdfAs    public void reloadConfig() throws PdfAsException
    {
       ConfigUtils.initializeLogger();
 -    SettingsReader.createInstance();
 +     SettingsReader.createInstance();
 +     SignatureTypes.createInstance();
 +  }
 +  
 +  /**
 +   * @param registerProvider <code>true</code>: automatically registers IAIK JCE and ECC Provider;
 +   * <code>false</code>: providers will NOT be automatically registered, providers
 +   * needed have to be registered by the API user 
 +   * @see at.gv.egiz.pdfas.api.PdfAs#reloadConfig()
 +   */
 +  private void reloadConfig(boolean registerProvider) throws PdfAsException
 +  {
 +    ConfigUtils.initializeLogger();
 +    SettingsReader.createInstance(registerProvider);
      SignatureTypes.createInstance();
    }
 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 c85513c..f4c28c7 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 @@ -28,12 +28,12 @@ import java.io.FileInputStream;  import java.io.IOException;
  import java.io.InputStream;
  import java.io.Serializable;
 +import java.security.Security;
  import java.util.ArrayList;
  import java.util.Enumeration;
  import java.util.Properties;
  import java.util.Vector;
 -import org.apache.commons.io.IOUtils;
  import org.apache.commons.lang.StringUtils;
  import org.apache.commons.lang.text.StrSubstitutor;
  import org.apache.commons.logging.Log;
 @@ -147,6 +147,8 @@ public class SettingsReader implements Serializable     * internal help file
     */
    private static final String HELP_TEXT_PROP_RESOURCE = "/config/help_text.properties";
 +  
 +  public static final boolean REGISTER_IAIK_PROVIDERS_ON_DEFAULT = true;
  //  /**
  //   * The web application path
 @@ -319,7 +321,8 @@ public class SettingsReader implements Serializable     * This method returns an synchronized instance of this class. The settings
     * file is read only once using this class. This method returns the instance
     * holding the definitions of the default settings file. Default file:
 -   * {@link SettingsReader#CONFIG_FILE_DEFAULT_NAME}: "settings.txt"
 +   * {@link SettingsReader#CONFIG_FILE_DEFAULT_NAME}: "settings.txt".
 +   * Note: IAIK JCE and IAIK ECC security providers are automatically registered.
     * 
     * @return an instance of the SettingsReader
     * @throws SettingsException
 @@ -335,14 +338,32 @@ public class SettingsReader implements Serializable     * 
     * <p>
     * Subsequent calls to getInstance will return the new settings.
 +   * Note: IAIK JCE and IAIK ECC security providers are automatically registered.
     * </p>
     * 
     * @throws SettingsException f.e.
     */
 -  public synchronized static void createInstance () throws SettingsException
 +  public synchronized static void createInstance() throws SettingsException
 +  {
 +     instance_ = null;
 +     getInstance();
 +  }
 +  
 +  /**
 +   * Reloads the Settings file.
 +   * 
 +   * <p>
 +   * Subsequent calls to getInstance will return the new settings.
 +   * </p>
 +   * @param registerProvider <code>true</code>: automatically registers IAIK JCE and ECC Provider;
 +   * <code>false</code>: providers will NOT be automatically registered, providers
 +   * needed have to be registered by the API user 
 +   * @throws SettingsException f.e.
 +   */
 +  public synchronized static void createInstance(boolean registerProvider) throws SettingsException
    {
      instance_ = null;
 -    getInstance();
 +    getInstance(null, registerProvider);
    }
    /**
 @@ -361,33 +382,75 @@ public class SettingsReader implements Serializable     * 
     * @param settingsFile
     *          the settings file that should be load.
 +   * @param registerProvider <code>true</code>: automatically registers IAIK JCE and ECC Provider;
 +   * <code>false</code>: providers will NOT be automatically registered, providers
 +   * needed have to be registered by the API user 
     * @return an instance of the SettingsReader
     * @throws SettingsException
     *           if the settings file could not be read
     */
 -  private synchronized static SettingsReader getInstance(String settingsFile) throws SettingsException
 +  private synchronized static SettingsReader getInstance(String settingsFile, boolean registerProvider) throws SettingsException
    {
 -    if (instance_ == null)
 -    {
 -       int length = Utils.max(new int[] { RESOURCES_PATH.length(), TMP_PATH.length(), CONFIG_PATH.length(), CERT_PATH.length() });
 -       
 -       logger_.info(StringUtils.repeat("*", length + 25));
 -       logger_.info(" resources path     = \"" + RESOURCES_PATH + "\"");
 -       logger_.info(" configuration path = \"" + CONFIG_PATH + "\"");
 -       logger_.info(" certstore path     = \"" + CERT_PATH + "\"");
 -       logger_.info(" temporary path     = \"" + TMP_PATH + "\"");
 -       logger_.debug(" file.encoding      = \"" + System.getProperty("file.encoding") + "\"");
 -       logger_.info(StringUtils.repeat("*", length + 25));
 -       
 -       IAIK.addAsProvider();
 -       ECCProvider.addAsProvider();
 -       // Does not conform with PKIX, but is used by belgium citizen card
 +     if (instance_ == null)
 +     {
 +        int length = Utils.max(new int[] { RESOURCES_PATH.length(), TMP_PATH.length(), CONFIG_PATH.length(), CERT_PATH.length() });
 +        
 +        logger_.info(StringUtils.repeat("*", length + 25));
 +        logger_.info(" resources path     = \"" + RESOURCES_PATH + "\"");
 +        logger_.info(" configuration path = \"" + CONFIG_PATH + "\"");
 +        logger_.info(" certstore path     = \"" + CERT_PATH + "\"");
 +        logger_.info(" temporary path     = \"" + TMP_PATH + "\"");
 +        logger_.debug(" file.encoding      = \"" + System.getProperty("file.encoding") + "\"");
 +        logger_.info(StringUtils.repeat("*", length + 25));
 +        
 +        if (registerProvider) {
 +           IAIK.addAsProvider();
 +           ECCProvider.addAsProvider();
 +        } else {
 +           if (Security.getProvider("IAIK") == null) {
 +              logger_.debug("Default IAIK JCE provider not registered.");
 +           } else {
 +              logger_.debug("IAIK JCE provider already registered.");
 +           }
 +           if (Security.getProvider("IAIK_ECC") == null) {
 +              logger_.debug("Default IAIK ECC provider not registered.");
 +           } else {
 +              logger_.debug("IAIK ECC provider already registered.");
 +           }
 +        }
 +        // Does not conform with PKIX, but is used by belgium citizen card
  //     log.info("Registering RDN \"SERIALNUMBER\" as " + ObjectID.serialNumber + ".");
 -       RFC2253NameParser.register("SERIALNUMBER", ObjectID.serialNumber);
 -
 -       instance_ = new SettingsReader(settingsFile);
 -    }
 -    return instance_;
 +        RFC2253NameParser.register("SERIALNUMBER", ObjectID.serialNumber);
 +        
 +        instance_ = new SettingsReader(settingsFile);
 +     }
 +     return instance_;
 +  }
 +  
 +  /**
 +   * This method returns an synchronized instance of this class. The settings
 +   * file is read only once using this class. This method returns the instance
 +   * holding the definitions of the settingsFile. If the input param
 +   * <code>settingsFile == null</code> the default settings file will be load.
 +   * Default file: {@link SettingsReader#CONFIG_FILE_DEFAULT_NAME}:
 +   * "settings.txt".
 +   * Note: IAIK JCE and IAIK ECC security providers are automatically registered.
 +   * 
 +   * If an instance of this class exist, the input param is ignored! The
 +   * SettingsReader is singleton and therefore the first
 +   * {@link SettingsReader#getInstance()}defines the settings file that has to
 +   * be loaded. This means changes between a application lifecyle can not be
 +   * done!
 +   * 
 +   * @param settingsFile
 +   *          the settings file that should be load.
 +   * @return an instance of the SettingsReader
 +   * @throws SettingsException
 +   *           if the settings file could not be read
 +   */
 +  private static SettingsReader getInstance(String settingsFile) throws SettingsException
 +  {
 +     return getInstance(settingsFile, REGISTER_IAIK_PROVIDERS_ON_DEFAULT);
    }
    /**
 diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/tools/CodingHelper.java b/src/main/java/at/knowcenter/wag/egov/egiz/tools/CodingHelper.java index bed1cb3..af406b6 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/tools/CodingHelper.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/tools/CodingHelper.java @@ -217,8 +217,7 @@ public class CodingHelper      }
      catch (NoSuchAlgorithmException e)
      {
 -      e.printStackTrace();
 -      return null;
 +      throw new RuntimeException(e);
      }
    }
 | 
