0

I am deploying my project on a tomcat7 server but I encounter the error stated as the title above. It shows the exception as below:

Jul 13, 2017 10:24:48 AM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter naviox
java.lang.UnsupportedClassVersionError: org/survey/model/HomeProfile: Unsupported major.minor version 52.0 (unable to load class org.survey.model.HomeProfile)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2892)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1172)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558)
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl$AggregatedClassLoader.findClass(ClassLoaderServiceImpl.java:224)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:270)
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:242)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.buildHibernateConfiguration(EntityManagerFactoryBuilderImpl.java:1136)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:853)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:425)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:849)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at org.openxava.jpa.XPersistence.getEntityManagerFactory(XPersistence.java:197)
    at org.openxava.jpa.XPersistence.createManager(XPersistence.java:112)
    at org.openxava.component.parse.AnnotatedClassParser.obtainManagedClassNamesUsingJPA(AnnotatedClassParser.java:2740)
    at org.openxava.component.parse.AnnotatedClassParser.getManagedClassNames(AnnotatedClassParser.java:2655)
    at com.openxava.naviox.impl.BaseAllModulesNamesProvider.getAllModulesNames(BaseAllModulesNamesProvider.java:19)
    at com.openxava.naviox.impl.AllModulesNamesProvider.getAllModulesNames(AllModulesNamesProvider.java:14)
    at com.openxava.naviox.impl.MetaModuleFactory.createAll(MetaModuleFactory.java:27)
    at com.openxava.naviox.impl.DB.createModules(DB.java:127)
    at com.openxava.naviox.impl.DB.populateDB(DB.java:83)
    at com.openxava.naviox.impl.DB.populateDB(DB.java:75)
    at com.openxava.naviox.impl.DB.init(DB.java:27)
    at com.openxava.naviox.Modules.init(Modules.java:39)
    at com.openxava.naviox.web.NaviOXFilter.init(NaviOXFilter.java:22)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4746)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5399)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1256)
    at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:714)
    at org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:219)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:213)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:581)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

I am new to this. Is the exception due to the difference of jdk version? I am using jdk 1.8 and the folder I deployed to is using jdk 1.7. If so, how can I solve the error?

Please help. Thanks in advance.

Brian Cheong
  • 43
  • 2
  • 14
  • 1
    Use JDK 8 with tomcat. – 11thdimension Jul 13 '17 at 02:47
  • My boss told me to downgrade my jdk1.8 to jdk1.7. How can I downgrade it? Just uninstall java8 at my pc's control panel? – Brian Cheong Jul 13 '17 at 02:49
  • 1
    You can have both versions installed on your machine. Just make your JAVA_HOME point to the version you want (java7). Take a look at this: https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/ – Tavo Jul 13 '17 at 02:53

2 Answers2

1

Your error is because of the difference in the version of the JDK which compiled the source to classes and the JRE which is trying to run it.

A higher version of JRE can run classes compiled with lower version of JDK, however lower version of JRE can't run classes compiled with higher version

In other words, Java is backwards compatible only, which makes sense.

It will result in the same error that you're getting.

If your boss told you to use Java 7, there are 3 options that you can chose.

  1. Don't use it and explain him that Java 7 is no longer supported. https://java.com/en/download/faq/java_7.xml
  2. Use Java 7 to run as well as compile the code.
  3. 2nd option will not work if you have third party libraries which were compiled in higher version of JDK or if you have source code which uses Java 8 features. Third party library issue can be resolved by either importing a version of library compiled in the older version of JDK or if you have access to the source code then by compiling it for older version yourself. If you're already using features of Java 8 then you will have to compile using source and target options in Javac to compile source with higher Java features to class file of lower Java version.

It would look something like below.

javac -source 1.8 -target 1.7 HelloWorld.java
11thdimension
  • 10,333
  • 4
  • 33
  • 71
0

When compiling .java into .class, even if you use jdk 1.8, set compliance level to 1.7, or have tomcat run using a jdk 1.8 as well. If you use javac, specify -source 1.7 -target 1.7. If you use an IDE, find a preference to set to have the same effect.
For example with Eclipse you'll find theese settings, in project/properties/Java compiler.
With NetBeans project/properties/sources/Source-Binary format.

ugo
  • 284
  • 1
  • 2
  • 10