IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Débutant - API Path


Sujet :

avec Java

  1. #21
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    je vais te laisser relire le code...

    mais "blabla" je pense pas que ça soit réellement la valeur correcte à utiliser...

  2. #22
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 98
    Points : 14
    Points
    14
    Par défaut
    Je vois pas par quoi le remplacer

  3. #23
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    ...

    peut-être par child.toAbsolutePath ou du truc du genre non?

  4. #24
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 98
    Points : 14
    Points
    14
    Par défaut
    Mais à quoi / quel fichier fait référence cette ligne ? A quoi sert options.setinfile() ? Parce que pour l'instant je vois toujours pas quoi mettre

  5. #25
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 98
    Points : 14
    Points
    14
    Par défaut
    Sinon j'ai corrigé une autre erreur de mon code, à savoir que je renvoyais filename à la classe BasicSignerOptions alors que je dois renvoyer le chemin entier du nouveau fichier

    Classe test, qui me dit lorsqu'il y a un nouveau fichier dans le répertoire surveiller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    public class test {
     
    	public static void main(String[] args)
    	{
    		// TODO Auto-generated method stub
    try {
     
    		BasicSignerOptions Infiletest = new BasicSignerOptions();     // On appelle la classe basicsigneroptions
    		Path chemin = Paths.get(Infiletest.getInFile());    //on prend le chemin complet du fichier infile
                    Path cheminout = Paths.get(Infiletest.getOutFile());  // on prend le chemin complet du fichier outfile qui viens d'être signer manuellement
     
    		final Path dir = chemin.getParent();        // on prend le répertoire du fichier infile
                    Path dirout = cheminout.getParent();      // on prend le répertoire du fichier outfile
     
    		Path FileIn = Paths.get(dir+ "/" + filename);  // chemin complet du fichier d'entrée
                    Path FileOut = Paths.get(dirout+ "/" + filename);  // chemin complet du fichier de sortie
     
    		WatchService watcher = FileSystems.getDefault().newWatchService();
     
    		WatchKey key = dir.register(watcher,
    	    		StandardWatchEventKinds.ENTRY_CREATE);
     
     
    		for (;;) {
     
     
     
    		    try {
    		        key = watcher.take();
    		    } catch (InterruptedException x) {
    		        return;
    		    }
     
    		    for (WatchEvent<?> event: key.pollEvents()) {
    		        WatchEvent.Kind<?> kind = event.kind();
     
     
    		        WatchEvent<Path> ev = (WatchEvent<Path>)event;
    		        Path filename = ev.context();
                    String type = Files.probeContentType(filename); 
    		        try {
    		            Path child = dir.resolve(filename);
    		            if (!Files.probeContentType(child).equals("application/pdf")) {		          
    		                System.err.format("New file '%s'" +
    		                    " is not a pdf application file.%n", filename);
    		                continue;		               		              
    		           }
    		        } catch (IOException x) {
    		            System.err.println(x);
     
    		            continue;
    		        }
     
     
    		        int eventest = 1;            //On passe la variable eventest à 1 lorsqu'il y a un nouveau fichier
    		        BasicSignerOptions options = new BasicSignerOptions();
    		       options.setInFile(child.toAbsolutePath);		 
    		      SignerLogic sl = new SignerLogic(options);
    		        sl.signFile();                                            //Appel de la classe qui signe les fichiers
     
    		    }
     
    		    boolean valid = key.reset();
    		    if (!valid) {
    		        break;
    		    }
    		}
    } catch (IOException x) {
    	    System.err.println(x);
    	}
     
    }
    	public String FileOut;
    	public String FileIn;
    	public int eventest;                           // Ici on rend les variables public pour les utiliser dans d'autre classe
    }
    Et les modifications de la classe BasicSignerOptions en rouge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    public String getInFile() {
    test Infiletest = new test();
    		String nouveaufichier=Infiletest.FileIn;
    	    int valeur = Infiletest.eventest;
    		if(valeur == 1)
    		{
    			inFile=nouveaufichier;
    		}
    		return inFile;
    	}
    
    	public void setInFile(final String inFile) {
    		this.inFile = inFile;
    	}
    
    	public String getOutFile() {
    		test Infiletest = new test();
    		String fichierprec=Infiletest.FileOut;
    	    int valeur = Infiletest.eventest;
    		if(valeur == 1)
    		{
    			outFile=fichierprec;
    		}
    		return outFile;
    	}
    
    
    	public String getOutFileX() {    //Retourne un autre nom de fichier de sortie s'il n'est pas renseigné
    		String tmpOut = StringUtils.defaultIfBlank(outFile, null);    // vérifie si outFile contient du texte
    		if (tmpOut == null) { // s'il n'en a pas
    			String tmpExtension = "";
    			String tmpNameBase = StringUtils.defaultIfBlank(getInFile(), null);    //vérifie si infile contient du texte
    			if (tmpNameBase == null) {    //s'il n'en a pas
    				tmpOut = "facnor.pdf";
    			} else {    //si outfile n'a pas de texte et que infile en a
    				if (tmpNameBase.toLowerCase().endsWith(".pdf")) {     //si  le nom d'entrée finit par .pdf
    					final int tmpBaseLen = tmpNameBase.length() - 4;
    					tmpExtension = tmpNameBase.substring(tmpBaseLen);
    					tmpNameBase = tmpNameBase.substring(0, tmpBaseLen);    // sur les 3 lignes, on transforme exemple.pdf
    				}                                                                                        // en exemple (extrait le nom seul)
    				tmpOut = tmpNameBase + Constants.DEFAULT_OUT_SUFFIX + tmpExtension;   // le nom de sortit sera le nom 
    			}                                                                                         // de base + une constante + 
    		}                                                                                                 // l'extension soit :
    		return tmpOut;                                                                                      //exemple+_facnor+.pdf
    	}
    
    	public void setOutFile(final String outFile) {
    		this.outFile = outFile;
    J'ai également une question pour la suite, comment faire pour que le main() de ma classe test tourne en continue après qu'un fichier soit signé "manuellement" ?

  6. #26
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 98
    Points : 14
    Points
    14
    Par défaut
    Ou alors la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    options.setInFile(child.toAbsolutePath);
    sert à faire, dans la classe BasicSignerOptions, InFile = child ? Du coup ce que j'ai rajouter en rouge sur mon post précédent ne sert à rien.

    Si c'est ça il faudrait rien modifier dans la classe BasicSignerOptions et dans ma classe test il faut que je fasse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     Path FileOut = Paths.get(dirout+ "/" + filename); //On initialise le fichier de sortie
    		        Path FileIn = Paths.get(dir+ "/" + filename); // On initialise le fichier d'entrée
    		        BasicSignerOptions options = new BasicSignerOptions(); // On appel la classe options
    		        options.setInFile(FileIn.toString()); // On envoie notre chemin d'entrée
    		        options.setOutFile(FileOut.toString()); // Et de sortie
    		        SignerLogic sl = new SignerLogic(options); // On appel la classe pour signer
    		        sl.signFile(); // On signe
    Je me trompe ?

    EDIT :
    Donc j'ai effectué ces modifications, la procédure pour signer fonctionne lorsqu'il y a un nouveau fichier, j'ai renseigné les répertoires manuellement dans ma classe pour l'instant.
    Mais j'ai une erreur qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    INFO  Vérification des chemins des fichiers d'entrée/sortie
    INFO  Lecture de l'alias de la clé
    INFO  Utiliser un alias pour la clé : null
    INFO  Lecture de la clé privée
    ERROR L'application a rencontré un problème.
    java.lang.NullPointerException
    	at sun.security.provider.JavaKeyStore$JKS.convertAlias(JavaKeyStore.java:57)
    	at sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:118)
    	at sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:55)
    	at java.security.KeyStore.getKey(KeyStore.java:1011)
    	at net.sf.jsignpdf.utils.KeyStoreUtils.getPkInfo(KeyStoreUtils.java:428)
    	at net.sf.jsignpdf.SignerLogic.signFile(SignerLogic.java:136)
    	at net.sf.jsignpdf.test.main(test.java:139)
    INFO  Opération terminée. Echec de la signature du fichier PDF.
    Donc je continue à bosser dessus (pas le choix de toute façon :p)

  7. #27
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 98
    Points : 14
    Points
    14
    Par défaut
    Mon erreur précédente était une erreur de // / \ dans les noms de fichiers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    System.out.println("Le fichier est : " + dir+ "\\" + filename ); //Le fichier est : C:\Users\avidegrain\Desktop\repertoire_1\test.pdf
    Path FileOut = Paths.get(dirout+ "\\" + filename);
    System.out.println("Le fichier Out est : " + FileOut); //Le fichier Out est : C:\Users\avidegrain\Desktop\repertoire_2\test.pdf
    Path FileIn = Paths.get(dir+ "\\" + filename);
    System.out.println("Le fichier In est : " + FileIn); //Le fichier In est : C:\Users\avidegrain\Desktop\repertoire_1\test.pdf
    BasicSignerOptions options = new BasicSignerOptions();
    options.setInFile(FileIn.toString()); //BasicSignerOptions.InFile=C:\Users\avidegrain\Desktop\repertoire_1\test.pdf
    options.setOutFile(FileOut.toString()); // BasicSignerOptions.OutFile= C:\Users\avidegrain\Desktop\repertoire_2\test.pdf
    SignerLogic sl = new SignerLogic(options);
    sl.signFile(); //On signe => ECHEC.
    Code d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    INFO  Vérification des chemins des fichiers d'entrée/sortie
    INFO  Lecture de l'alias de la clé
    INFO  Utiliser un alias pour la clé : null
    INFO  Lecture de la clé privée
    ERROR L'application a rencontré un problème.
    java.lang.NullPointerException
    	at sun.security.provider.JavaKeyStore$JKS.convertAlias(JavaKeyStore.java:57)
    	at sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:118)
    	at sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:55)
    	at java.security.KeyStore.getKey(KeyStore.java:1011)
    	at net.sf.jsignpdf.utils.KeyStoreUtils.getPkInfo(KeyStoreUtils.java:428)
    	at net.sf.jsignpdf.SignerLogic.signFile(SignerLogic.java:136)
    	at net.sf.jsignpdf.test.main(test.java:141)
    INFO  Opération terminée. Echec de la signature du fichier PDF.
    Après vérifications avec le debugger, les fichiers Infile et Outfile sont bien "mis à jour" avec le setinfile() et setoutfile(). L'erreur proviendrait donc de la classe SignerLogic et de la méthode signFile().
    Je sais pas pourquoi ça échoue, je vais essayer de trouver. A mon avis on doit "charger" d'autres classes/méthodes avant de lancer la méthode signFile(). Si vous avez une idée, ou si vous pouvez m'aider, hésitez pas :p

Discussions similaires

  1. [débutant] < forward path=A.B.C>
    Par wooky dans le forum Struts 1
    Réponses: 1
    Dernier message: 08/01/2007, 19h19
  2. (Débutant API) Utilisation de Richedit avec les APIs
    Par LibrairieSI dans le forum Windows
    Réponses: 2
    Dernier message: 10/08/2005, 16h53
  3. [Débutant] API WINDOWS pb de linker avec DEV-C++
    Par coolmaxou dans le forum Windows
    Réponses: 3
    Dernier message: 12/07/2005, 09h24
  4. [débutante][API] basculer vers une autre appli en VB6
    Par zazaraignée dans le forum Windows
    Réponses: 7
    Dernier message: 04/06/2004, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo