Exception wih Vaadin 8 and Tomcat 7

We upgraded from Vaadin 7 to 8 and run one of our applications still on Tomcat 7. After the upgrade on Vaadin 8 there occurred the following Exception:

org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]
.StandardHost[localhost]
.StandardContext
[/xy]]
[Loaded org.apache.tomcat.JarScanner from file:/D:/p/cva/out/artifacts/xy/WEB-INF/lib/apache-jsp-8.0.9.M3.jar]

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)

[Loaded java.lang.Throwable$WrappedPrintWriter from D:\p\jdks\jdk\1.8\windows\64\jre\lib\rt.jar]

at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)

[Loaded java.util.IdentityHashMap$KeySet from D:\p\jdks\jdk\1.8\windows\64\jre\lib\rt.jar]

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.manageApp(HostConfig.java:1553)
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:483)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:622)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:569)
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:483)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1399)
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:828)
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:483)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
at sun.rmi.transport.Transport$1.run(Transport.java:178)
at sun.rmi.transport.Transport$1.run(Transport.java:175)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:174)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:557)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:812)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:671)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Caused by: java.lang.ClassCastException: org.apache.tomcat.util.scan.StandardJarScanner cannot be cast to org.apache.tomcat.JarScanner
at org.apache.jasper.compiler.JarScannerFactory.getJarScanner(JarScannerFactory.java:39)
at org.apache.jasper.servlet.TldScanner.scanJars(TldScanner.java:238)
at org.apache.jasper.servlet.TldScanner.scan(TldScanner.java:99)
at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:103)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5280)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
… 40 more

The JarScanner class is both in the vaadin library in the apache-jsp-8.0.9.M3.jar and in tomcat-api.jar and so there is probably a conflict
[Loaded org.apache.tomcat.JarScanner from file:/D:/p/cva/out/artifacts/xy/WEB-INF/lib/apache-jsp-8.0.9.M3.jar]

[Loaded org.apache.tomcat.JarScanner from file:/D:/p/jdks/tomcat_7.x/lib/tomcat-api.jar]

Does anyone has an idea to fix it? Thanks for any help!

Katrin Rudolph:
We upgraded from Vaadin 7 to 8 and run one of our applications still on Tomcat 7. After the upgrade on Vaadin 8 there occurred the following Exception:

org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]
.StandardHost[localhost]
.StandardContext
[/xy]]
[Loaded org.apache.tomcat.JarScanner from file:/D:/p/cva/out/artifacts/xy/WEB-INF/lib/apache-jsp-8.0.9.M3.jar]

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
[Loaded java.lang.Throwable$WrappedPrintWriter from D:\p\jdks\jdk\1.8\windows\64\jre\lib\rt.jar]

at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
[Loaded java.util.IdentityHashMap$KeySet from D:\p\jdks\jdk\1.8\windows\64\jre\lib\rt.jar]

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.manageApp(HostConfig.java:1553)
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:483)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:622)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:569)
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:483)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1399)
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:828)
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:483)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
at sun.rmi.transport.Transport$1.run(Transport.java:178)
at sun.rmi.transport.Transport$1.run(Transport.java:175)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:174)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:557)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:812)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:671)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassCastException: org.apache.tomcat.util.scan.StandardJarScanner cannot be cast to org.apache.tomcat.JarScanner
at org.apache.jasper.compiler.JarScannerFactory.getJarScanner(JarScannerFactory.java:39)
at org.apache.jasper.servlet.TldScanner.scanJars(TldScanner.java:238)
at org.apache.jasper.servlet.TldScanner.scan(TldScanner.java:99)
at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:103)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5280)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
… 40 more

The JarScanner class is both in the vaadin library in the apache-jsp-8.0.9.M3.jar and in tomcat-api.jar and so there is probably a conflict
[Loaded org.apache.tomcat.JarScanner from file:/D:/p/cva/out/artifacts/xy/WEB-INF/lib/apache-jsp-8.0.9.M3.jar]

