启动tomcat的时候一个奇怪的类找不到的错误研究!

来源:互联网 发布:重庆工商网络教务系统 编辑:程序博客网 时间:2024/04/28 13:46

 启动的时候有如下的错误:

[WARN ]com.sun.faces.config.rules.ConverterRule.end(ConverterRule.java:127) - [ConverterRule]{faces-config/converter} Merge(OmnipotentConverter,null)
java.lang.ClassNotFoundException: [Ljava.lang.String;
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1355)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1201)
at com.sun.faces.config.ConfigureListener.configure(ConfigureListener.java:615)
at com.sun.faces.config.ConfigureListener.configure(ConfigureListener.java:402)
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:328)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3763)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4211)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:904)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:867)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:310)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
at org.apache.catalina.core.StandardService.start(StandardService.java:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:709)
at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:494)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)
[ERROR]org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3767) - 发送初始化事件给listenercom.sun.faces.config.ConfigureListener时有异常
......

工程不能成功发布.

在网上收到了很多谈论,其中有

    Re: java.lang.ClassNotFoundException: [Ljava.lang.String;
Posted: Jun 2, 2006 2:25 AM   in response to: cayhorstmann  

  Click to reply to this thread Reply

Hi,

We have encountered a similar error a while back while
we were testing the JMX RI.
In your case the culprit seems to be here:
Caused by: java.lang.ClassNotFoundException: [Ljava.lang.String;at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1508)

The problem is that the catalina code apparently calls
ClassLoader.loadClass()

instead of calling
Class.forName(String, boolean, ClassLoader)


Hope this helps,

-- daniel

The problem you've run into seems to have been caused by a regression in the Java runtime, and is independent of the webapp classloader.

In fact, it can be reproduced very easily using this test program:

public class test {

public static void main(String[] args) throws Exception {

String[] s = new String[] { "123" };
String clName = s.getClass().getName();
test.class.getClassLoader().loadClass(clName);
}
}

This program runs fine with JDK 1.5, but throws this exception on JDK 1.6:

Exception in thread "main" java.lang.ClassNotFoundException: [Ljava.lang.String;
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at test.main(test.java:7)


I'll file a P1 against JDK 1.6 and will update you as soon as I know more.

这里讨论的是关于类似这个问题的内容,可以看出,主要是说在tomcat启动后它要加载开发人员自己写的一些类文件

但是这时会由于jdk 版本的问题,而使一些方法在使用的时候出现了不兼容或使用方式变化的问题,而使启动不能成功.

根据这样的线索,我注意观察了几个用到jdk的地方,发现在启动tomcat的时候,版本过低,于是在eclipse中将

其配置到较高的版本(jdk1.5.0.7)原来是jdk1.5,于是tomcat成功启动.至于换成jdk6.0是否会有问题,我还没有

实验,待测试中:)

原创粉丝点击