DWR

SpringSource Tool Suite - ClassNotFoundException

Details

  • Type: Task Task
  • Status: Closed Closed
  • Priority: Normal Normal
  • Resolution: Non-issue
  • Affects Version/s: None
  • Fix Version/s: None
  • Component/s: Core, Spring
  • Documentation Required:
    No
  • Description:
    Hide
    [STS] DWR namespace handler fails with ClassNotFoundException from the users mailing list:

    After upgrading to SpringSource Tool Suite (SpringIDE) 2.5.2, DWR throws ClassNotFoundException on project validation if "Load NamespaceHandlers and XSDs from project's classpath" is enabled. I have looked into DWR namespace handler code and it uses thread context class loader on line 338 (2.0.6 source) (through ClassUtils.forName):

    beanCreator.addPropertyValue("beanClass", ClassUtils.forName(beanClassName));

    Problem is that while namespace handler is loaded within SpringIDE, the thread context class loader is eclipse default class loader. Therefore DWR namespace handler is unable to load classes from project.

    My question is: are you aware of that issue? What would you advice in that case?

    Best regards,
    Piotr Tomiak,
    Genuitec LLC


    Stack trace of the exception:

    org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from file [/home/piotr/Workspaces/MyEclipse Blue Edition 9/DWRSpringJPAExample/WebRoot/WEB-INF/applicationContext.xml]; nested exception is org.springframework.beans.FatalBeanException: Unable to create DWR bean creator for 'carViewer'.; nested exception is java.lang.ClassNotFoundException: com.myeclipseide.examples.dwrspring.bean.CarViewer
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
    at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$2.loadBeanDefinitions(BeansConfig.java:374)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$3.call(BeansConfig.java:418)
    at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$3.call(BeansConfig.java:1)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)

    Caused by: org.springframework.beans.FatalBeanException: Unable to create DWR bean creator for 'carViewer'.; nested exception is java.lang.ClassNotFoundException: com.myeclipseide.examples.dwrspring.bean.CarViewer
    at org.directwebremoting.spring.DwrNamespaceHandler$RemoteBeanDefinitionDecorator.decorate(DwrNamespaceHandler.java:342)
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.decorate(NamespaceHandlerSupport.java:97)
    at org.springframework.ide.eclipse.beans.core.internal.model.namespaces.DelegatingNamespaceHandlerResolver$ElementTrackingNamespaceHandler.decorate(DelegatingNamespaceHandlerResolver.java:190)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.decorateIfRequired(BeanDefinitionParserDelegate.java:1372)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.decorateBeanDefinitionIfRequired(BeanDefinitionParserDelegate.java:1359)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.decorateBeanDefinitionIfRequired(BeanDefinitionParserDelegate.java:1339)
    at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$ToolingFriendlyBeanDefinitionDocumentReader.processBeanDefinition(BeansConfig.java:1214)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:153)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:132)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:93)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
    at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$2.registerBeanDefinitions(BeansConfig.java:388)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
    ... 13 more

    Caused by: java.lang.ClassNotFoundException: com.myeclipseide.examples.dwrspring.bean.CarViewer
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at org.eclipse.core.runtime.internal.adaptor.ContextFinder.loadClass(ContextFinder.java:129)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:257)
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:204)
    at org.directwebremoting.spring.DwrNamespaceHandler$RemoteBeanDefinitionDecorator.decorate(DwrNamespaceHandler.java:338)
    ... 25 more
    Show
    [STS] DWR namespace handler fails with ClassNotFoundException from the users mailing list: After upgrading to SpringSource Tool Suite (SpringIDE) 2.5.2, DWR throws ClassNotFoundException on project validation if "Load NamespaceHandlers and XSDs from project's classpath" is enabled. I have looked into DWR namespace handler code and it uses thread context class loader on line 338 (2.0.6 source) (through ClassUtils.forName): beanCreator.addPropertyValue("beanClass", ClassUtils.forName(beanClassName)); Problem is that while namespace handler is loaded within SpringIDE, the thread context class loader is eclipse default class loader. Therefore DWR namespace handler is unable to load classes from project. My question is: are you aware of that issue? What would you advice in that case? Best regards, Piotr Tomiak, Genuitec LLC Stack trace of the exception: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from file [/home/piotr/Workspaces/MyEclipse Blue Edition 9/DWRSpringJPAExample/WebRoot/WEB-INF/applicationContext.xml]; nested exception is org.springframework.beans.FatalBeanException: Unable to create DWR bean creator for 'carViewer'.; nested exception is java.lang.ClassNotFoundException: com.myeclipseide.examples.dwrspring.bean.CarViewer at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$2.loadBeanDefinitions(BeansConfig.java:374) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$3.call(BeansConfig.java:418) at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$3.call(BeansConfig.java:1) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) Caused by: org.springframework.beans.FatalBeanException: Unable to create DWR bean creator for 'carViewer'.; nested exception is java.lang.ClassNotFoundException: com.myeclipseide.examples.dwrspring.bean.CarViewer at org.directwebremoting.spring.DwrNamespaceHandler$RemoteBeanDefinitionDecorator.decorate(DwrNamespaceHandler.java:342) at org.springframework.beans.factory.xml.NamespaceHandlerSupport.decorate(NamespaceHandlerSupport.java:97) at org.springframework.ide.eclipse.beans.core.internal.model.namespaces.DelegatingNamespaceHandlerResolver$ElementTrackingNamespaceHandler.decorate(DelegatingNamespaceHandlerResolver.java:190) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.decorateIfRequired(BeanDefinitionParserDelegate.java:1372) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.decorateBeanDefinitionIfRequired(BeanDefinitionParserDelegate.java:1359) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.decorateBeanDefinitionIfRequired(BeanDefinitionParserDelegate.java:1339) at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$ToolingFriendlyBeanDefinitionDocumentReader.processBeanDefinition(BeansConfig.java:1214) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:153) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:132) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:93) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493) at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$2.registerBeanDefinitions(BeansConfig.java:388) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) ... 13 more Caused by: java.lang.ClassNotFoundException: com.myeclipseide.examples.dwrspring.bean.CarViewer at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at org.eclipse.core.runtime.internal.adaptor.ContextFinder.loadClass(ContextFinder.java:129) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at org.springframework.util.ClassUtils.forName(ClassUtils.java:257) at org.springframework.util.ClassUtils.forName(ClassUtils.java:204) at org.directwebremoting.spring.DwrNamespaceHandler$RemoteBeanDefinitionDecorator.decorate(DwrNamespaceHandler.java:338) ... 25 more

Activity

Hide
David Marginian added a comment - 17/Mar/11 5:41 AM

Erik, do you think you can take a quick look at this and provide some suggestions?

Show
David Marginian added a comment - 17/Mar/11 5:41 AM Erik, do you think you can take a quick look at this and provide some suggestions?
Hide
David Marginian added a comment - 17/Mar/11 7:49 AM

Hi!

We have reported that issue to STS team also. They prepared a fix. I think that there is no better way to load bean's classes then calling thread context classloader, as NamespaceHandler does not have access to proper ClassLoader. Better way than changing API

Best regards,
Piotr Tomiak

Show
David Marginian added a comment - 17/Mar/11 7:49 AM Hi! We have reported that issue to STS team also. They prepared a fix. I think that there is no better way to load bean's classes then calling thread context classloader, as NamespaceHandler does not have access to proper ClassLoader. Better way than changing API Best regards, Piotr Tomiak

People

Dates

  • Created:
    17/Mar/11 5:39 AM
    Updated:
    17/Mar/11 7:49 AM
    Resolved:
    17/Mar/11 7:49 AM