[ 
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)

Reply via email to