2012-12-19 137 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。

相關問題