[
https://issues.apache.org/jira/browse/CXF-8176?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17004528#comment-17004528
]
Richard O'Sullivan commented on CXF-8176:
-----------------------------------------
Andriy, thank you for your recommendations. The best solution for my needs is
the recommendation to replace @Context with @Inject @Any. Locally, I modified
the sample WAR project and verified that the injection worked as expected. And
as suggested, I modified my JaxWebServiceServlet to extend CXFCdiServlet
instead of CXFNonSpringServlet.
Also, I found that @Context works successfully when it is applied as a method
annotation like this 'ping2(@Context HttpServletRequest request)' instead of my
attempted field annotation.
I tested the fixes with CXF v3.2.1 / v3.2.2 / v3.2.7 and the Maven plugins for
Tomcat 7x / 9x and Jetty 9x.
I experimented with the suggestion to 'bundle Weld with servlet container (i.e.
Tomcat)' but that led to a gnarly wormhole of dependency issues. And I prefer
to keep Tomcat mostly vanilla for architectural reasons. The previous solutions
work better for me.
I experimented with declaring the scope modifier, to be public, on the
constructor in the ContextProducerBean class; but, that has no benefit. The
existing 'package private' scope is OK.
You may close this issue as resolved.
> Apache CXF @Context not class loading.
> --------------------------------------
>
> Key: CXF-8176
> URL: https://issues.apache.org/jira/browse/CXF-8176
> Project: CXF
> Issue Type: Bug
> Components: Integration
> Affects Versions: 3.2.2
> Reporter: Richard O'Sullivan
> Priority: Major
> Attachments: CXF-ContentProducerBean-Fail-to-Load-Stacktrace.txt,
> cxf-servlet-bug.tar.gz
>
>
> I have a WAR containing cxf-integration-cdi-3.2.1.jar that I deploy to Tomcat
> V9, successfully. When I deploy a WAR containing
> cxf-integration-cdi-3.2.7.jar, it fails to deploy because:
> {quote}org.jboss.weld.exceptions.WeldException: WELD-001524: Unable to load
> proxy class for bean org.apache.cxf.cdi.ContextProducerBean@28c30f4d with
> class class java.lang.Object using classloader
> java.net.URLClassLoader@695caf9f
> {quote}
> My WAR includes the Weld v2.4.6 jars.
> Note: The ContextProducerBean class was introduced in CXF v3.2.2.
> Others on the web, have reported a similar issue:
> *
> [https://stackoverflow.com/questions/56905194/class-not-found-in-war-but-is-available]
> * [https://t.codebug.vip/questions-112783.htm]
> I'm suspicious that there is no scope modifier on the constructor in the
> ContextProducerBean class; thus, causing the scope to default to 'package
> private' and become hidden from Tomcat's class loader. Also, the super class,
> AbstractCXFBean<Object> does not declare a scope either. The fix might be to
> add the 'public' modifier to both, just guessing.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)