Spring 3.1 не может загрузить класс конфигурации:

Я работаю над проектом, в котором есть Rest Service с Spring 3.1.0. Выпускать. Я использую класс Config для загрузки bean-компонентов. Как было предложено, используя банки cglib 2.2 и asm-3.3.

Это не работает в 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 jars, но безрезультатно.


person pavanlapr    schedule 19.12.2012    source источник


Ответы (4)


Убедитесь, что все зависимые файлы JAR хранятся в каталоге WEB-INF/lib вашего файла WAR, включая Sam-3.3. Если вы используете Maven, убедитесь, что вы не исключили этот JAR или непреднамеренно установили его область действия как provided.

Теперь, когда вы развертываете приложение в WebSphere, убедитесь, что вы установили загрузку класса приложения перед приложением (родитель последним). Чтобы сделать это в WebSphere, вам нужно найти ссылку Manage Modules и найти ссылку для загрузки класса, не очень помню, что это было в WebSphere, но ее легко найти. Это должно решить ваши проблемы.

Обновление: только что заметил, что предоставленная вами ссылка уже предлагает использовать родительский последний. Я считаю, что в WebSphere это необходимо, иначе вы столкнетесь со многими из этих проблем, и, кроме того, обновления станут намного проще!

person ramsinb    schedule 19.12.2012
comment
Я мог бы сделать то, что ты указал в своем ответе. Я хотел бы проголосовать за ваш ответ. Увы! У меня все еще нет 15 баллов, чтобы проголосовать.. - person pavanlapr; 20.12.2012

Я могу решить эту проблему..

Проблема связана с Websphere 8.5. У него есть собственная версия jar-файлов asm4.0. А spring3.1 использует jar cglib2.2, который совместим только с asm3.3. Виновником является asm4.0 jar websphere. Обходной путь - использовать cglib-nodep jar вместо cglib2.2 jar

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

person pavanlapr    schedule 19.12.2012
comment
В итоге это сработало для меня, и мне не пришлось возиться с загрузкой классов. - person Steve11235; 27.11.2013
comment
Да, это также работает для меня, но я не понял точной причины этого. - person Sobhagya Mohanty; 14.05.2014
comment
Не уверен, какую часть вы не получили. Ошибка заключается в том, что jar cglib2.2 сталкивается с jar asm4.0 websphere, а не с совместимым jar asm3.3, который является частью файла ear/war вашего проекта. Таким образом, используя cglib-nodep.jar, вы удаляете зависимость cgblib от asm jar. - person pavanlapr; 15.05.2014

Похоже, это была ошибка (PM71336) в Вебсфера 8.5

Ошибка была исправлена ​​в Websphere V8.5 Fix Pack 2 http://www-01.ibm.com/support/docview.wss?uid=swg24034672

person Feli    schedule 07.08.2013

Используйте jar cglib-nodep вместо jar cglib2.2. Кроме того, не забудьте удалить банку asm3.3 из вашей библиотеки. Первоначально я не удалял банку asm3.3, которая все еще вызывала проблему.

person Pan    schedule 06.12.2016