java.lang.NoClassDefFoundError: Could not initializeCX class weblogic.wsee.jaxws.spi.WLSProvider

  • Jar文件的权限问题也可能导致NoClassDefFoundError如果你的程序运行在像linux这样多用户的操作系统种,你需要把你应用相关的资源文件如Jar文件,类库文件配置文件的权限单独分配给程序所属用户组,如果你使用了多个用户不同程序共享的jar包时很容易出现权限问题。比如其他用户应用所属权限的jar包你的程序没有权限访問会导致java.lang.NoClassDefFoundError的错误。
  • 基于XML配置的程序也可能导致NoClassDefFoundError的错误比如大多数Java的框架像Spring,使用xml配置获取对应的bean信息如果你输入了错误的名称,程序可能会加载其他错误的类而导致NoClassDefFoundError异常我们在使用Spring MVC框架或者Apache
  • 在有多个ClassLoader的J2EE的环境中,很容易出现NoClassDefFoundError的错误由于J2EE没有指明标准的类加载器,使用的类加载器依赖与不同的容器像Tomcat、加载J2EE的不同组件如War包或者EJB-JAR包。关于类加载器的相关知识可以参考这篇文章

    总结来说,类加载器基于三个机制:委托、可见性和单一性委托机制是指将加载一个类的请求交给父类加载器,如果这个父类加载器不能够找到或者加载这個类那么再加载它。可见性的原理是子类的加载器可以看见所有的父类加载器加载的类而父类加载器看不到子类加载器加载的类。单┅性原理是指仅加载一个类一次这是由委托机制确保子类加载器不会再次加载父类加载器加载过的类。现在假设一个User类在WAR文件和EJB-JAR文件都存在并且被WAR

    这会导致的结果就是对User类出现NoClassDefFoundError异常,而如果在两个JAR包中这个User类都存在如果你使用equals方法比较两个类的对象时,会出现ClassCastException的异常因为两个不同类加载器加载的类无法进行比较。

  • Java在执行linking操作的时候也可能导致NoClassDefFoundError。例如在前面的脚本中如果在编译完成之后,我们删除User的编译文件再运行程序,这个时候你就会直接得到NoClassDefFoundError而错误的消息只打印出User类的名称。

我要回帖

更多关于 initializeCX 的文章

 

随机推荐