Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2466 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Prohibited package name: java.lang ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Prohibited package name: java.lang ...

n°929380
fredatisi
Posté le 21-12-2004 à 17:36:16  profilanswer
 

bonjour,
 
Suite à quelques problèmes de performance rencontrés sur des transformations xsl, j'ai mis en place du xsltc: au premier appel au transformer, les informations utiles à la transformation sont conservées (un translet static, un singleton qui l'utilise et retourne un transformer et le tour est joué).
 
Tout ceci fonctionne très bien sur mon environnement de dev (jdk 1.4.2_02 & tomcat 5.0.19) en faisant attention de poser dans le endorsed de tomcat le jar de xalan qui va bien :)
 
Sur sun one web server (iplanet 6), avec le même jdk, cela ne fonctionne pas aussi bien : les classes du jdk étant prioritaires sur celles des jars inclus au projet, j'ai un magnifique conflit sur une des methodes du jar de xalan.  
 
Je me suis donc inspiré du classloader de cocoon qui permet de résoudre ce genre de problèmes : Le ParanoidClassLoader et la ParanoidServlet
 

Code :
  1. The ParanoidClassLoader reverses the search order for
  2. classes.  It checks this classloader before it checks its parent.


 
 
J'ai adapté la ParanoidServlet à mon code  
 

