java.lang.NoClassDefFoundError: test/n (wrong name: test/N)
-----------------------------------------------------------
Key: JBAS-9211
URL:
https://issues.jboss.org/browse/JBAS-9211
Project: JBoss Application Server
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: Modules / Class-loading
Affects Versions: 6.0.0.M3, 6.0.0.Final
Environment: JBoss 6.0.0.Final, Red Hat Enterprise Linux Server release 5.5
(Tikanga)
Linux 2.6.18-194.el5 #1 SMP x86_64 x86_64 x86_64 GNU/Linux
Reporter: miguel cheng
Assignee: Scott Stark
Priority: Critical
Attachments: JBAS8408.war
When a jar file in the WEB-INF/lib folder contains a classname with different case. For
example, test/N.class and test/n.class.
JBoss AS can load the test/N.class but not test/n.class. Once construct the
"test.n" object. NoClassDefFoundError will be thrown as follows:
13:52:17,864 ERROR
[org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/JBAS8408].[JBAS8408Servlet]]
Servlet.service() for servlet JBAS8408Servlet threw exception:
java.lang.NoClassDefFoundError: test/n (wrong name: test/N)
at java.lang.ClassLoader.defineClass1(Native Method) [:1.6.0_22]
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) [:1.6.0_22]
at java.lang.ClassLoader.defineClass(ClassLoader.java:616) [:1.6.0_22]
at org.jboss.classloader.spi.base.BaseClassLoader.access$200(BaseClassLoader.java:52)
[jboss-classloader.jar:2.2.0.GA]
at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:650)
[jboss-classloader.jar:2.2.0.GA]
at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:609)
[jboss-classloader.jar:2.2.0.GA]
at java.security.AccessController.doPrivileged(Native Method) [:1.6.0_22]
at
org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:608)
[jboss-classloader.jar:2.2.0.GA]
at
org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:585)
[jboss-classloader.jar:2.2.0.GA]
at
org.jboss.classloader.spi.base.BaseDelegateLoader.loadClass(BaseDelegateLoader.java:156)
[jboss-classloader.jar:2.2.0.GA]
at
org.jboss.classloader.spi.filter.FilteredDelegateLoader.doLoadClass(FilteredDelegateLoader.java:141)
[jboss-classloader.jar:2.2.0.GA]
at
org.jboss.classloader.spi.filter.FilteredDelegateLoader.loadClass(FilteredDelegateLoader.java:132)
[jboss-classloader.jar:2.2.0.GA]
at
org.jboss.classloader.spi.base.ClassLoadingTask$ThreadTask.run(ClassLoadingTask.java:461)
[jboss-classloader.jar:2.2.0.GA]
at
org.jboss.classloader.spi.base.ClassLoaderManager.nextTask(ClassLoaderManager.java:262)
[jboss-classloader.jar:2.2.0.GA]
at
org.jboss.classloader.spi.base.ClassLoaderManager.process(ClassLoaderManager.java:161)
[jboss-classloader.jar:2.2.0.GA]
at
org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:260)
[jboss-classloader.jar:2.2.0.GA]
at
org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:1152)
[jboss-classloader.jar:2.2.0.GA]
at
org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:886)
[jboss-classloader.jar:2.2.0.GA]
at org.jboss.classloader.spi.base.BaseClassLoader.doLoadClass(BaseClassLoader.java:505)
[jboss-classloader.jar:2.2.0.GA]
at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:450)
[jboss-classloader.jar:2.2.0.GA]
at java.lang.ClassLoader.loadClass(ClassLoader.java:248) [:1.6.0_22]
at test.JBAS8408Servlet.doGet(JBAS8408Servlet.java:14) [:]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) [:1.0.0.Final]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [:1.0.0.Final]
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324)
[:6.0.0.Final]
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242)
[:6.0.0.Final]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
[:6.0.0.Final]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
[:6.0.0.Final]
at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181)
[:6.0.0.Final]
at
org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285)
[:1.1.0.Final]
at
org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261)
[:1.1.0.Final]
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88)
[:6.0.0.Final]
at
org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100)
[:6.0.0.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
[:6.0.0.Final]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
[:6.0.0.Final]
at
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
[:6.0.0.Final]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
[:6.0.0.Final]
at
org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53)
[:6.0.0.Final]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362)
[:6.0.0.Final]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
[:6.0.0.Final]
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654)
[:6.0.0.Final]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951)
[:6.0.0.Final]
at java.lang.Thread.run(Thread.java:662) [:1.6.0_22]
In Linux, we can extract the library jar manually to the WEB-INF/classes folder. As such,
the Class with the same name but in different case can be loaded properly.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: