Développement web avec MAVEN - SRING 2.5 – HIBERNATE


Table des matières

Mise en place de maven. 3

Mise en place SPRING.. 4

Exemple de fichier web.xml 4

Les fichiers de configurations. 6

applicationContext-service.xml 6

formationspring-servlet.xml 7

Mise en place des controllers. 7

Declaration d’un controller. 7

Explication des annotations. 7

Diagramme de séquence simpliste d’appel à un Controller. 8

Spring security. 8

Authentification et autorisation. 8

Mise en place. 11

pom.xml 11

web.xml 11

applicationContext-security.xml 11

La gestion des transactions. 14

Définition d’une Transaction. 14

Overview d’une transaction applicative. 15

Les niveaux d’isolation des transactions. 15

Les modes de propagation des transactions. 17

Mise en place de HIBERNATE. 18

Le fichier applicationContext-hibernate.xml 18

Validation du domaine métier. 20

Contraintes intégrées. 20

Vérification des erreurs. 22

SQL et HQL Injection. 23

Requête paramétrée HQL. 23

Requite paramétrée SQL. 23

AJAX et DWR. 23

Mise en place. 24

pom.xml 24

web.xml 24

dwr.xml 24

Les problèmes d’ENCODING.. 25

DataBase. 25

Hibernate. 25

Spring framework. 25

Velocity et mails. 25

JSP. 26

Géré les paramètres et les exceptions  utilisateurs web inattendues. 26

La gestion des Tests unitaires. 26

Mesurer la couverture de test. 26

Exemple de test d’un controler web : 27

Mesurer les performances. 29

Mise en place “globale” de JAMon. 29

Paramétrer l’application pour définir les éléments dont on souhaite mesurer les temps d’exécution   29

Suivre le temps d’appel aux pages. 30

Suivre le temps d’exécution de certaines méthodes. 30

Suivre le temps d’exécution des requêtes SQL. 31

Le reporting du projet. 31

JDEPEND.. 32

Analyse des métriques de JDEPEND.. 33

PMD.. 33

 

Read the rest of this entry »

PDF/A pourquoi et comment ?

 

Table des matières

Qu’est ce que PDF/A.. 1

Pourquoi PDF/A.. 1

Quelle est la différence entre PDF et PDF/A.. 1

Qu’est ce que PDF/A permet et ne permet pas. 2

Les fichiers PDF/A doivent inclure : 2

Les fichiers PDF/A ne doivent pas inclure. 2

Quels sont les besoins pour une préservation à long terme. 2

Qu’elles sont les considérations sur les Fonts spécifiques. 2

Quand PDF/A devrait être utilisé. 2

Combien de niveaux de conformité avec PDF/A existe-t-il 3

Est-ce que PDF/A supporte les signatures numériques. 3

Quelques éditeurs actuels supportant PDF/A.. 3

Ou trouver la référence du format PDF/A.. 4

 

Qu’est ce que PDF/A

ISO 19005-1, Gestion de documents - Format de fichier des documents électroniques pour la préservation à long terme - Partie 1: Utilisation du PDF 1.4 (PDF/A-1) est le premier d’une nouvelle famille de normes ISO applicables à la nécessité croissante de maintenir l’information dans l’archivage des documents électroniques sur des périodes de temps.

 

Pourquoi PDF/A

Certaine fonctionnalité riche du format PDF peuvent créer des difficultés dans la préservation de l’information à long terme, et certaines fonctionnalités utiles du format PDF sont incompatibles avec les exigences de la préservation à long terme.

Par exemple, les documents PDF ne contiennent pas nécessairement en leur sein, les polices du système et d’autres contenus comme des images et des vidéos qui peuvent êtres stockés à l’extérieur du fichier d’origine.

Plus le temps passe plus la technologie change, Les connexions avec les contenus externes peuvent être rompu, et les dépendances perdue.

En outre, en raison du manque de standardisation entre les nombreux outils de développement PDF sur le marché, il ya une incohérence dans la mise en œuvre du format de fichier.

Cette absence de normalisation pourrait être chaotique pour les gestionnaires de l’information de l’avenir, d’autant plus que Il serait difficile (voire impossible) pour elles de mettre les mains «sous le capot» des fichiers PDF à moins qu’une spécification de format ait été mises en place traitant de la préservation à long terme des besoins.


D’énormes quantités d’informations précieuses sont actuellement créés et sauvegardés dans le monde entier au format PDF, et une spécification de la solution est nécessaire pour s’assurer que les documents PDF numériques restent lisibles, et accessible pour le long terme.

PDF / A est conçu pour être cette spécification.

 

Quelle est la différence entre PDF et PDF/A

Le PDF/A-1 (ISO 19005-1:2005) standard est basé sur la spécification Adobe PDF 1,4, et précise comment utiliser un sous-ensemble de composants PDF.

PDF/A-1 vise à préserver l’apparence visuelle statique de documents électroniques au fil du temps et vise aussi à favoriser l’accès futur et l’avenir des migrations si besoins en fournissant des cadres pour:

L’insertion de métadonnées sur les documents électroniques

La définition de la structure logique et sémantique Propriétés de documents électroniques. Le résultat est un format de fichier, basé sur PDF 1,4 qui est mieux adapté à la préservation à long terme.

Les fichiers PDF/A-1 seront plus autonomes, ils seront ‘auto-décrits.

 

Qu’est ce que PDF/A permet et ne permet pas

 

Les fichiers PDF/A doivent inclure :

· Embarqués les polices constituant le document

· Dispositif décrivant la couleur

· Métadonnées XMP

 

Les fichiers PDF/A ne doivent pas inclure

· Encryption

· LZW compression

· Fichiers embarqués

· Références à des contenus externes

· Transparence PDF

· Multi-média

· JavaScript

 

Quels sont les besoins pour une préservation à long terme

1. Indépendant du périphérique - Obtenir un rendu sans tenir compte de la plate-forme matériel ou logiciels.

2. Auto-contenu - Il contient toutes les ressources nécessaires pour le rendu

3. Auto documenté-Contient sa propre description

4. Débridée - Absence de mécanismes de protection dossier technique

5. Disponible - Spécification rendu public

6. Adoption – La généralisation de l’usage est le meilleur moyen contre les risques.

 

Qu’elles sont les considérations sur les Fonts spécifiques


Beaucoup de polices de caractères ont des restrictions concernant l’utilisation, l’inclusion et l’échange. PDF / A requiert que les polices soient embarquées. Par conséquent, les organisations utilisant PDF/A-1 doit prendre des précautions supplémentaires pour être sûr que les polices qu’ils utilisent procurent une licence permettant l’inclusion dans les documents.

 

Quand PDF/A devrait être utilisé

PDF / A doit être utilisé comme un moyen de normaliser l’utilisation de PDF pour les documents électroniques nécessitant un stockage et de veiller à ce que ces documents soient disponibles dans l’avenir.

Ceci est important pour soutenir les besoins des entreprises qui requièrent un rendu fiable de documents électroniques sur le long terme.

Comme pour une spécification de format de fichier, les utilisateurs devront créer leur propre méthodologie répondant à leurs besoins spécifique en fonction de des politiques et des procédures (par exemple, de fiabilité, d’intégrité, de respect, d’exhaustivité).

Par exemple, pour archiver en PDF, les agences fédérales américaines doivent appliquer PDF/A-1 en conjonction avec des exigences supplémentaires identifiées par la National Archives and Records Administration (NARA).http://www.archives.gov/records_management/initiatives/pdf_records.html.

Il est important de savoir que:
• PDF/A-1 elle seule ne garantit pas la préservation
• PDF/A-1 lui seul ne garantit pas l’exacte reproduction de matériel d’origine

 

Combien de niveaux de conformité avec PDF/A existe-t-il

PDF/A-1 supporte deux niveaux de conformité afin de promouvoir la création de fichiers PDF/A-1

Un niveau pour les fichiers possédant des informations sémantiques et structurelles riches, et un niveau pour les fichiers moins complexes tels que des images numérisées.

Les deux niveaux de conformité sont désignés comme étant de niveau A et de niveau B.


• PDF/A-1a - conformité de niveau 1 bis doit adhérer à toutes les exigences de la spécification PDF, telle que modifiée par la norme ISO 19005 exigant que les propriétés structurelles et sémantiques doivent être préservés. Niveau 1 bis utilise “Tagged PDF” et caractères Unicode cartes afin de préserver la structure logique du document et des flux de texte contenu dans l’ordre naturel de lecture. Pour certaines applications, les utilisateurs peuvent avoir besoin d’utiliser un visualiseur PDF/A-1 conforme afin de profiter au maximum des métadonnées embarquées.

• PDF/A-1b - conformité de niveau 1b. Les exigences minimales nécessaires pour assurer l’apparence visuelle des documents électroniques. Niveau 1 bis, préserve la structure du document. Ce qui permet au consommateur du document archivé de visualiser et manipuler le document comme ci ce dernier état l’original.

 

Est-ce que PDF/A supporte les signatures numériques

Oui, PDF/A-1 permet l’utilisation de signatures numériques embarqués en PDF tels que définis dans le Manuel de référence PDF.

Parce que les signatures numériques PDF incluent un aspect visuel, l’apparence doit se conformer à toutes les exigences de PDF/A-1 y compris l’utilisation et l’incorporation de police indépendantes

La plupart des outils du commerce ne respectent pas ces recommandations

 

Quelques éditeurs actuels supportant PDF/A

Adobe Systems Inc. – www.adobe.com

Apago – www.apagoinc.com

Visioneer – www.visioneer.com

Callas - www.callassoftware.com

Compart Systemhaus GmbH – www.compart.net

PDF Tools AG – www.pdf-tools.com

Certains outils de bureautiques (OpenOffice 2.4) permettent aujourd’hui de générer du PDF/A

 

Ou trouver la référence du format PDF/A

http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38920&I

CS1=37&ICS2=100&ICS3=99

 

D’autres Formats pour l’archivage long terme

 

Open document

· Format: OpenDocument (ODF)

· Fichier Zip fondé sur un schéma XML unique

· Format défini indépendamment de tout éditeur

· Specifications soumises à l’ISO par l’OASIS (Organization for the Advancement of Structured Information Standards)

· Adoption OASIS en Mai 2005

· Fondé sur la grammaire Relax NG

· OpenDocument est approuvé par Sun, IBM, Adobe

· Adopté par Open Office, OpenDocument devrait être adopté par les suite bureautique de Corel et d’IBM

 

Microsoft Open XML

· Fichiers XML reposant sur une bibliothèque de schémas XML

· Extensions: .docx .xlsx .pptx …

· Spécifications soumises à l’ISO par l’ECMA(European Computers Manufacturers Association)

· L’ECMA considère une norme comme un ensemble de procédés documentés et interopérables

· Fondé sur la grammaire des schémas XSD

· OpenOffice pourra manipuler librement Open XML

· Contrat de licence autorisant la mise en oeuvre libre et gratuite

· Microsoft reste propriétaire et Office Open XML n’est pas Open Source

Envoyer un mail avec PL/SQL

Petit exemple vous permettant d’envoyer un email à partir
de votre base ORACLE.

CREATE OR REPLACE PROCEDURE ENVOI_MAIL AS
BEGIN
DECLARE
   l_mailhost    VARCHAR2(64) := ’smtp.monrelais.fr’;
   l_from        VARCHAR2(64) := ‘moi@monrelais.fr’;
   l_subject     VARCHAR2(64) := ‘Un petit sujet’;
   l_to          VARCHAR2(32767) := ‘toi@monrelais.fr’;
   l_mail_conn   UTL_SMTP.connection;
   nbError       NUMBER(10) := 0;
   l_dest_tmp   VARCHAR2(32767);
BEGIN
   l_mail_conn := UTL_SMTP.open_connection(l_mailhost, 25);
   UTL_SMTP.helo(l_mail_conn, l_mailhost);
   UTL_SMTP.mail(l_mail_conn, l_from);
   WHILE INSTR(l_to, ‘,’) != 0 LOOP
      l_dest_tmp := SUBSTR(l_to, 1, INSTR(l_to, ‘,’) - 1);
      l_to     := SUBSTR(l_to, INSTR(l_to, ‘,’) + 1);
      UTL_SMTP.rcpt(l_mail_conn, l_dest_tmp);
   END LOOP;
   UTL_SMTP.rcpt(l_mail_conn, l_to);
   UTL_SMTP.open_data(l_mail_conn);
   UTL_SMTP.write_data(l_mail_conn, ‘Date: ‘ || TO_CHAR(SYSDATE, ‘DD-MON-YYYY HH24:MI:SS’) || CHR(13)|| CHR(10));
   UTL_SMTP.write_data(l_mail_conn, ‘From: ‘ || l_from || CHR(13)|| CHR(10));
   UTL_SMTP.write_data(l_mail_conn, ‘Subject: ‘ || l_subject || CHR(13)|| CHR(10));
   UTL_SMTP.write_data(l_mail_conn, ‘To: ‘ || l_to || CHR(13)|| CHR(10));
   UTL_SMTP.write_data(l_mail_conn, ‘le corps du mail contenant de données’ || CHR(13)|| CHR(10));
   UTL_SMTP.write_data(l_mail_conn, || CHR(13)|| CHR(10));
   – on itere sur les resultat et rajoutons les valeurs dans le corp du mail
   FOR fields IN
   (
      SELECT
         FIELD_1
      FROM
         MA_TABLE
   )LOOP
      UTL_SMTP.write_data(l_mail_conn, fields.FIELD_1 || CHR(13)|| CHR(10));
    END LOOP;
    UTL_SMTP.close_data(l_mail_conn);
    UTL_SMTP.quit(l_mail_conn);
 END;
