0

When trying to start an embedded tomcat web app from within an SWT app, I'm getting the errors (stacktrace below):

java.lang.ClassCastException: org.apache.struts.action.ActionServlet and java.lang.ClassCastException: org.apache.jasper.servlet.JspServlet

I've searched through all of the jars in the /lib/ directories and /WEB-INF/lib directories and have not found any duplicate references to any Servlet classes.

The app is using Tomcat 6.0.36 and Struts 1.3.10

The application source code builds and compiles successfully with no errors.

Jar files in <project>\lib

lib\annotations-api.jar
lib\axis\axis-ant.jar
lib\axis\axis.jar
lib\axis\commons-discovery-0.2.jar
lib\axis\jaxrpc.jar
lib\axis\junit.jar
lib\axis\saaj.jar
lib\axis\wsdl4j-1.5.1.jar
lib\catalina.jar
lib\com.dom.jsso.common-server.jar
lib\commons-dbcp-1.2.1.jar
lib\commons-logging-1.1.jar
lib\commons-pool.jar
lib\derby.jar
lib\derbytools.jar
lib\dom4j.jar
lib\ehcache-1.1.jar
lib\el-api.jar
lib\hibernate3.jar
lib\jasper.jar
lib\jsp-api.jar
lib\jta.jar
lib\odmg.jar
lib\org.springframework.asm-3.1.3.RELEASE.jar
lib\org.springframework.beans-3.1.3.RELEASE.jar
lib\org.springframework.context-3.1.3.RELEASE.jar
lib\org.springframework.core-3.1.3.RELEASE.jar
lib\org.springframework.web-3.1.3.RELEASE.jar
lib\org.springframework.web.struts-3.1.3.RELEASE.jar
lib\servlet-api.jar
lib\tomcat-coyote.jar
lib\tomcat-dbcp.jar
lib\tomcat-juli.jar
lib\tools\ojdbc14.jar

Other jars used in the project (for JFace and SWT)

eclipse\plugins\org.eclipse.jface_3.7.0.v20110928-1505.jar
eclipse\plugins\org.eclipse.jface.text_3.7.2.v20111213-1208.jar
eclipse\plugins\org.eclipse.swt_3.7.2.v3740f.jar
eclipse\plugins\org.eclipse.swt.win32.win32.x86_3.7.2.v3740f.jar

Jar files in tomcat\webapps\<project>\WEB-INF\lib

WEB-INF\lib\antlr-2.7.2.jar
WEB-INF\lib\commons-beanutils-1.8.0.jar
WEB-INF\lib\commons-digester-1.8.jar
WEB-INF\lib\commons-fileupload-1.1.1.jar
WEB-INF\lib\commons-validator-1.3.1.jar
WEB-INF\lib\oro-2.0.8.jar
WEB-INF\lib\struts-core-1.3.10.jar
WEB-INF\lib\struts-taglib-1.3.10.jar

servlet portion of tomcat/conf/web.xml

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>

servlet portion of web.xml

<servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml,/WEB-INF/struts-config-adm.xml,/WEB-INF/struts-config-ajax.xml</param-value>
        </init-param>
        <init-param>
            <param-name>debug</param-name>
            <param-value>2</param-value>
        </init-param>
        <init-param>
            <param-name>detail</param-name>
            <param-value>2</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

Error stacktrace:

Dec 7, 2012 1:46:08 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from file [C:\projects\JSSO\com\example\conf\config.xml]
Dec 7, 2012 1:46:08 PM com.example.tomcat.embeddedTomcat init
INFO: Starting the tomcat bean
Dec 7, 2012 1:46:09 PM org.apache.catalina.startup.Embedded start
INFO: Starting tomcat server
Dec 7, 2012 1:46:09 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.36
Dec 7, 2012 1:46:10 PM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet action as unavailable
Dec 7, 2012 1:46:10 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet / threw load() exception
java.lang.ClassCastException: org.apache.struts.action.ActionServlet
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1149)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1026)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4421)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4734)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.startup.Embedded.start(Embedded.java:825)
    at com.example.tomcat.embeddedTomcat.init(embeddedTomcat.java:111)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1581)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1522)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at com.example.util.ServiceLocator.getModuleManager(ServiceLocator.java:26)
    at com.example.SWTMain$2.run(SWTMain.java:136)
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4140)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3757)
    at com.example.SWTMain.waitUntilExit(SWTMain.java:283)
    at com.example.SWTMain.main(SWTMain.java:176)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at com.example.Main.invokeLoader(Main.java:138)
    at com.example.Main.main(Main.java:123)