Code :
  1. public class ParanoidCocoonServlet extends HttpServlet {
  2. /**
  3.  * The name of the actual servlet class.
  4.  */
  5. public static final String DEFAULT_SERVLET_CLASS = "xxx.yyy.TestServlet" ;
  6.    
  7.     protected static final String CONTEXT_PREFIX = "context:";
  8.    
  9.     protected static final String FILE_PREFIX = "file:";
  10.    
  11. protected Servlet servlet;
  12.    
  13.     protected ClassLoader classloader;
  14.    
  15. public void init(ServletConfig config) throws ServletException {
  16.  super.init(config);
  17.  // Create the classloader in which we will load the servlet
  18.         // this can either be specified by an external file configured
  19.         // as a parameter in web.xml or (the default) all jars and  
  20.         // classes from WEB-INF/lib and WEB-INF/classes are used.
  21.         final String externalClasspath = config.getInitParameter("paranoid-classpath" );
  22.         if ( externalClasspath == null ) {
  23.             this.classloader = this.getClassLoader(this.getContextDir());
  24.         } else {
  25.             this.classloader = this.getClassLoader(externalClasspath, this.getContextDir());
  26.         }
  27.        
  28.         String servletName = config.getInitParameter("servlet-class" );
  29.         if (servletName == null) {
  30.             servletName = DEFAULT_SERVLET_CLASS;
  31.         }
  32.        
  33.         // Create the servlet
  34.  try {
  35.   Class servletClass = this.classloader.loadClass(servletName);
  36.            
  37.   this.servlet = (Servlet)servletClass.newInstance();
  38.  } catch(Exception e) {
  39.   throw new ServletException("Cannot load servlet " + servletName, e);
  40.  }
  41. ...


 
et mon code crash lors de l'instanciation de la servlet  
 

Code :
  1. // Create the servlet
  2.  try {
  3.   Class servletClass = this.classloader.loadClass(servletName);
  4.            
  5.   this.servlet = (Servlet)servletClass.newInstance();
  6.  } catch(Exception e) {
  7.   throw new ServletException("Cannot load servlet " + servletName, e);
  8.  }


 
Je récupère une SecurityException : Prohibited package name: java.lang  
 
Le nom de la servlet est correct et son package n'est pas java.lang.TestServlet ...  
 
Je n'ai rien trouvé de concluant sur google ou autre à ce sujet et je sèche ...  
 
Auriez vous une idée ?  :)
 
fred

mood
Publicité
Posté le 21-12-2004 à 17:36:16  profilanswer
 

n°929387
benou
Posté le 21-12-2004 à 17:45:36  profilanswer
 

tu pourrais filer la stacktrace ?


---------------
ma vie, mon oeuvre - HomePlayer
n°929389
benou
Posté le 21-12-2004 à 17:46:23  profilanswer
 

et c'est quoi la classe de xalan qui pose problème ?
 


---------------
ma vie, mon oeuvre - HomePlayer
n°929403
fredatisi
Posté le 21-12-2004 à 17:53:48  profilanswer
 

L'exception est levée sur le newInstance
 

Code :
  1. java.lang.SecurityException: Prohibited package name: java.lang   at java.lang.ClassLoader.defineClass(ClassLoader.java:524)   at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)   at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)   at java.net.URLClassLoader.access$100(URLClassLoader.java:55)   at java.net.URLClassLoader$1.run(URLClassLoader.java:194)   at java.security.AccessController.doPrivileged(Native Method)   at java.net.URLClassLoader.findClass(URLClassLoader.java:187)   at sdm.session.ParanoidClassLoader.loadClass(ParanoidClassLoader.java:110)   at java.lang.ClassLoader.loadClass(ClassLoader.java:235)   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)   at java.lang.ClassLoader.defineClass0(Native Method)   at java.lang.ClassLoader.defineClass(ClassLoader.java:537)   at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)   at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)   at java.net.URLClassLoader.access$100(URLClassLoader.java:55)   at java.net.URLClassLoader$1.run(URLClassLoader.java:194)   at java.security.AccessController.doPrivileged(Native Method)   at java.net.URLClassLoader.findClass(URLClassLoader.java:187)   at sdm.session.ParanoidClassLoader.loadClass(ParanoidClassLoader.java:110)   at java.lang.ClassLoader.loadClass(ClassLoader.java:235)   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)   at java.lang.ClassLoader.defineClass0(Native Method)   at java.lang.ClassLoader.defineClass(ClassLoader.java:537)   at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)   at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)   at java.net.URLClassLoader.access$100(URLClassLoader.java:55)   at java.net.URLClassLoader$1.run(URLClassLoader.java:194)   at java.security.AccessController.doPrivileged(Native Method)   at java.net.URLClassLoader.findClass(URLClassLoader.java:187)   at sdm.session.ParanoidClassLoader.loadClass(ParanoidClassLoader.java:110)   at java.lang.ClassLoader.loadClass(ClassLoader.java:235)   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)   at java.lang.ClassLoader.defineClass0(Native Method)   at java.lang.ClassLoader.defineClass(ClassLoader.java:537)   at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)   at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)   at java.net.URLClassLoader.access$100(URLClassLoader.java:55)   at java.net.URLClassLoader$1.run(URLClassLoader.java:194)   at java.security.AccessController.doPrivileged(Native Method)   at java.net.URLClassLoader.findClass(URLClassLoader.java:187)   at sdm.session.ParanoidClassLoader.loadClass(ParanoidClassLoader.java:110)   at java.lang.ClassLoader.loadClass(ClassLoader.java:235)   at sdm.session.ParanoidServlet.init(ParanoidServlet.java:60)   at org.apache.catalina.core.StandardWrapper.loadServlet


 
Pour être plus précis, il faut le package xsltc de xalan. Je te donne la méthode dessuite

n°929406
fredatisi
Posté le 21-12-2004 à 17:59:12  profilanswer
 

bon, iplanet a planté et ne se relance plus... je m'en occupe et je te donne la réponse dans quelques minutes

n°929429
fredatisi
Posté le 21-12-2004 à 18:36:44  profilanswer
 

bon, apres un reboot de la station et quelques autres soucis, voici ta reponse benou :  
CORE3283: stderr: ERROR: 'org.apache.xml.utils.XMLChar.isValidQName(Ljava/lang/String;)Z'

n°929449
benou
Posté le 21-12-2004 à 19:10:11  profilanswer
 

ben ca c'est une classe apache, elle est pas dans le JDK ... comment il pourrait y avoir un conflit ?


---------------
ma vie, mon oeuvre - HomePlayer
n°929732
fredatisi
Posté le 22-12-2004 à 09:23:52  profilanswer
 

Il me semble que dans le jdk 1.4.2_02 il y a une version de xalan. D'où le conflit. ;)

n°929747
benou
Posté le 22-12-2004 à 09:39:03  profilanswer
 

houlà ... ok. tin c'est la merde ca ! :/
 
regarde ce côté là : http://xml.apache.org/xalan-j/faq.html#faq-N100CC
 
la technique du <java-home>\lib\endorsed devrait marcher je pense ...


---------------
ma vie, mon oeuvre - HomePlayer
n°929753
fredatisi
Posté le 22-12-2004 à 09:46:36  profilanswer
 

Je ne peux malheureusement pas passer par le <java-home>\lib\endorsed. Notre client dispose de plusieures applications tournant sur le même serveur. Je ne pourrais pas leur faire installer un nouveau iplanet avec une autre installation du jdk.  
Quant au XbootClasspath/p, j'ai commencé par utiliser ça. Cela fonctionne tres bien avec tomcat, mais je n'ai pas reussi à le mettre en place pour iplanet... il ne semble pas prendre en compte cette option...  
 

Code :
  1. -Xbootclasspath/p: /export/home/applis/xxx/xxx1_liv/WEB/WEB-INF/lib/xalan.jar


 
tout ça etant mis dans l'onglet "mon_appli/java/JVM Options"  d'iplanet


Message édité par fredatisi le 22-12-2004 à 09:54:54
mood
Publicité
Posté le 22-12-2004 à 09:46:36  profilanswer
 

n°929758
benou
Posté le 22-12-2004 à 09:52:05  profilanswer
 

pénible la touche tab, hein ? [:joce]


---------------
ma vie, mon oeuvre - HomePlayer
n°929761
fredatisi
Posté le 22-12-2004 à 09:55:15  profilanswer
 

clair  :lol:


Message édité par fredatisi le 22-12-2004 à 09:55:49
n°929776
benou
Posté le 22-12-2004 à 10:07:14  profilanswer
 

je connais du tout iplanet donc je peux pas trop t'aider là dessus, mais je pense que dans ton cas faut que tu creuses pour faire marcher le Xbootclasspath ...  
la redefinission du classloader est une bidouille qui risque de t'attirer pas mal de problèmes ...


---------------
ma vie, mon oeuvre - HomePlayer
n°929893
fredatisi
Posté le 22-12-2004 à 11:40:32  profilanswer
 

oui et non, c'est en place sous cocoon et ca marche bien. Je vais quand même creuser le xboot et je te previens quand (si ;)) ca marche. En tout cas, merci de ton attention. Je retourne en reunion.  
Fred

n°930078
fredatisi
Posté le 22-12-2004 à 15:05:27  profilanswer
 

Bon, c'est résolu, il fallait utiliser l'option -Djava.endorsed.dirs, la faire pointer sur un repo contenant les jars. Ceci pouvant etre configuré pour une instance donnée d'un serveur, c'est parfait.
 
Fred

n°930131
benou
Posté le 22-12-2004 à 16:12:00  profilanswer
 

Merci pour la solution ... j'ai dans l'idée que tu seras pas le seul à avoir le problème ...


---------------
ma vie, mon oeuvre - HomePlayer

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Prohibited package name: java.lang ...

 

Sujets relatifs
représentation d'un graphe orienté en javapb prog java pour transmettre des variables
Image en java[java]util.zip - ne pas stocker le path ?
[C] Utilisation d'un interface graphique javalancement du compilateur java
XML et XSLT en api JAVAJava et snmp
[java] génération automatique des "import" ?Votre avis sur java
Plus de sujets relatifs à : Prohibited package name: java.lang ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR