【问题标题】:Spring 3.1 not able to load Configuration Class:Spring 3.1 无法加载配置类:
【发布时间】:2012-12-07 03:51:59
【问题描述】:

我正在开发带有 Spring 3.1.0 的 Rest Service 的项目。发布。 我正在使用 Config 类来加载 bean。 按照建议,使用 cglib 2.2 和 asm-3.3 jar。

这在 websphere 8.5 中失败,但有以下异常。但适用于 Apache Tomcat 7.0。

[12/19/12 12:47:26:439 EST] 00000062 webapp        E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet Error]-[dispatcher]: java.lang.IllegalStateException: Cannot load configuration class: com.hps.config.ApplicationConfig
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:313)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(ConfigurationClassPostProcessor.java:197)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:681)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:620)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:446)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:384)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
    at com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.java:1651)
    at com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:414)
    at com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.java:88)
    at com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.java:169)
    at com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.java:746)
    at com.ibm.ws.webcontainer.WSWebContainer.addWebApplication(WSWebContainer.java:634)
    at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:426)
    at com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.java:718)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1170)
    at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1370)
    at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:638)
    at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:968)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:769)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplicationDynamically(ApplicationMgrImpl.java:1364)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2169)


Caused by: java.lang.VerifyError: JVMVRFY007 final method overridden; class=net/sf/cglib/core/DebuggingClassWriter, method=visit(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
    at java.lang.ClassLoader.defineClassImpl(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:262)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:69)
    at com.ibm.ws.classloader.CompoundClassLoader._defineClass(CompoundClassLoader.java:852)
    at com.ibm.ws.classloader.CompoundClassLoader.localFindClass(CompoundClassLoader.java:762)
    at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:585)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:627)
    at java.lang.J9VMInternals.verifyImpl(Native Method)
    at java.lang.J9VMInternals.verify(J9VMInternals.java:85)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:162)
    at net.sf.cglib.core.AbstractClassGenerator.<init>(AbstractClassGenerator.java:38)
    at net.sf.cglib.core.KeyFactory$Generator.<init>(KeyFactory.java:127)
    at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:112)
    at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
    at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
    at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
    at java.lang.J9VMInternals.initializeImpl(Native Method)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:228)
    at org.springframework.context.annotation.ConfigurationClassEnhancer.newEnhancer(ConfigurationClassEnhancer.java:136)
    at org.springframework.context.annotation.ConfigurationClassEnhancer.enhance(ConfigurationClassEnhancer.java:109)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:303)
    ... 109 more

关于如何解决此问题的任何建议。

尝试了不同版本的 cglib 和 asm jar,但没有运气..

【问题讨论】:

    标签: spring websphere cglib


    【解决方案1】:

    确保所有依赖的 JAR 文件都存储在您的 WAR 文件的 WEB-INF/lib 目录中,包括 Sam-3.3。如果您使用 Maven,请确保您没有排除此 JAR 或无意中将其范围设置为 provided。

    现在您在 WebSphere 中部署应用程序,确保将应用程序类加载之前设置为应用程序优先(父类最后)。要在 WebSphere 中执行此操作,您需要找到链接 Manage Modules 并找到类加载链接,实际上不记得它在 WebSphere 中是什么但应该很容易找到。这应该可以解决您的问题。

    更新:刚刚注意到您提供的链接已经建议使用 parent last。在 WebSphere 中,我发现这是必须的,否则您将遇到许多此类问题,而且升级变得更加容易!

    【讨论】:

    • 我本可以按照您在回答中指定的方式完成。我希望我能投票赞成你的答案。唉!我还没有 15 分可以投票..
    【解决方案2】:

    我能够解决这个问题..

    问题在于 Websphere 8.5 它有自己的 asm4.0 jar 版本。而spring3.1使用的是cglib2.2的jar,只兼容asm3.3。 asm4.0 jar 的 websphere 是罪魁祸首.. 解决方法是使用 cglib-nodep jar 而不是 cglib2.2 jar

    http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14880673

    【讨论】:

    • 这最终为我工作,我不必搞乱类加载。
    • 是的,它也适用于我,但我没有得到确切的原因。
    • 不确定您没有得到哪个部分。错误是因为 cglib2.2 jar 遇到了 websphere 的 asm4.0 jar,而不是作为项目 ear/war 文件一部分的兼容 asm3.3 jar。因此,通过使用 cglib-nodep.jar,您可以消除 cgblib 对 asm jar 的依赖。
    【解决方案3】:

    这似乎是 Websphere 8.5 中的一个错误 (PM71336)

    该错误已在 Websphere V8.5 Fix Pack 2 中修复 http://www-01.ibm.com/support/docview.wss?uid=swg24034672

    【讨论】:

      【解决方案4】:

      使用 cglib-nodep jar 代替 cglib2.2 jar。另外,不要忘记从你的库中删除 asm3.3 jar。最初我没有删除仍然导致问题的 asm3.3 jar。

      【讨论】:

        猜你喜欢
        • 2016-07-25
        • 2021-10-02
        • 2014-10-24
        • 1970-01-01
        • 2015-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多