ClassNotFoundException,如何查找缺少类的位置

时间:2017-08-09 11:15:04

标签: java deployment jar weblogic classnotfoundexception

我正在Weblogic 12c上部署EAR包,并获得ClassNotFoundException。但是,似乎该项目没有任何对相关缺失类的引用(我搜索了类名称为零结果)。我知道当尝试通过反射实例化缺少类时抛出此异常。我怀疑某些图书馆可能依赖于这门课程。

如何找出导致类实例化的配置或用户代码?服务器日志没有提供足够的详细信息,但这里是

<9.8.2017, 1:07:05,113 ip. EEST> <Error> <Console> <BEA-240003> <Administration Console encountered the following error: weblogic.application.ModuleException: java.lang.ClassNotFoundException: fi.foo.bar.service.FoobarWebServiceImpl
    at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140)
    at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:233)
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:228)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
    at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:78)
    at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:52)
    at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:750)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
    at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:260)
    at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:66)
    at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165)
    at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:90)
    at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:627)
    at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:171)
    at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:121)
    at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:347)
    at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:901)
    at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1456)
    at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:456)
    at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:181)
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:217)
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:14)
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:69)
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:666)
    at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348)
    at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333)
    at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54)
    at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
    at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:640)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:406)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:346)
Caused by: java.lang.ClassNotFoundException: fi.foo.bar.service.FoobarWebServiceImpl
    at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:1026)
    at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:987)
    at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:83)
    at weblogic.utils.classloaders.GenericClassLoader.doFindClass(GenericClassLoader.java:608)
    at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:540)
    at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:493)
    at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:470)
    at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:53)
    at weblogic.servlet.internal.WebAppServletContext.initContainerInitializer(WebAppServletContext.java:1414)
    at weblogic.servlet.internal.WebAppServletContext.initContainerInitializers(WebAppServletContext.java:1360)
    at weblogic.servlet.internal.WebAppServletContext.initContainerInitializers(WebAppServletContext.java:1341)
    at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1907)
    at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3091)
    at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1823)
    at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:882)
    at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:360)
    at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:356)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
    at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:138)

3 个答案:

答案 0 :(得分:2)

您的Weblogic无法加载管理控制台。也许在qustion中类的应用程序的更频繁部署失败了。请尝试以下方法:

  1. 关闭该域下的所有群集

  2. 删除所有服务器上的 tmp 缓存文件夹

  3. 在待处理的目录下删除 config.xml 文件

  4. 删除/ config和/ domain文件夹下所有服务器上的 * .lok 文件

  5. 重新启动管理

  6. 重新启动所有受管服务器

  7. 现在部署 war / ear 文件,它应该可以正常工作......

答案 1 :(得分:1)

您可以在IDE中使用异常断点来捕获ClassNotFoundException。添加此类断点时,一旦发生异常,执行将暂停。然后,您可以遍历可在IDE中找到的堆栈,并通过选择堆栈行,查看每个步骤中的数据,以找出代码尝试实例化该类型对象的位置。

答案 2 :(得分:0)

您的应用程序无法加载&#39; fi.foo.bar.service.FoobarWebServiceImpl&#39;,它位于WebAppModule的WebAppServletContext中。在web.xml或weblogic.xml中仔细检查&#39; fi.foo.bar.service.FoobarWebServiceImpl&#39;的拼写错误的类名。