END ENVOI_MAIL;

Créer un fichier CSV avec PL/SQL

déclarer un répertoire sur votre base correspondant a un path du systeme hébergeant ORACLE
cela correspondra a l’endroit ou votre fichier sera enregistré.

CREATE OR REPLACE directory TMP AS ‘/home/db/user1′;

et l’exemple de procédure

CREATE OR REPLACE PROCEDURE QUERY_TO_CSV AS
BEGIN
DECLARE
f_file_id UTL_FILE.FILE_TYPE;
v_file_location VARCHAR2(256) := ‘TMP’;
v_line VARCHAR2(4000);
BEGIN
DBMS_OUTPUT.put_line(v_file_location);
f_file_id := UTL_FILE.FOPEN(v_file_location,‘export.csv’,‘w’);
UTL_FILE.PUT_LINE(f_file_id,‘FIELD_1,FIELD_2,FIELD_3,FIELD_4,FIELD_5′);
FOR fields IN
(
SELECT
   FIELD_1,
   FIELD_2,
   FIELD_3,
   FIELD_4,
   FIELD_5
FROM
   MA_TABLE
)LOOP
UTL_FILE.PUT_LINE(f_file_id,fields.FIELD_1||‘,’||fields.FIELD_2||‘,’||fields.FIELD_3||‘,’||fields.FIELD_4||‘,’||fields.FIELD_5);
UTL_FILE.FCLOSE (f_file_id);
UTL_FILE.FCLOSE_ALL;
END LOOP;
END;
END QUERY_TO_CSV;

Workflow et Gestion de flux

L’objectif est d’appréhender les concepts du workflow, pour ce faire nous allons implémenter un petit projet de test permettant de comprendre les principes.

Pour le projet nous nous appuieront sur les outils suivants: spring, hibernate,jdom et groovy et comme d’habitude le projet maven sera téléchargeable à la fin du tutoriel.

wikipedia : Un workflow est un flux d’informations au sein d’une organisation, comme par exemple la transmission automatique de documents entre des personnes.

On appelle « workflow » (traduisez littéralement « flux de travail ») la modélisation et la gestion informatique de l’ensemble des tâches à accomplir et des différents acteurs impliqués dans la réalisation d’un processus métier (aussi appelé processus opérationnel ou bien procédure d’entreprise). Le terme de « workflow » pourrait donc être traduit en français par « gestion électronique des processus métier ».

De façon plus pratique, le workflow décrit le circuit de validation, les tâches à accomplir entre les différents acteurs d’un processus, les délais, les modes de validation, et fournit à chacun des acteurs les informations nécessaires pour la réalisation de sa tâche.

Le moteur de workflow est le dispositif logiciel permettant d’exécuter une ou plusieurs définitions de workflow. Par abus de langage, on peut appeler ce dispositif logiciel tout simplement “workflow”.

Présentation du Projet

Pour notre projet de test nous allons aborder les concepts suivants : tache,fonction,transition,context d’execution. Je met de côté volontairement la partie gestion des droits et habilitations des utilisateurs pour éviter de complexifier le model.

exemple de flux

flux.jpg

le workflow est composé de tache et de transition, un contexte d’exécution est transporté tout au long du processus, ce dernier peut être modifié par les taches, et les transitions pourront accéder à ce contexte, chaque transition est évalué et permet de définir le chemin a suivre dans le flux.

Read the rest of this entry »

Extraire les liens d’une page web, htmlparser lib