Dec 7, 2012 1:46:10 PM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet jsp as unavailable
Dec 7, 2012 1:46:10 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet / threw load() exception
java.lang.ClassCastException: org.apache.jasper.servlet.JspServlet
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1149)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1026)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4421)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4734)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.startup.Embedded.start(Embedded.java:825)
    at com.example.tomcat.embeddedTomcat.init(embeddedTomcat.java:111)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1581)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1522)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at com.example.util.ServiceLocator.getModuleManager(ServiceLocator.java:26)
    at com.example.SWTMain$2.run(SWTMain.java:136)
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4140)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3757)
    at com.example.SWTMain.waitUntilExit(SWTMain.java:283)
    at com.example.SWTMain.main(SWTMain.java:176)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at com.example.Main.invokeLoader(Main.java:138)
    at com.example.Main.main(Main.java:123)
Dec 7, 2012 1:46:10 PM org.apache.tomcat.util.modeler.Registry registerComponent
SEVERE: Null component null:type=JspMonitor,name=jsp,WebModule=//localhost/,J2EEApplication=none,J2EEServer=none
Dec 7, 2012 1:46:10 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8043
Dec 7, 2012 1:46:10 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8043
Dec 7, 2012 1:46:10 PM com.example.tomcat.embeddedTomcat init
INFO: Tomcat Started
Dec 7, 2012 1:46:11 PM org.apache.catalina.core.ApplicationDispatcher invoke
WARNING: Servlet jsp is currently unavailable
Dec 7, 2012 1:46:12 PM com.example.SWTMain$1 shellClosed
INFO: Closing the application
Dec 7, 2012 1:46:12 PM com.example.tomcat.embeddedTomcat shutdown
INFO: Shutting down tomcat
Dec 7, 2012 1:46:12 PM org.apache.coyote.http11.Http11Protocol destroy
INFO: Stopping Coyote HTTP/1.1 on http-8043
jeffl8n
  • 916
  • 2
  • 8
  • 20
  • could be non compatibility between Struts version and Java servlets version, post your struts/tomcat versions – Subin Sebastian Dec 07 '12 at 19:15
  • strange how it trows `ClassCastException` without showing to what class it tried to cast... – Polyana Fontes Dec 07 '12 at 19:19
  • @SubinS - I've added the versions (Tomcat 6.0.36 and Struts 1.3.10) – jeffl8n Dec 07 '12 at 19:22
  • found a similar exception, this may be helpfull: http://grokbase.com/t/struts/user/02bqqdrxjt/struts-1-1b2-and-sybase-easerver-4-1-0-jaguar – Polyana Fontes Dec 07 '12 at 19:25
  • an other one: http://www.coderanch.com/t/46849/Struts/Failed-load-servlet-Struts – Polyana Fontes Dec 07 '12 at 19:31
  • @JoséRobertoAraújoJúnior - The struts jars are in the WEB-INF/lib directory already, and the web.xml using struts only has one servlet-mapping. – jeffl8n Dec 07 '12 at 19:39
  • @BalusC I've clarified the location of the /lib directories, which are project/lib and the tomcat/webapps/project/WEB-INF/lib. I've also verified it isn't in the JRE lib directories. The JRE for this project is jdk150_04. I've also tried running this on a VM with fresh installs of the JDK and still have the problem. – jeffl8n Dec 10 '12 at 14:27
  • @BalusC I don't think this is problem since this is embedded tomcat. I've tried removing all of the tomcat jars from the '/lib' directory and including the Apache Tomcat 6 runtime in the Eclipse build path instead, but still have the same errors. – jeffl8n Dec 10 '12 at 16:02

1 Answers1

0

After some researches you have multiple copies or versions of struts in your class path, remove them and keep only one. Although you said you checked, all the answers I found point this, so you probably have but is not finding.

Also, try removing the jar from the war file because it's already included.

References:

The struts.jar file should not be kept in a common area such as WAS/lib. It should be included in the WEB-INF/lib folder for each struts application.

http://www.coderanch.com/t/46849/Struts/Failed-load-servlet-Struts

Remove Struts core API jar from your war lib folder or from global commons lib directory. There are two jars of the same in two places, which gets loaded by different class loaders and hence casting is failing.

http://www.liferay.com/community/forums/-/message_boards/message/6813153

Search for exact jar which contain the class org.apache.struts.action.ActionServlet

Struts does not support multiple servlet mappings to the same action servlet instance.

http://grokbase.com/t/struts/user/02bqqdrxjt/struts-1-1b2-and-sybase-easerver-4-1-0-jaguar

Polyana Fontes
  • 3,156
  • 1
  • 27
  • 41
  • I've verified there is only 1 jar file (struts-core-1.3.10.jar) with the ActionServlet class. The jar file is already in the WEB-INF\lib directory. The struts servlet definition also only has one servlet mapping. – jeffl8n Dec 07 '12 at 20:19