0

У меня есть файл EAR/WAR, который должен быть развернут на сервере приложений Websphere. В веб-приложении используется spring-web/webmvc. Полный стек весенних банок добавляется к пути класса приложений сервера Websphere (посредством управления). Поэтому я отправляю только 1 файл jar (castor-1.2.jar) в WEB-INF/lib этого WAR-файла веб-приложений, поскольку это требуется только этому приложению. В политике загрузки классов установлено значение PARENT_LAST.ClassNotFoundException/NoClassDefFoundException с помощью Websphere и Spring

Spring config ссылается на класс, который поставляется как часть WAR-файла.

Во время запуска приложения я получаю и ClassNotFoundException и NoClassDefFoundError для класса, который содержится в файле castor-1.2.jar внутри WEB-INF/lib.

Может ли кто-нибудь объяснить, почему классный загрузчик не найдет классы касторов, пока кластеры Spring развернуты на пути к серверному классу, а кастор отправлен как часть приложения?

1 - Module - com.ibm.ws.classloader.CompoundClassLoader 
     file: ... test-ear.ear/test-war.war/WEB-INF/lib/castor-1.2.jar 
2 - Module - com.ibm.ws.classloader.CompoundClassLoader 
3 - Server-associated - com.ibm.ws.classloader.ExtJarClassLoader 
     file: ... clusters/cluster1/custom/classpath/base-lib/spring-webmvc-3.2.9.RELEASE.jar 
     ... other spring libraries 
4 - ... 

Что я могу сделать (кроме как избыточно перевозки весной библиотеки в комплекте с WAR - который работает, кстати), чтобы решить эту проблему?

Это исключение:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.view.xml.MarshallingView#16799e2d' defined in ServletContext resource [/WEB-INF/castortest-servlet.xml]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org.exolab.castor.mapping.MappingException 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:529) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:276) 
     ... 81 more 
Caused by: java.lang.NoClassDefFoundError: org.exolab.castor.mapping.MappingException 
     at java.lang.J9VMInternals.verifyImpl(Native Method) 
     at java.lang.J9VMInternals.verify(J9VMInternals.java:93) 
     at java.lang.J9VMInternals.prepare(J9VMInternals.java:490) 
     at java.lang.Class.getDeclaredConstructors(Class.java:533) 
     at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:231) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1002) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:975) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:276) 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:122) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1417) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1158) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
     ... 83 more 
Caused by: java.lang.ClassNotFoundException: org.exolab.castor.mapping.MappingException 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:434) 
     at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:204) 
     at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:688) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:667) 
     at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:119) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:650) 
     at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62) 
     at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58) 
     at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:598) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:650) 
     ... 97 more 
+0

Я предлагаю вам пройти через это - http://javareferencegv.blogspot.com/2013 /10/debugging-javalangnoclassdeffounderror.html –

ответ

0

Вам необходимо следующее:

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-oxm</artifactId> 
     <version>3.0.5.RELEASE</version> 
    </dependency> 

    <!-- Uses Castor for XML --> 
    <dependency> 
     <groupId>org.codehaus.castor</groupId> 
     <artifactId>castor</artifactId> 
     <version>1.2</version> 
    </dependency> 

    <!-- Castor need this --> 
    <dependency> 
     <groupId>xerces</groupId> 
     <artifactId>xercesImpl</artifactId> 
     <version>2.8.1</version> 
    </dependency> 

</dependencies>