exemple d’utilisation de la lib htmlparser pour extraire les liens d’une page web, ca peut servir dans la mise en place d’un petit spider bot ou tout autre chose, à vous de voir.

import java.net.URL;
import java.util.Vector;
import org.htmlparser.beans.StringBean;
import org.htmlparser.tags.LinkTag;
public class ExtractLink {
    static org.htmlparser.beans.LinkBean lb = null;
    static Vector visitedPage = new Vector();

    public static void main(String[] args){
            extractLink("http://www.yahoo.fr");
    }
    public static void extractLink(String url){
        new LinkTag().setMailLink(true);
        System.err.println("extractLink");
        lb = new org.htmlparser.beans.LinkBean();
        lb.setURL (url);

        URL[] urls = lb.getLinks ();
        for (int i = 0; i < urls.length; i++){
            System.out.println (urls[i]);
        }
    }
    public static void extractString(String url){
      StringBean sb = new StringBean ();
      sb.setLinks (false);
      sb.setReplaceNonBreakingSpaces (true);
      sb.setCollapse (true);
      sb.setURL (url); // the HTTP is performed here
      String s = sb.getStrings ();
      System.out.println(s);
    }
}

Groovy SQL

Petit exemple permettant d’effectuer une query sql et d’iterer sur les résultat pour en afficher le contenu

this.class.classLoader.rootLoader.addURL( new URL("file:////repository/mysql/mysql-connector-java/5.1.5/mysql-connector-java-5.1.5.jar"))
import groovy.sql.Sql
def driver="com.mysql.jdbc.Driver";
def sql = Sql.newInstance("jdbc:mysql://localhost:3306/workflow", "login","password", driver)
sql.eachRow("SELECT * FROM MA_TABLE", { println it.FIELD1+ " -- ${it.FIELD2} --"} );

Groovy graph

Générer un Graph avec groovy

//Permet d'ajouter au path les lib nécessaire a groovy
this.class.classLoader.rootLoader.addURL( new URL("file:////home/ubuntu/Documents/swingxbuilder-0.1.5.jar") )

this.class.classLoader.rootLoader.addURL( new URL("file:////home/ubuntu/Documents/projets java/lib/swingx/dist/swingx-0.9.1.jar"))

this.class.classLoader.rootLoader.addURL( new URL("file:////home/ubuntu/Documents/projets java/lib/batik-1.7/batik.jar"))

import groovy.swing.SwingXBuilder.*

import org.jdesktop.swingx.*

import groovy.swing.*

import java.awt.Color

def swing = new SwingXBuilder()

def frame = swing.frame(size:[300,300]) {
                                            graph(plots:[[Color.GREEN, {value -> Math.sin(value)}],
                                                              [Color.BLUE, { value -> Math.cos(value)}]
                                                        ])
                                        }.show()

Cryptographie java, les certificats X509

Bon pour ce soir on vas voir la création de certificats X509 et leur sauvegarde dans un keystore.

wikipedia : Un certificat électronique est une carte d’identité numérique dont l’objet est d’identifier une entité physique ou non-physique. Le certificat numérique ou électronique est un lien entre l’entité physique et l’entité numérique (Virtuel). L’autorité de certification fait foi de tiers de confiance et atteste du lien entre l’identité physique et l’entité numérique. Le standard le plus utilisé pour la création des certificats numérique est le X.509.

Il existe 4 types de certificats en fonction du niveau de sécurité:

  • classe 1: adresse e-mail du demandeur requise;
  • classe 2: preuve de l’identité requise (photocopie de carte d’identité par exemple);
  • classe 3: présentation physique du demandeur obligatoire.
  • classe 3+: identique à la classe 3, mais le certificat est stocké sur un support physique (clé USB à puce, ou carte à puce; exclut donc les certificats logiciels)

Tel qu’on l’utilise en cryptographie et en sécurité informatique, un certificat électronique est un bloc de données contenant, dans un format spécifié, les parties suivantes :

  • un numéro de série;
  • l’identification de l’algorithme de signature;
  • la désignation de l’autorité de certification émettrice du certificat;
  • la période de validité au-delà de laquelle il sera suspendu ou révoqué;
  • le nom du titulaire de la clé publique;
  • l’identification de l’algorithme de chiffrement et la valeur de la clé publique constitué d’une paire de clés asymétriques (comme par exemple RSA);
  • des informations complémentaires optionnelles;
  • l’identification de l’algorithme de signature et la valeur de la signature numérique.

