title: NoClassDefFoundError in Websphere -- JARs are present
body: <p>I have a simple Spring MVC application that looks up some user details from an LDAP server and prints out a simple HTML page using a JSP. The application works fine on Tomcat 6. It uses Spring LDAP 1.3.1 and LDAPTemplate to do the LDAP lookups.</p>
  
  <p>However, when I deploy this application WAR to Websphere 7, the app doesn't run -- Websphere returns a 500 Internal server error. Looking at Websphere's log file, I see</p>
  
  <pre><code>[14/12/10 14:50:09:169 GMT] 00000022 DispatcherSer E org.springframework.web.servlet.FrameworkServlet initServletBean Context initialization failed
  org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.ldap.core.support.LdapContextSource] for bean with name 'contextSource' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: org.springframework.beans.factory.InitializingBean
  at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1253)
  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:576)
  at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1319)
  at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:885)
  at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:562)
  at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
  at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
  </code></pre>
  
  <p>My web-inf\lib directory has all the JAR files, including <code>org.springframework.beans-3.0.5.RELEASE.jar</code>, which contains <code>InitializingBean</code>. I'm therefore not sure why Websphere is reporting the class as missing.</p>
  
  <p>Contents of my web-inf\lib:</p>
  
  <pre><code>aopalliance.jar
  com.springsource.org.apache.commons.logging-1.1.1.jar
  com.springsource.org.apache.log4j-1.2.15.jar
  commons-lang-2.5.jar
  commons-logging-1.1.1.jar
  commons-pool-1.5.4.jar
  jstl-api-1.2.jar
  jstl-impl-1.2.jar
  ldapbp-1.0.jar
  org.springframework.aop-3.0.5.RELEASE.jar
  org.springframework.asm-3.0.5.RELEASE.jar
  org.springframework.beans-3.0.5.RELEASE.jar
  org.springframework.context-3.0.5.RELEASE.jar
  org.springframework.core-3.0.5.RELEASE.jar
  org.springframework.expression-3.0.5.RELEASE.jar
  org.springframework.jdbc-3.0.5.RELEASE.jar
  org.springframework.oxm-3.0.5.RELEASE.jar
  org.springframework.transaction-3.0.5.RELEASE.jar
  org.springframework.web-3.0.5.RELEASE.jar
  org.springframework.web.servlet-3.0.5.RELEASE.jar
  spring-ldap-1.3.1.RELEASE-all.jar
  </code></pre>
  
  <p>And here's the definition of the <code>contextSource</code> bean which Websphere is having trouble loading (the username/password is valid and works with Tomcat):</p>
  
  <pre><code>&lt;bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource"&gt;
    &lt;property name="url" value="ldaps://moo.example.com:1300/" /&gt;
    &lt;property name="userDn" value="CN=foo,OU=baz,DC=bar,DC=blat,DC=org" /&gt;
    &lt;property name="password" value="*******" /&gt;
  &lt;/bean&gt;
  </code></pre>
  
  <p>I'd be very glad if someone could point out why this isn't working on Websphere. I'm not too sure about class-loading rules in Websphere and would appreciate any advice on this.</p>