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

Glassfish et Payara Java Discussion :

[SunOne] Problème de chargement de classe Xerces sous SunOne


Sujet :

Glassfish et Payara Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Points : 85
    Points
    85
    Par défaut [SunOne] Problème de chargement de classe Xerces sous SunOne
    Bonjour,

    Je suis en echec depuis plusieurs jours sur un problème assez velu.

    Le problème se produit lorsque je déploie mon application web sur un serveur SunOne Web Server 6.2 (anciennement serveur iplanet de Netscape).

    Mon application test est très simple : elle consiste en une jsp qui parse un fichier XML avec l'API DOM et affiche à l'utilisateur le nom du parser utilisé.

    Ci dessous le code de la jsp :

    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
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Test parser XML</title>
    </head>
    <body>
     
    <%
    	String documentBuilderImplClassName =  null;
    	try {
    	  javax.xml.parsers.DocumentBuilderFactory DBF=javax.xml.parsers.DocumentBuilderFactory.newInstance();
    	  DBF.setValidating(false);
    	  javax.xml.parsers.DocumentBuilder DB = DBF.newDocumentBuilder();
     
    	  documentBuilderImplClassName = DB.getClass().getName();
              log("REMI : "+documentBuilderImplClassName);
    	  org.w3c.dom.Document dom = DB.parse(getServletContext().getRealPath("WEB-INF/web.xml"));	  
    	}
    	catch (Exception E) {
    	  ServletException se = new ServletException();
    	  se.initCause(E);
    	  throw se;
    	}
    %>
     
    	<br/>
    	Classe d'implementation du document builder : <%=documentBuilderImplClassName %>
    	<br/>
     
    </body>
    </html>
    Si le répertoire WEB-INF/lib est vide, l'exécution de la jsp se déroule normalement et je constate que le parser crimson est utilisé (en effet il est inclu dans le jdk 4.2.07 installé sur la machine).

    La prochaine étape consiste à copier les fichiers suivants dans le répertoire WEB-INF/lib :

    xercesImpl-2.0.2.jar
    xml-apis-2.0.2.jar

    Ceci correspond au parser xerces.

    Maintenant la jsp se plante joyeusement avec l'exception suivante.


    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
    Context.log(): jsp: REMI : org.apache.xerces.jaxp.DocumentBuilderImpl
    [10/Jan/2006:17:28:01] failure (26689): for host 172.17.15.21 trying to GET /TestWEB/index.jsp, service-j2ee reports: StandardWrapperValve[jsp
    ]: WEB2792: Servlet.service() for servlet jsp threw exception
    javax.servlet.ServletException: org/w3c/dom/DOMErrorHandler
            at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:536)
            at _jsps._index_jsp._jspService(_index_jsp.java:91)
            at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:908)
            at com.iplanet.ias.web.jsp.JspServlet$JspServletWrapper.service(JspServlet.java:675)
            at com.iplanet.ias.web.jsp.JspServlet.serviceJspFile(JspServlet.java:447)
            at com.iplanet.ias.web.jsp.JspServlet.service(JspServlet.java:363)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:908)
            at org.apache.catalina.core.StandardWrapperValve.invokeServletService(StandardWrapperValve.java:771)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:322)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:509)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:212)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:509)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:209)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:509)
            at com.iplanet.ias.web.connector.nsapi.NSAPIProcessor.process(NSAPIProcessor.java:161)
            at com.iplanet.ias.web.WebContainer.service(WebContainer.java:578)
    ----- Root Cause -----
    java.lang.NoClassDefFoundError: org/w3c/dom/DOMErrorHandler
            at java.lang.ClassLoader.defineClass0(Native Method)
            at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
            at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
            at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1717)
            at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:983)
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1431)
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1301)
            at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
            at org.apache.xerces.dom.CoreDocumentImpl.<init>(CoreDocumentImpl.java:173)
            at org.apache.xerces.dom.DocumentImpl.<init>(DocumentImpl.java:173)
            at org.apache.xerces.dom.DeferredDocumentImpl.<init>(DeferredDocumentImpl.java:194)
            at org.apache.xerces.dom.DeferredDocumentImpl.<init>(DeferredDocumentImpl.java:189)
            at org.apache.xerces.parsers.AbstractDOMParser.startDocument(AbstractDOMParser.java:712)
            at org.apache.xerces.impl.XMLNamespaceBinder.startDocument(XMLNamespaceBinder.java:444)
            at org.apache.xerces.impl.dtd.XMLDTDValidator.startDocument(XMLDTDValidator.java:644)
            at org.apache.xerces.impl.XMLDocumentScannerImpl.startEntity(XMLDocumentScannerImpl.java:431)
            at org.apache.xerces.impl.XMLEntityManager.startEntity(XMLEntityManager.java:878)
            at org.apache.xerces.impl.XMLEntityManager.startDocumentEntity(XMLEntityManager.java:741)
            at org.apache.xerces.impl.XMLDocumentScannerImpl.setInputSource(XMLDocumentScannerImpl.java:260)
    On voit que la jsp tente d'utiliser l'implementation Xerces (voir message de log en première ligne) mais le serveur ne parvient pas à charger la classe DOMErrorHandler.

    Pourtant cette classe se trouve dans l'archive xercesImpl-2.0.2.jar

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sun26:> jar tvf xercesImpl-2.0.2.jar | grep DOMErrorHandler
      2754 Fri Jun 21 10:50:56 CEST 2002 org/apache/xerces/util/DOMErrorHandlerWrapper.class
       173 Fri Jun 21 10:50:56 CEST 2002 org/w3c/dom/DOMErrorHandler.class
    sun26:>
    Alors, étant donné que le classloader trouve bien la classe org.apache.xerces.jaxp.DocumentBuilderImpl, je ne comprend pas pourqoui il ne trouve pas l'autre, sachant qu'elles se trouvent toutes les deux dans le même jar.

    Je précise que sous Tomcat, je ne rencontre absolument pas ce problème.

  2. #2
    Membre émérite
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Points : 2 777
    Points
    2 777
    Par défaut
    Web Server 6.1, pas 6.2.
    Je pense a un problème de versioning/classpath de JAR.

    Il y a un mécanisme de classes "endorsed": http://java.sun.com/j2se/1.4.2/docs/guide/standards/
    Sinon, tout ce qui se trouve dans jre/lib/ext est prioritaire sur rt.jar.

    Il y a aussi les options suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        -Xbootclasspath:<directories and zip/jar files separated by ;>
                          set search path for bootstrap classes and resources
        -Xbootclasspath/a:<directories and zip/jar files separated by ;>
                          append to end of bootstrap class path
        -Xbootclasspath/p:<directories and zip/jar files separated by ;>
                          prepend in front of bootstrap class path

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 75
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par alexismp
    Web Server 6.1, pas 6.2.
    Je pense a un problème de versioning/classpath de JAR.

    Il y a un mécanisme de classes "endorsed":
    Effectivement, si je place les jars de Xerces dans un répertoire (disons toto) et que j'utilise l'option -Djava.endorsed.dirs=toto pour la JVM cela marche mieux.

    J'ai trouvé des bons renseignements également à cette adresse :

    http://java.sun.com/webservices/jaxp/reference/faqs/

  4. #4
    Membre émérite
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Points : 2 777
    Points
    2 777
    Par défaut
    Content que ca fonctionne.

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

Discussions similaires

  1. Problème de chargement de class
    Par benthebest dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 06/10/2010, 17h16
  2. [JMS/JNDI] Problème de chargement de classe
    Par Erouan dans le forum Glassfish et Payara
    Réponses: 5
    Dernier message: 03/02/2010, 16h12
  3. Problème de chargement d'application Spring sous ubuntu/Tomcat 6
    Par sebounetino dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 10/12/2009, 14h23
  4. problème de chargement de classe (plugin)
    Par nixonne dans le forum Général Java
    Réponses: 8
    Dernier message: 17/08/2006, 15h54
  5. Problème de chargement d'image dynamique sous firefox
    Par Tmex dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 08/03/2006, 10h24

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