2012-12-19 74 views
1

我正在使用Spring 3.1.0的Rest Service进行项目工作。发布。 我正在使用Config类来加载bean。 建议使用cglib 2.2和asm-3.3罐子。Spring 3.1无法加载配置类:

这在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罐子,但没有运气..

回答

3

我能解决这个问题..

问题是与WebSphere 8.5 它自己asm4.0版本罐子。而spring3.1使用仅与asm3.3兼容的cglib2.2 jar。的WebSphere asm4.0罐子是罪魁祸首.. 解决办法是使用CGLIB的节点p罐子代替cglib2.2罐子

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

+0

这最终为我工作,我没有乱加载类。 – Steve11235

+0

是的,它也适用于我,但是,我没有得到确切的原因。 –

+0

不确定哪部分你没有得到。错误是因为cglib2.2 jar遇到了asm4.0的websphere jar而不是兼容的asm3.3 jar,它是你的项目ear/war文件的一部分。所以通过使用cglib-nodep.jar,你可以移除cgblib对asm jars的依赖。 – pavanlapr

3

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

现在,您将在WebSphere中部署应用程序,请确保您先将应用程序类加载设置为应用程序第一位(最后一位)。要在WebSphere中执行此操作,您需要找到链接Manage Modules并找到类加载链接,但不记得它在WebSphere中的含义,但应该很容易找到。这应该可以解决您的问题。

更新:刚刚注意到您提供的链接已经建议使用父最后。在WebSphere中,我认为这是必须的,否则你会遇到很多这些问题,而且升级变得更容易!

+0

我可以完成你在答案中指定的内容。我希望我能投票答复你的答案。唉!我仍然没有15点投票.. – pavanlapr

+0

我认为这将工作,但它没有。见下面的答案。 – Steve11235

0

使用CGLIB,节点p罐子代替cglib2。 2罐。另外,不要忘记从lib中移除asm3.3 jar。最初我没有移除仍然导致问题的asm3.3 jar。

相关问题