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

Format d'échange (XML, JSON...) Java Discussion :

Parser sax buggé en jdk 6u12, remède? [SAX]


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut Parser sax buggé en jdk 6u12, remède?
    Bonjour,

    Voici le problème, l'implémentation de SAX retournée par ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SAXParserFactory factory = SAXParserFactory.newInstance();
            factory.setNamespaceAware(true);
     
            XMLReader reader = factory.newSAXParser().getXMLReader();
    Est un genre de fork de Xerces à la sauce SUN qui a l'inconvénient plutôt grave de générer un outOfMemoryException dès que les fichiers XML à parser atteignent une certaine taille.
    C'est particulièrement contraignant lorsque c'est justement ce SOUCI de mémoire qui vous pousse à utiliser SAX.

    Le bug semble être connu depuis 2007, et toujours pas fixé ce qui est entre nous soit dit complètement dingue vu la gravité de la chose.

    http://bugs.sun.com/bugdatabase/view...bug_id=6536111

    Le problème que je rencontre pour ma part, c'est que si je fournis la version de Xerces 2.91 téléchargée chez Apache et que je met les Jar avec mon application serveur sous tomcat. Celle-ci génère un conflit avec l'implémentation standard qui est semble-t-il chargée par un autre ClassLoader :

    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
    com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! org.apache.xerces.parsers.XIncludeAwareParserConfiguration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration
            at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:213)
            at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:196)
            at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
            at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
            at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3099)
            at org.apache.catalina.manager.ManagerServlet.reload(ManagerServlet.java:916)
            at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:360)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
            at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
            at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
            at java.lang.Thread.run(Thread.java:619)
    Caused by: java.lang.ClassCastException: org.apache.xerces.parsers.XIncludeAwareParserConfiguration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration
            at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source)
            at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source)
            at org.apache.xerces.jaxp.DocumentBuilderImpl.<init>(Unknown Source)
            at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)
            at com.sun.org.apache.xalan.internal.xsltc.trax.SAX2DOM.<init>(SAX2DOM.java:69)
            at com.sun.org.apache.xalan.internal.xsltc.runtime.output.TransletOutputHandlerFactory.getSerializationHandler(TransletOutputHandlerFactory.java:187)
            at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(TransformerImpl.java:392)
            at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:298)
            at com.sun.faces.config.ConfigManager$ParseTask.getDocument(ConfigManager.java:439)
            at com.sun.faces.config.ConfigManager$ParseTask.call(ConfigManager.java:394)
            at com.sun.faces.config.ConfigManager$ParseTask.call(ConfigManager.java:351)
            at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
            at java.util.concurrent.FutureTask.run(FutureTask.java:138)
            at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
            ... 1 more
    Donc je peux pas utiliser l'implémentation du JDK car ça finit en outOfMemory, et je ne peux pas non plus livrer Xerces avec mon application car sinon c'est Tomcat qui comprend plus rien...

    Je suis désespérément à la recherche d'une solution....

  2. #2
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Bon j'ai finalement trouvé un workaround en utilisant non plus xerces mais woodstox comme parser SAX.

    Il est disponible ici :
    http://woodstox.codehaus.org/Download

    Il suffit de mettre ces deux librairies dans le classpath :

    # woodstox-core-lgpl-4.0.3.jar (LGPL 2.1)
    # stax2-api-3.0.1 jar

    Ensuite, instancier le parser de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // We currently use woodstox parser (sun default xerces rip-off is bugged as of jdk 6u12)
    SAXParserFactory spf = new com.ctc.wstx.sax.WstxSAXParserFactory();
    XMLReader reader = spf.newSAXParser().getXMLReader();
    Et voyez-vous, ça fonctionne... Y'a pas à priori d'inconvénients à ne pas utiliser Xerces, j'ai la validation de schéma, tout!

  3. #3
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Par défaut
    Pour info, ce bug est apparemment corrigé dans la 6u14(b03) http://bugs.sun.com/bugdatabase/view...bug_id=2173432.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

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

Discussions similaires

  1. [XML] Problème avec le parser SAX
    Par carmensam dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 28/08/2009, 16h50
  2. Problème de parser SAX après déploiement
    Par guenievre dans le forum Java ME
    Réponses: 14
    Dernier message: 10/10/2007, 18h51
  3. [SAX] Parser SAX
    Par Imladir dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 13/01/2006, 17h32
  4. [SAX] Parser SAX
    Par tchouki dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 13/11/2005, 14h18
  5. [SAX] Parser SAX : connaitre l'état d'avancement
    Par GLA31 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 26/10/2004, 09h08

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