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

Java Discussion :

Problème de chargement d'une classe


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 72
    Points : 52
    Points
    52
    Par défaut Problème de chargement d'une classe
    Bonjour,

    Je suis actuellement en train d'étudier la sécurité Java et j'essaye, dans ce cadre, de charger une classe Java à travers le net.

    J'ai à l'adresse http://kuroro72.free.fr/PTrans/ ma classe Test.java dont voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Test{
     
    	private int nb=1985;
     
    	public int getNb(){
    		return nb;}
    }
    Pour le moment je ne me soucis pas des packages.

    J'essaye maintenant de charger dans une application cette classe grâce à un URLClassLoader. Il arrive bien à me trouver le fichier (résultat de la fonction findResource()) mais le chargement renvoi une erreur.

    Voici le code de mon application

    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
     
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URL;
    import java.net.URLClassLoader;
     
    public class TestExec {
     
    	public static void main(String[] args) throws IOException, ClassNotFoundException{
     
                    MonSecuManager mm = new MonSecuManager();
    		System.setSecurityManager(mm);
     
    		URL[] url = new URL[1];
    		url[0]=new URL("http://kuroro72.free.fr/PTrans/");
    		URLClassLoader ucl = URLClassLoader.newInstance(url);
    		URL u = ucl.findResource("Test.java");
    		System.out.println(u);
    		Class c = ucl.loadClass("Test.java");
    	}
     
    }
    Et la liste des exceptions lancées

    Exception in thread "main" java.lang.ClassNotFoundException: Test.java
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.net.FactoryURLClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at testSecurityMangager.TestExec.main(TestExec.java:33)

    J'ai dabord pensé que ma classe n'était pas chargeable car elle venait du net (classe non fiable) et donc que le SecurityManager de Java n'autorisait pas son chargement. Cependait même en surchargeant cette classe, je n'arrive toujours pas à obtenir son chargement.

    Si quelqu'un pouvait m'aider je le remercierai grandement.

    PS: voici mon code de mon security manager

    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
     
    package testSecurityMangager;
     
    import java.io.FilePermission;
    import java.security.Permission;
     
    import sun.security.util.SecurityConstants;
     
    public class MonSecuManager extends SecurityManager{
     
    	public MonSecuManager(){
    		super();
    	}
     
    	public void checkCreateLoader(){
    	}
     
    	public void checkExec(String cmd){
    	}
     
    	public void checkPermission(Permission p){
    	}	
     
    	public void checkAccess(Thread g){
    	}		
     
    	public void checkAccess(ThreadGroup g){
    	}	
     
    	public void checkDelete(String file) {
    	}
     
    	public void checkRead(String file) {
    	}	
     
    	public void checkWrite(String file) {
    	}		
    }
    Cela revient a autoriser la pluspart des actions sur mon application

  2. #2
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Hello,

    A tout hasard, la classe c'est pas "Test.java" mais "Test" !

    ++

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 72
    Points : 52
    Points
    52
    Par défaut betise quand tu nous tiens
    Merci natha pour ta réponse cela m'a montré ma bétise.

    Le problème venait que j'ai mis sur le site le .java et non le .class

    Or tout le monde le sait on charge les .class et non le reste

    J'avoue je suis impardonnable la dessus

    Merci encore a toi natha sinon je serais resté longtemps la dessus

    PS: et donc faut bien mettre .loadClass("Test")

  4. #4
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 457
    Points : 484
    Points
    484
    Par défaut
    Je confirme la réponse de natha.

    Voici la doc de la méthode loadClass(String name)
    Citation Envoyé par Javadoc
    Loads the class with the specified binary name.
    Et la définition d'un Binary name:
    Citation Envoyé par Javadoc
    Any class name provided as a String parameter to methods in ClassLoader must be a binary name as defined by the Java Language Specification.

    Examples of valid class names include:

    "java.lang.String"
    "javax.swing.JSpinner$DefaultEditor"
    "java.security.KeyStore$Builder$FileBuilder$1"
    "java.net.URLClassLoader$3$1"

  5. #5
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par Kuroro
    Merci encore a toi natha sinon je serais resté longtemps la dessus
    De rien c'était facile Mais ça arrive à tout le monde ce genre de truc (problème évident qu'on n'est pas fichu de voir ).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tomcat 6] Problème de chargement d'une classe interne
    Par SimOOn dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 08/09/2008, 17h31
  2. [POO] Problème de chargement d'une classe template
    Par shensi dans le forum Langage
    Réponses: 5
    Dernier message: 04/08/2007, 16h50
  3. problème de chargement d'une Applet
    Par cladsam dans le forum Applets
    Réponses: 1
    Dernier message: 01/02/2006, 00h04
  4. Problème de construction d'une classe
    Par AraBorLeg dans le forum Langage
    Réponses: 2
    Dernier message: 05/12/2005, 20h07
  5. Réponses: 12
    Dernier message: 01/07/2004, 12h03

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