0

I moved my war file (which ran on tomcat 7 environment) to tomcat 6 environment.Then I get this exception .And as solutions I tried This answer.But still no good!! I want to run on a remote machine which has tomcat 6 only.Please help me out..

Exception

 javax.servlet.ServletException: java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/catalina/loader/WebappClassLoader) previously initiated loading for a different type with name "javax/el/ExpressionFactory"
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:268)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
        org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
        org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
        org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
        org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

    root cause

    java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/catalina/loader/WebappClassLoader) previously initiated loading for a different type with name "javax/el/ExpressionFactory"
        java.lang.ClassLoader.defineClass1(Native Method)
        java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2331)
        org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:976)
        org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1451)
        org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1329)
        org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:128)
        org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
        java.lang.Class.getDeclaredFields0(Native Method)
        java.lang.Class.privateGetDeclaredFields(Class.java:2397)
        java.lang.Class.getDeclaredFields(Class.java:1806)
        org.apache.catalina.util.DefaultAnnotationProcessor.processAnnotations(DefaultAnnotationProcessor.java:181)
        org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:148)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
        org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
        org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
        org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
        org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
Community
  • 1
  • 1
Amila Iddamalgoda
  • 4,166
  • 11
  • 46
  • 85

2 Answers2

1

You have two versions of the expression language in you classpath. The one loaded by your app is not compatible to your servers one. Have a look at a file called javax.el-api, commons-el, or jboss-el-api, etc. Try to remove that from your app, since Tomcat shipps with its own.

Stefan
  • 12,108
  • 5
  • 47
  • 66
0

I was stuck with this error for a very long time. Adding some research I did before resolving this issue. Yes we need to remove libraries like jsp-api.jar, el-api.jar, servlet-api.jar from /WEB-INF/lib folder. But how?

In my case I am using Apache Ivy as a dependency manger and used Spring MVC. It downloads all dependencies along with the libraries mentioned above. At runtime these conflicts with the APIs provided by Tomcat libraries. Simple solution would be to exclude these jars from dependencies or create configurations and include these libraries in compile time configuration only. What worked for me quickly is excluding these libraries.

    <dependency org="org.springframework" name="spring-webmvc"
        rev="4.0.4.RELEASE">
        <exclude org="javax.servlet" name="javax.servlet-api" />
        <exclude org="javax.servlet.jsp" name="jsp-api" />
        <exclude org="javax.el" name="javax.el-api" />
    </dependency>
Aniket Thakur
  • 66,731
  • 38
  • 279
  • 289