0

I have a war that I try to run under Tomcat but I get an error stating that a class is not found.

java.lang.ClassNotFoundException: org.jboss.weld.proxy.WeldConstruct

When I check the exploded war I see that the class is available. When I now move the WEB-INF/lib folder to a place out-of-sight of Tomcat and add the lib/* path to the classpath it all works fine. If I leave the classes also in the WEB-INF/lib folder Tomcat starts to complain about double found classes...

So something is going on with my classloader but I can't find it. Other project that I have just work fine. It might have something to do with weld (cdi implementation)

Any advice is welcome. Thanks!

at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
at org.apache.catalina.core.ContainerBase.startInternal(Unknown Source)
at org.apache.catalina.core.StandardHost.startInternal(Unknown Source)
at org.apache.catalina.util.LifecycleBase.start(Unknown Source)
at org.apache.catalina.core.ContainerBase$StartChild.call(Unknown Source)
at org.apache.catalina.core.ContainerBase$StartChild.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(Unknown Source)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(Unknown Source)
at org.apache.catalina.core.StandardEngine.startInternal(Unknown Source)
at org.apache.catalina.util.LifecycleBase.start(Unknown Source)
at org.apache.catalina.core.StandardService.startInternal(Unknown Source)
at org.apache.catalina.util.LifecycleBase.start(Unknown Source)
at org.apache.catalina.core.StandardServer.startInternal(Unknown Source)
at org.apache.catalina.util.LifecycleBase.start(Unknown Source)
at org.apache.catalina.startup.Catalina.start(Unknown Source)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Unknown Source)
at org.apache.catalina.startup.Bootstrap.main(Unknown Source)

Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
at org.apache.catalina.util.LifecycleBase.handleSubClassException(Unknown Source)
at org.apache.catalina.util.LifecycleBase.start(Unknown Source)
at org.apache.catalina.core.ContainerBase$StartChild.call(Unknown Source)
at org.apache.catalina.core.ContainerBase$StartChild.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(Unknown Source)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
... 22 more

Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001524: Unable to load proxy class for bean org.apache.cxf.cdi.ContextProducerBean@4d0ad526 with class class java.lang.Object
at org.jboss.weld.bootstrap.events.AbstractDeploymentContainerEvent.fire(AbstractDeploymentContainerEvent.java:38)
at org.jboss.weld.bootstrap.events.AfterDeploymentValidationImpl.fire(AfterDeploymentValidationImpl.java:28)
at org.jboss.weld.bootstrap.WeldStartup.validateBeans(WeldStartup.java:505)
at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:93)
at org.jboss.weld.environment.servlet.WeldServletLifecycle.initialize(WeldServletLifecycle.java:236)
at org.jboss.weld.environment.servlet.EnhancedListener.onStartup(EnhancedListener.java:62)
at org.apache.catalina.core.StandardContext.startInternal(Unknown Source)
... 28 more

Caused by: org.jboss.weld.exceptions.WeldException: WELD-001524: Unable to load proxy class for bean org.apache.cxf.cdi.ContextProducerBean@4d0ad526 with class class java.lang.Object
at org.jboss.weld.bean.proxy.ProxyFactory.getProxyClass(ProxyFactory.java:378)
at org.jboss.weld.bean.proxy.ProxyFactory.run(ProxyFactory.java:331)
at org.jboss.weld.bean.proxy.ProxyFactory.create(ProxyFactory.java:323)
at org.jboss.weld.bean.proxy.ClientProxyFactory.create(ClientProxyFactory.java:83)
at org.jboss.weld.bean.proxy.ClientProxyProvider.createClientProxy(ClientProxyProvider.java:205)
at org.jboss.weld.bean.proxy.ClientProxyProvider.createClientProxy(ClientProxyProvider.java:195)
at org.jboss.weld.bean.proxy.ClientProxyProvider.access$100(ClientProxyProvider.java:44)
at org.jboss.weld.bean.proxy.ClientProxyProvider$CreateClientProxy.apply(ClientProxyProvider.java:52)
at org.jboss.weld.bean.proxy.ClientProxyProvider$CreateClientProxy.apply(ClientProxyProvider.java:48)
at org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.lambda$null$0(ReentrantMapBackedComputingCache.java:55)
at org.jboss.weld.util.LazyValueHolder$1.computeValue(LazyValueHolder.java:32)
at org.jboss.weld.util.LazyValueHolder.get(LazyValueHolder.java:46)
at org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.getValue(ReentrantMapBackedComputingCache.java:72)
at org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.getCastValue(ReentrantMapBackedComputingCache.java:78)
at org.jboss.weld.bean.proxy.ClientProxyProvider.getClientProxy(ClientProxyProvider.java:229)
at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:688)
at org.jboss.weld.manager.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:794)
at org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:92)
at org.jboss.weld.util.Beans.injectBoundFields(Beans.java:336)
at org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:347)
at org.jboss.weld.injection.producer.ResourceInjector$1.proceed(ResourceInjector.java:69)
at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
at org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:71)
at org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:117)
at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:161)
at org.jboss.weld.contexts.unbound.DependentContextImpl.get(DependentContextImpl.java:70)
at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:100)
at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50)
at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:694)
at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:717)
at org.jboss.weld.util.ForwardingBeanManager.getReference(ForwardingBeanManager.java:64)
at org.jboss.weld.bean.builtin.BeanManagerProxy.getReference(BeanManagerProxy.java:87)
at org.apache.cxf.cdi.JAXRSCdiResourceExtension.loadBeans(JAXRSCdiResourceExtension.java:477)
at org.apache.cxf.cdi.JAXRSCdiResourceExtension.loadServices(JAXRSCdiResourceExtension.java:460)
at org.apache.cxf.cdi.JAXRSCdiResourceExtension.load(JAXRSCdiResourceExtension.java:248)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:95)
at org.jboss.weld.injection.MethodInvocationStrategy$SpecialParamPlusBeanManagerStrategy.invoke(MethodInvocationStrategy.java:187)
at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:330)
at org.jboss.weld.event.ExtensionObserverMethodImpl.sendEvent(ExtensionObserverMethodImpl.java:123)
at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:308)
at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:286)
at javax.enterprise.inject.spi.ObserverMethod.notify(ObserverMethod.java:124)
at org.jboss.weld.util.Observers.notify(Observers.java:166)
at org.jboss.weld.event.ObserverNotifier.notifySyncObservers(ObserverNotifier.java:285)
at org.jboss.weld.event.ObserverNotifier.notify(ObserverNotifier.java:273)
at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:177)
at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:171)
at org.jboss.weld.bootstrap.events.AbstractContainerEvent.fire(AbstractContainerEvent.java:53)
at org.jboss.weld.bootstrap.events.AbstractDeploymentContainerEvent.fire(AbstractDeploymentContainerEvent.java:35)
... 34 more

Caused by: java.lang.RuntimeException: java.lang.NoClassDefFoundError: org/jboss/weld/proxy/WeldConstruct
at org.jboss.weld.util.bytecode.ClassFileUtils.toClass(ClassFileUtils.java:138)
at org.jboss.weld.bean.proxy.ProxyFactory.createProxyClass(ProxyFactory.java:481)
at org.jboss.weld.bean.proxy.ProxyFactory.getProxyClass(ProxyFactory.java:370)
... 86 more

Caused by: java.lang.NoClassDefFoundError: org/jboss/weld/proxy/WeldConstruct
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.jboss.weld.util.bytecode.ClassFileUtils.toClass2(ClassFileUtils.java:165)
at org.jboss.weld.util.bytecode.ClassFileUtils.toClass(ClassFileUtils.java:134)
... 88 more

Caused by: java.lang.ClassNotFoundException: org.jboss.weld.proxy.WeldConstruct
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 96 more
Milo van der Zee
  • 1,031
  • 11
  • 30

1 Answers1

0

Found out that it has something to do with Apache CXF-CDI and the Weld-CDI implementation. When I remove the CXF-CDI dependency it starts (but Rest does not have CDI). With the CXF dep the lib is not found. So probably a classloader issue and something with reflection. I assume CDI uses a lot of relflexion... I now moved away from CXF and replaced it with RestEasy (also JBoss like the Weld CDI implementation) and it now works fine.

So... Is this an answer? At least there is a solution :)

Milo van der Zee
  • 1,031
  • 11
  • 30
  • Hi Milo, did you get any further with this? I've run into exactly the same issue. The issue doesn't exist for me in CXF 3.2.1, but does exist from 3.2.2 onward. Interestingly 3.2.2 makes it clearer that something odd is going on with `ContextProducerBean` when Weld tries to inject dependencies like `ServletContext`; interestingly in areas of the code completely unrelated to JAX-RS. This issue also mentions this page https://issues.apache.org/jira/browse/CXF-8176 and has a suggestion, but... not using `@Context` for `HttpServletRequest`... isn't that what it's for? – Karl von Randow Mar 03 '20 at 09:43