title: Exception starting filter struts2 java.lang.IncompatibleClassChangeError: Implementing class
body: <p><strong>I ultimately found that renaming an uber IBM jar named com.ibm.ws.admin.client_8.5.0.jar to start with "ws..." caused everything to work fine, from ant compile to tomcat deploy. It appears that class loading is alphabetical in the WEB-INF/lib dir (at least for now). For history of this issue, see below.  If the "duplicate" mark is lifted, I will post this as the answer to my issue to hopefully help others in the future that might face this</strong></p>
  
  <hr>
  
  <p>My code compiles fine and my app deploys to Tomcat 8 but I'm getting the following error in my Tomcat localhost log when the app attempts to start.  Any ideas on how to resolve this (or even how to get further debug info for where the issue is)?</p>
  
  <p>I have enabled FINE logging on the localhost log and found several other filters starting with no exceptions (see below updated log output).  Why is the <strong>struts2</strong> filter specifically having issues and all of these other filters aren't?</p>
  
  <p>Another update...I commented out the struts2 filter (<code>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</code> for me) and the application installs and starts with no issues.</p>
  
  <p>S2 version is 2.3.28.  Here are convention entries in my struts.xml:</p>
  
  <pre><code>&lt;constant name="struts.convention.action.suffix" value="Action" /&gt;
  &lt;constant name="struts.convention.result.path" value="/" /&gt;
  &lt;constant name="struts.convention.action.disableJarScanning" value="true" /&gt;
  &lt;constant name="struts.convention.action.mapAllMatches" value="true"/&gt;
  </code></pre>
  
  <p>Here's the tomcat localhost output:</p>
  
  <pre><code>13-Jul-2016 16:22:36.224 FINE [http-nio-8080-exec-1] org.apache.catalina.core.StandardContext.filterStart Starting filters
  13-Jul-2016 16:22:36.224 FINE [http-nio-8080-exec-1] org.apache.catalina.core.StandardContext.filterStart  Starting filter 'ApplicationInitFilter'
  13-Jul-2016 16:22:53.465 FINE [http-nio-8080-exec-1] org.apache.catalina.core.StandardContext.filterStart  Starting filter 'monitoring'
  13-Jul-2016 16:22:53.846 FINE [http-nio-8080-exec-1] org.apache.catalina.core.StandardContext.filterStart  Starting filter 'Tomcat WebSocket (JSR356) Filter'
  13-Jul-2016 16:22:53.846 FINE [http-nio-8080-exec-1] org.apache.catalina.core.StandardContext.filterStart  Starting filter 'springSecurityFilterChain'
  13-Jul-2016 16:22:53.848 FINE [http-nio-8080-exec-1] org.apache.catalina.core.StandardContext.filterStart  Starting filter 'javamelody'
  13-Jul-2016 16:22:53.848 FINE [http-nio-8080-exec-1] org.apache.catalina.core.StandardContext.filterStart  Starting filter 'struts2'
  13-Jul-2016 16:22:54.534 SEVERE [http-nio-8080-exec-1] org.apache.catalina.core.StandardContext.filterStart Exception starting filter struts2
   java.lang.IncompatibleClassChangeError: Implementing class
          at java.lang.ClassLoader.defineClass1(Native Method)
          at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
          at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
          at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2541)
          at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:858)
          at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1301)
          at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1166)
          at java.lang.ClassLoader.defineClass1(Native Method)
          at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
          at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
          at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2541)
          at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:858)
          at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1301)
          at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1166)
          at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildClassFinder(PackageBasedActionConfigBuilder.java:416)
          at org.apache.struts2.convention.PackageBasedActionConfigBuilder.findActions(PackageBasedActionConfigBuilder.java:397)
          at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:354)
          at org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:53)
          at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:274)
          at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67)
          at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:970)
          at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:438)
          at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:482)
          at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
          at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:57)
          at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
  </code></pre>