2013-10-25 9 views
4

Websphere Application Server 8.5에 J2EE 웹 응용 프로그램을 배포하고 있습니다.WAS 8.5 : java.lang.ClassCastException : org.apache.xerces.jaxp.SAXParserFactoryImpl이 javax.xml.parsers.SAXParserFactory와 호환되지 않습니다.

웹 응용 프로그램에는 모든 타사 라이브러리와 공유 라이브러리가 있습니다. 내부적으로 코딩 된 모든 라이브러리는 WEB-INF/lib 폴더 안에 있습니다.

문제는 일부 jsp에서만 다음과 같은 예외가 발생했습니다.

xercesImpl-2.8.1.jar와 관련이 있다고 생각하지만 왜이 예외를 던지고 있는지 그리고 왜 일부 페이지 만 던지는 지 이해할 수 없습니다.

Tomcat에서는 완벽하게 작동합니다.

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) 
+0

http://stackoverflow.com/questions/8179399/javax-xml-parsers-saxparserfactory-classcastexception 어쩌면 당신을 도울 수 있습니다. – ZaoTaoBao

+0

내이 변종에 대한 내 해결책을 확인하십시오 : http://stackoverflow.com/questions/37351807/remove-xercesimpl-2-8-1-jar-from-the-application. – Mark

답변

5

기본적으로 XML 파서와 같은 JRE에있는 공통 라이브러리는 응용 프로그램과 함께 제공되어서는 안됩니다. 이렇게하면 직면하는 것과 같은 다양한 비 호환성 문제를 피할 수 있습니다.

특정 버전의 Xerces를 사용해야하는 경우 웹 모듈의 클래스로드 정책을 PARENT_LAST로 변경하십시오. 이 경우 라이브러리는 WEB-INF/lib에서 선택됩니다. 그렇다고해서 문제가 없다고 보장 할 수는 없습니다.

요약하면 다음과 같습니다. 응용 프로그램에서 xercesImpl-2.8.1.jar을 제거하십시오. JRE는 XML 구문 분석기 구현을 제공합니다. 대부분의 경우 어떤 것을 알 필요가 없습니다.

0

공유 라이브러리의 연관성을 변경하여 해결했습니다.

원래 xerces 라이브러리는 응용 프로그램 수준에서 공유 라이브러리로 포함되었으므로 이러한 라이브러리는 응용 프로그램 서버보다 먼저로드되었습니다.

공유 라이브러리 연결을 모듈 수준으로 변경했습니다. 이제이 라이브러리는 응용 프로그램 서버보다 나중에로드되고 예외가 사라집니다.

enter image description here