Well,  couple thoughts:

*  If you want to submit a patch, a simple patch that would search up the 
parents like it does for @WebService would be useful.   Likely fairly 
simple.

* If you want something that would work right now, instead of using 
Endpoint.publish(...), you could split into create and publish and set some 
stuff in between via a cast to CXF's impl:

Endpoint ep = Endpoint.create(obj);
((EndpointImpl)ep).setImplementorClass(CafServiceImpl.class);
ep.publish(address);

That way CXF would use the proper class right at the start.

Dan



On Wednesday, March 28, 2012 04:13:30 PM Angelo zerr wrote:
> Hi CXF Team,
> 
> I'm using JAX-WS without Spring (with Endpoint.publish()) and I would like
> use SOAP 1.2 instead of SOAP 1.1.
> I have added the @BindingType like this:
> 
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> ------------------------------------------------------------------
> @WebService(serviceName = "CafServiceService", portName = "CafService",
> targetNamespace = "http://sidoc.intra.cnaf/";, endpointInterface =
> "cnaf.sidoc.dgp.ws.server.caf.CafService")
> @BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
> public class CafServiceImpl ....
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> ------------------------------------------------------------------
> 
> And my problem is that CXF ignores the @BindingType. I have debugged CXF
> and I have found the problem : my problem is that I publish a Javassist
> Proxy which wraps my
> CafServiceImpl class instead of publishing directly the CafServiceImpl
> class.
> 
> I have debugged CXF and when I go to the
> JaxWsImplementorInfo#getBindingType() :
> 
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> ------------------------------------------------------------------ public
> String getBindingType() {
>         BindingType bType =
> implementorClass.getAnnotation(BindingType.class);
>         if (bType != null) {
>             return bType.value();
>         }
>         return SOAPBinding.SOAP11HTTP_BINDING;
>     }
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> ------------------------------------------------------------------
> 
> BindingType is null. Why? because implementorClass is NOT
> CafServiceImpl.class but Javassist Proxy (CafServiceImpl_$$_javassist_56).
> I'm searching why @WebService works and why @BindingType doesn't work.
> The response is that @WebService is retrieved by searching on super class
> of Javassist Proxy but for @BindingType implementorClass is used and use
> the ClassHelper#getRealClass(Object o) :
> 
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> ------------------------------------------------------------------
> protected Class getRealClassInternal(Object o) {
>         return o.getClass();
>     }
> 
>     public static Class getRealClass(Object o) {
>         return HELPER.getRealClassInternal(o);
>     }
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> ------------------------------------------------------------------
> 
> The problem is o.getClass(). I have noticed that there is ClassHelper
> which tries to instanciate SpringAopClassHelper (which I suppose which
> resolves problem when Spring AOP is used) :
> 
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> ------------------------------------------------------------------ public
> class ClassHelper {
>     static final ClassHelper HELPER;
>     static {
>         ClassHelper theHelper = null;
>         try {
>             theHelper = new SpringAopClassHelper();
>         } catch (Throwable ex) {
>             theHelper = new ClassHelper();
>         }
>         HELPER = theHelper;
>     }
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> ------------------------------------------------------------------
> 
> So I think to resolve my problem is to initialize my own ClassHelper
> (JavassistClassHelper).
> 
> To do that, I have 2 suggestions :
> 
> 1) ugly mean : add a setter ClassHelper
> 
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> ------------------------------------------------------------------ public
> void static setClassHelper(ClassHelper helper) {
>   HELPER=helper;
> }
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> --------------------------------------------------------------------------
> ------------------------------------------------------------------
> 
> 2) Use SPI Provider to customize the Classhelper that we wish use it (just
> set in my project a file
> services/META-INF/org.apache.cxf.common.util.ClassHelper wich contains the
> implementation
> of ClassHelper that I wish to use.)
> 
> What do you think about that?
> 
> Many thanks for your help.
> 
> Regards Angelo
-- 
Daniel Kulp
[email protected] - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com

Reply via email to