Voila pour la définition, il faut savoir qu’au sein du kesytore nous pouvons stocker un certificat avec sa clef publique et y associer sa clef privé afin de pouvoir l’exploiter dans le cadre de la signature électronique ou de l’encryption de documents.

Il est important de noter aussi qu’en fonction de l’usage prévu pour un certificat (horodatage, signature de code, authentification server, email etc…) il est nécessaire de le spécifier, voir exemple 4 de cet article -> création d’un certificat permettant la création de jeton d’horodatage.

Nous allons donc créer notre paire de clefs public / privé, notre certificat et l’ajouter à notre keystore

1 Création de la paire de clefs

    public static KeyPair generateKeyPair() throws CryptoException
    {
        try {
            KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
            SecureRandom rand = SecureRandom.getInstance("SHA1PRNG");
            keyPairGen.initialize(2048, rand);
            KeyPair keyPair = keyPairGen.generateKeyPair();

            return keyPair;
        }
        catch (NoSuchAlgorithmException ex) {
            throw new CryptoException("Probleme lors de la création de la pair de clef : "+ex.getMessage());
        }
        catch (InvalidParameterException ex) {
            throw new CryptoException("Probleme lors de la création de la pair de clef : "+ex.getMessage());
        }
    }

2 Creation du certificat de type X509 V1

Read the rest of this entry »

Cryptographie java, les keystores

Bien hier nous avons vu comment générer des clef symétrique AES et des clefs asymétriques RSA et comment les utiliser pour réaliser un cryptage décryptage avec ces clefs.

Ce soir nous allons aborder la gestion des keystores (création, sauvegarde, chargement, ajout de certificat), les keystore servent à stocker vos certificats et clefs, pour l’exemple on ne traite que les keystores PKCS#12

wikipedia : Les PKCS (Public Key Cryptographic Standards), ou standards de cryptographie à clé publique, sont un ensemble de spécifications conçues par les laboratoires RSA en Californie. La société RSA Security est spécialisée dans les solutions de sécurité cryptographiques. Elle est également propriétaire de licences d’exploitations de plusieurs algorithmes (dont RSA avant l’expiration de son brevet le 21 septembre 2000). C’est pour ces raisons que la société a développé et promu les PKCS, permettant l’implantation des techniques de cryptographie à clé publique.

La société RSA Security n’est pas un organisme de normalisation et contrôle complètement l’élaboration et l’évolution des PKCS. L’appellation des PKCS comme standards au sens strict est donc abusive. Répondant à un réel besoin technique, les PKCS ont néanmoins été très largement adoptés par le milieu informatique. Le groupe de travail PKIX de l’IETF a depuis reformulé certains des PKCS dans des RFC, les standards Internet. L’abus de langage confondant le PKCS au lieu de la RFC correspondante est très répandu.

CS#12 1.0 Standard de syntaxe d’information personnelle Définit un format de fichier généralement utilisé pour stocker la clé privée et le certificat de clé publique correspondant en les protégeant par un mot de passe.

1 Créer un keystore de manière programmatique

    public static KeyStore createKeyStorePKCS12() throws CryptoException{
        try {
            KeyStore keyStore = null;
            keyStore = KeyStore.getInstance("PKCS12", "BC");
            keyStore.load(null, null);
            return keyStore;
        } catch (IOException ex) {
            Logger.getLogger(KeyStoreUtil.class.getName()).log(Level.SEVERE, null, ex);
            throw new CryptoException("Problème IO : "+ex.getMessage());
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(KeyStoreUtil.class.getName()).log(Level.SEVERE, null, ex);
            throw new CryptoException("Problème d'algo : "+ex.getMessage());
        } catch (CertificateException ex) {
            Logger.getLogger(KeyStoreUtil.class.getName()).log(Level.SEVERE, null, ex);
            throw new CryptoException("Problème de certificat : "+ex.getMessage());
        } catch (KeyStoreException ex) {
            Logger.getLogger(KeyStoreUtil.class.getName()).log(Level.SEVERE, null, ex);
            throw new CryptoException("Problème sur le keystore : "+ex.getMessage());
        } catch (NoSuchProviderException ex) {
            Logger.getLogger(KeyStoreUtil.class.getName()).log(Level.SEVERE, null, ex);
            throw new CryptoException("Problème de provider : "+ex.getMessage());
        }
    }

Read the rest of this entry »