[Loaded org.apache.tomcat.JarScanner from file:/D:/p/jdks/tomcat_7.x/lib/tomcat-api.jar]

Does anyone has an idea to fix it? Thanks for any help!

Hi!

did you found a solution for your problem?
We are actually facing the same problem. Still dont know how to solve this problem, 2 days past already.

Hi,

The artifact apache-jsp-8.0.9.M3.jar is part of the gwt-dev. As you see this exception when app is starting I assume that you have not added <scope>provided</scope> Vaadin client dependencies in your pom.xml. This scope definition will tell not to include these jars into WAR file. They are not needed there, since they are used only by GWT compiler and not run time.

Br. Tatu

This is my POM.xml. Before that i used vaadin 7 with ivy then change it to maven and now try to migrate in Vaadin 8.
I have changed everything as described on the page. The Addon ResetButtonForTextField is for 7+, so I don’t know if that’s the problem. I also get an error, but i don’t know if this has anything to do with the above error.

<?xml version="1.0" encoding="UTF-8"?>


3.6.0

<groupId>Test</groupId>
<artifactId>Test</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Test</name>

<prerequisites>
	<maven>3</maven>
</prerequisites>

<properties>
	<vaadin.version>8.9.4</vaadin.version>
	<vaadin.plugin.version>8.9.4</vaadin.plugin.version>
	<jetty.plugin.version>9.3.9.v20160517</jetty.plugin.version>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<maven.compiler.source>1.8</maven.compiler.source>
	<maven.compiler.target>1.8</maven.compiler.target>
	<!-- If there are no local customisations, this can also be "fetch" or "cdn" -->
	<vaadin.widgetset.mode>local</vaadin.widgetset.mode>
</properties>

<repositories>
	<repository>
		<id>vaadin-addons</id>
		<url>http://maven.vaadin.com/vaadin-addons</url>
	</repository>
</repositories>

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>com.vaadin</groupId>
			<artifactId>vaadin-bom</artifactId>
			<version>${vaadin.version}</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

<dependencies>
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
		<version>3.0.1</version>
		<scope>provided</scope>
	</dependency>
	<dependency>
		<groupId>com.vaadin</groupId>
		<artifactId>vaadin-compatibility-server</artifactId>
	</dependency>
	<dependency>
		<groupId>com.vaadin</groupId>
		<artifactId>vaadin-push</artifactId>
	</dependency>
	<dependency>
		<groupId>com.vaadin</groupId>
		<artifactId>vaadin-compatibility-client-compiled</artifactId>
	</dependency>
	<dependency>
		<groupId>com.vaadin</groupId>
		<artifactId>vaadin-themes</artifactId>
	</dependency>
	<!-- https://mvnrepository.com/artifact/com.vaadin/vaadin-client-compiler -->
	<dependency>
		<groupId>com.vaadin</groupId>
		<artifactId>vaadin-client-compiler</artifactId>
	</dependency>
	<!-- https://mvnrepository.com/artifact/com.vaadin/vaadin-client -->
	<dependency>
		<groupId>com.vaadin</groupId>
		<artifactId>vaadin-client</artifactId>
		<scope>provided</scope>
	</dependency>
	<dependency>
        <groupId>com.vaadin.addon</groupId>
        <artifactId>jpacontainer</artifactId>
        <version>4.0.0</version>
    </dependency>
	<!-- https://mvnrepository.com/artifact/org.eclipse.persistence/eclipselink -->
	<dependency>
		<groupId>org.eclipse.persistence</groupId>
		<artifactId>eclipselink</artifactId>
		<version>2.5.2-M1</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.vaadin.addon/confirmdialog -->
	<dependency>
		<groupId>org.vaadin.addon</groupId>
		<artifactId>confirmdialog</artifactId>
		<version>3.2.0</version>
	</dependency>
	<dependency>
		<groupId>org.vaadin</groupId>
		<artifactId>resetbuttonfortextfield</artifactId>
		<version>1.2.1</version>
	</dependency>
	<dependency>
		<groupId>com.github.vaadin4qbanos</groupId>
		<artifactId>jsclipboard</artifactId>
		<version>1.0.12</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/junit/junit -->
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.12</version>
		<scope>test</scope>
	</dependency>
	<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
	<dependency>
		<groupId>com.itextpdf</groupId>
		<artifactId>itextpdf</artifactId>
		<version>5.5.6</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.0.8</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna -->
	<dependency>
		<groupId>net.java.dev.jna</groupId>
		<artifactId>jna</artifactId>
	    <version>3.0.9</version>
	</dependency>
	<dependency>
		<groupId>javax.mail</groupId>
		<artifactId>mail</artifactId>
		<version>1.4</version>
	</dependency>
</dependencies>

<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-war-plugin</artifactId>
			<version>2.6</version>
			<configuration>
				<failOnMissingWebXml>false</failOnMissingWebXml>
				<!-- Exclude an unnecessary file generated by the GWT compiler. -->
				<packagingExcludes>WEB-INF/classes/VAADIN/widgetsets/WEB-INF/**</packagingExcludes>
			</configuration>
		</plugin>
		<plugin>
			<groupId>com.vaadin</groupId>
			<artifactId>vaadin-maven-plugin</artifactId>
			<version>${vaadin.plugin.version}</version>
			<executions>
				<execution>
					<goals>
						<goal>update-theme</goal>
						<!-- <goal>update-widgetset</goal> -->
						<goal>compile</goal>
						<!-- Comment out compile-theme goal to use on-the-fly theme compilation -->
						<!--<goal>compile-theme</goal>-->
					</goals>
				</execution>
			</executions>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-clean-plugin</artifactId>
			<version>3.0.0</version>
			<!-- Clean up also any pre-compiled themes -->
			<configuration>
				<filesets>
					<fileset>
						<directory>src/main/webapp/VAADIN/themes</directory>
						<includes>
							<include>**/styles.css</include>
							<include>**/styles.scss.cache</include>
						</includes>
					</fileset>
				</filesets>
			</configuration>
		</plugin>

		<!-- The Jetty plugin allows us to easily test the development build by
			running jetty:run on the command line. -->
		<plugin>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-maven-plugin</artifactId>
			<version>${jetty.plugin.version}</version>
			<configuration>
				<scanIntervalSeconds>2</scanIntervalSeconds>
			</configuration>
		</plugin>
	</plugins>
</build>

<profiles>
	<profile>
		<!-- Vaadin pre-release repositories -->
		<id>vaadin-prerelease</id>
		<activation>
			<activeByDefault>false</activeByDefault>
		</activation>

		<repositories>
			<repository>
				<id>vaadin-prereleases</id>
				<url>http://maven.vaadin.com/vaadin-prereleases</url>
			</repository>
			<repository>
				<id>vaadin-snapshots</id>
				<url>https://oss.sonatype.org/content/repositories/vaadin-snapshots/</url>
				<releases>
					<enabled>false</enabled>
				</releases>
				<snapshots>
					<enabled>true</enabled>
				</snapshots>
			</repository>
		</repositories>
		<pluginRepositories>
			<pluginRepository>
				<id>vaadin-prereleases</id>
				<url>http://maven.vaadin.com/vaadin-prereleases</url>
			</pluginRepository>
			<pluginRepository>
				<id>vaadin-snapshots</id>
				<url>https://oss.sonatype.org/content/repositories/vaadin-snapshots/</url>
				<releases>
					<enabled>false</enabled>
				</releases>
				<snapshots>
					<enabled>true</enabled>
				</snapshots>
			</pluginRepository>
		</pluginRepositories>
	</profile>
</profiles>

18069453.png

I see quickly two dependencies which should be in provided scope: vaadin-client-compiler and vaadin-compatibility-client-compiled.

Nice Thank now its works. Has the navigator changed from Vaadin 7 to Vaadin 8 because the system can no longer navigate?