On Jul 31, 2013, at 11:40 AM, Edward W. Rouse wrote:

> I'm losing my mind here. I finally went full standard to see if the changes
> in tomcat 7 would allow me to avoid custom class loaders and contexts, but
> ran into a catch-22 issue.
> 
> 
> 
> I was getting:
> 
> 
> 
> java.lang.ClassCastException:
> com.sun.xml.ws.transport.http.servlet.WSServletContainerInitializer cannot
> be cast to javax.servlet.ServletContainerInitializer
> 
>                at
> org.apache.catalina.startup.ContextConfig.getServletContainerInitializer(Con
> textConfig.java:1654)
> 
>                at
> org.apache.catalina.startup.ContextConfig.processServletContainerInitializer
> s(ContextConfig.java:1562)
> 
>                at
> org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1270)
> 
>                at
> org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:
> 878)
> 
>                at
> org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:
> 376)
> 
>                at
> org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSuppor
> t.java:119)
> 
>                at
> org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java
> :90)
> 
>                at
> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:
> 5322)
> 
> 
> 
> So I tracked down where the WSServletContainerInitializer was coming from
> and removed the jar file. Now I get:
> 
> 
> 
> SEVERE: Error configuring application listener of class
> org.apache.catalina.deploy.ApplicationListener@1b104d7
> 
> java.lang.ClassNotFoundException:
> com.sun.xml.ws.transport.http.servlet.WSServletContextListener
> 
>                at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.jav
> a:1714)
> 
>                at
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.jav
> a:1559)
> 
>                at
> org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceMan
> ager.java:527)
> 
>                at
> org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(Def
> aultInstanceManager.java:509)
> 
>                at
> org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceM
> anager.java:137)
> 
>                at
> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:
> 4854)
> 
>                at
> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:
> 5434)
> 
>                at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
> 
>                at
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:9
> 01)
> 
>                at
> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
> 
>                at
> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
> 
>                at
> org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1113)
> 
>                at
> org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1
> 671)
> 
>                at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
> 
>                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.ja
> va:886)
> 
>                at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:9
> 08)
> 
>                at java.lang.Thread.run(Thread.java:662)
> 
> 
> 
> and what's in the context is:
> 
> 
> 
> <?xml version="1.0" encoding="UTF-8"?>
> 
>      <Context path="/idwm" docBase="${catalina.home}/webapps/idwm" >
> 
>            <Resources
> className="org.apache.naming.resources.VirtualDirContext"
> 
>                  extraResourcePaths="/idwm/*/=/usr/us/idwm/plugins/*/"/>
> 
> 
> 
>            <Loader
> className="org.apache.catalina.loader.VirtualWebappLoader"
> 
>                  virtualClasspath="/usr/us/idwm/plugins/*/WEB-INF/classes;
> 
>                  /usr/us/idwm/plugins/*/WEB-INF/lib/*.jar;
> 
>                  /usr/us/idwm/plugins/*/;"
> 
>            />
> 
>      </Context>
> 
> 
> 
> 
> 
> So now what? I'm using the classes provided by apache and I'm damned if I do
> and damned if I don't. Is there even a solution to this?

I've seen that before, with Persistence on GlassFish. Turned out I had the 
Persistence API JARs in /WEB-INF/lib in my web application. Since two identical 
classes loaded by two different class loaders are actually different classes, 
the cast failed.

My bet is you have the javax.websocket JAR(s) in /WEB-INF/lib in your web 
application. You can compile against these JARs, but they MUST NOT be in 
/WEB-INF/lib.

Nick
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to