Bonjour,
Voici le problème, l'implémentation de SAX retournée par ce code :
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.
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();
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 :
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...
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
Je suis désespérément à la recherche d'une solution....
Partager