WAS 8.5: java.lang.ClassCastException: org.apache.xerces.jaxp.SAXParserFactoryImpl incompatibile con javax.xml.parsers.SAXParserFactory

Sto distribuendo un’applicazione Web J2EE in Websphere Application Server 8.5.

L’applicazione web ha una libreria condivisa con tutte le librerie di terze parti. Tutte le librerie codificate internamente si trovano nella cartella WEB-INF / lib.

Il problema è che in alcuni jsps WAS sta lanciando la seguente eccezione.

Penso che sia correlato con xercesImpl-2.8.1.jar ma non capisco perché stia lanciando questa eccezione e perché stia lanciando solo alcune pagine.

In tomcat funziona perfettamente.

java.lang.ClassCastException: org.apache.xerces.jaxp.SAXParserFactoryImpl incompatible with javax.xml.parsers.SAXParserFactory at javax.xml.parsers.SAXParserFactory.newInstance(Unknown Source) at org.apache.taglibs.standard.tlv.JstlBaseTLV.validate(JstlBaseTLV.java:152) at org.apache.taglibs.standard.tlv.JstlCoreTLV.validate(JstlCoreTLV.java:96) at com.ibm.ws.jsp.translator.visitor.validator.ValidateVisitor.validateTagLib(ValidateVisitor.java:1129) at com.ibm.ws.jsp.translator.visitor.validator.ValidateVisitor.visitJspRootStart(ValidateVisitor.java:491) at com.ibm.ws.jsp.translator.visitor.JspVisitor.processJspElement(JspVisitor.java:233) at com.ibm.ws.jsp.translator.visitor.JspVisitor.visit(JspVisitor.java:216) at com.ibm.ws.jsp.translator.JspTranslator.processVisitors(JspTranslator.java:127) at com.ibm.ws.jsp.translator.utils.JspTranslatorUtil.translateJsp(JspTranslatorUtil.java:254) at com.ibm.ws.jsp.translator.utils.JspTranslatorUtil.translateJspAndCompile(JspTranslatorUtil.java:121) at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.translateJsp(AbstractJSPExtensionServletWrapper.java:535) at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper._checkForTranslation(AbstractJSPExtensionServletWrapper.java:452) at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.checkForTranslation(AbstractJSPExtensionServletWrapper.java:283) at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.findWrapper(AbstractJSPExtensionProcessor.java:456) at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.getServletWrapper(AbstractJSPExtensionProcessor.java:337) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:963) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1384) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:193) at com.ieci.tecdoc.isicres.servlets.QryInitAdvanSearch.doWork(QryInitAdvanSearch.java:209) at com.ieci.tecdoc.isicres.servlets.QryInitAdvanSearch.doGet(QryInitAdvanSearch.java:67) at javax.servlet.http.HttpServlet.service(HttpServlet.java:575) at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1214) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:774) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:456) at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:125) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:92) at com.ieci.tecdoc.isicres.filters.URLCheckFilter.doFilter(URLCheckFilter.java:106) at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:192) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:89) at com.ieci.tecdoc.isicres.filters.LoginCheckFilter.doFilter(LoginCheckFilter.java:119) at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:192) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:89) at com.ieci.tecdoc.isicres.filters.XSSFilter.doFilter(XSSFilter.java:72) at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:192) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:89) at com.ieci.tecdoc.isicres.filters.UTF8Filter.doFilter(UTF8Filter.java:65) at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:192) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:89) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:926) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1023) at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3703) at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304) at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:962) at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662) at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:522) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:311) at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:87) at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) 

In sostanza, non è necessario javax.xml librerie che implementano API standardizzate (come javax.xml ) poiché la maggior parte di esse è già fornita da JRE o dal server delle applicazioni. Ciò consente di evitare vari problemi di incompatibilità come quello che si deve affrontare.

Se devi ancora utilizzare una versione specifica di Xerces, modifica la politica di PARENT_LAST modulo Web in PARENT_LAST . In questo caso la libreria verrà prelevata da WEB-INF/lib . Questo non garantisce che non avrai problemi però.

Per riassumere: rimuovere xercesImpl-2.8.1.jar dall’applicazione. Il tuo ambiente operativo fornisce l’implementazione del parser XML. Nella maggior parte dei casi non è necessario sapere quale.

Ho risolto cambiando l’associazione delle librerie condivise.

Originariamente le librerie xerces erano incluse come libreria condivisa a livello di applicazione, quindi queste librerie erano caricate prima del server delle applicazioni.

Ho cambiato l’associazione della libreria condivisa al livello del modulo , ora queste librerie sono caricate dopo il server delle applicazioni e l’eccezione è scomparsa.

inserisci la descrizione dell'immagine qui