에러(error)

java.lang.ClassNotFoundException: org.apache.catalina.core.JasperListener

 

에러 상세(error detail)

06-Dec-2017 10:39:17.398 SEVERE [main] org.apache.tomcat.util.digester.Digester.startElement Begin event threw exception

 java.lang.ClassNotFoundException: org.apache.catalina.core.JasperListener

        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

        at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:116)

        at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1184)

        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)

        at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)

        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1343)

        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)

        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)

        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)

        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)

        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)

        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)

        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)

        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:649)

        at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1457)

        at org.apache.catalina.startup.Catalina.load(Catalina.java:551)

        at org.apache.catalina.startup.Catalina.load(Catalina.java:599)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:497)

        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:310)

        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:484)

 

06-Dec-2017 10:39:17.867 WARNING [main] org.apache.catalina.startup.Catalina.load Catalina.start using conf/server.xml: Error at (5, 66) : org.apache.catalina.core.JasperListener

06-Dec-2017 10:39:17.882 SEVERE [main] org.apache.tomcat.util.digester.Digester.startElement Begin event threw exception

 java.lang.ClassNotFoundException: org.apache.catalina.core.JasperListener

        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

        at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:116)

        at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1184)

        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)

        at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)

        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1343)

        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)

        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)

        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)

        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)

        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)

        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)

        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)

        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:649)

        at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1457)

        at org.apache.catalina.startup.Catalina.load(Catalina.java:551)

        at org.apache.catalina.startup.Catalina.start(Catalina.java:613)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:497)

        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)

        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)

 

개발환경(platform)

tomcat7 -> tomcat8

 

상황(situation)

기존 서버 프로젝트를 새롭게 구성하려던 중에 발생한 문제이다. 기존 웹서버는 tomcat7을 사용중이었고, 새롭게 구성하려는 서버의 웹서버는 tomcat8이었다. 이때, 기존 서버 설정을 그대로 사용하기 위해 server.xml을 복사해서 그대로 사용하려던 상황이다.

 

원인(cause)

tomcat7에서 사용하던 server.xml tomcat8에서 그대로 사용하려던 것이 문제를 만든 것이다. tomcat7 tomcat8간의 약간 변경된 부분이 있었고, 그 부분 때문에 에러가 발생한 것이다따라서, 원인은 tomcat7에서는 JasperListener를 사용하지만, tomcat8에서는 이를 사용하지 않기때문에 에러가 발생된 것이었고, 본인처럼 tomcat8에서 JasperListener를 사용한다고 설정하면, 위와 같은 에러가 발생한다.

 

해결(solution)

문제 발생된 코드 (tomcat7에서 사용중이던 걸 그대로 복사한 server.xml)

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />


문제 해결된 코드
(tomcat8에 맞게 변경시킨 server.xml) 

<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.security.SecurityListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!-- Listener className="org.apache.catalina.core.JasperListener" /-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

※ 참고, JasperListener Class를 제외한 후, 몇가지 Class를 더 추가시켜서 작성했지만, 여기서 문제를 발생시킨 원인인 JasperListener Class만 server.xml에서 제거시켜주면 된다.