I tried out the DOSGI change and it will work very well--the only thing
missing is the ability to specify in.fault and out.fault interceptors to
cover all interceptor lifecycles. Also, I have a suggestion on the
implementation--in ClassUtils, I think the loadProviderClasses should also
check the serviceProviders class to see if it is a String for non-arrays as
well as arrays (as it does already) so you could provide a single bean
reference without having to create an array if you only have one
interceptor... so instead of (using spring-dm for activator creation):

            <entry key="org.apache.cxf.ws.out.interceptors">
                <array>
                    <ref bean="exampleInterceptor"/>
                </array>
            </entry>

it could be specified as:
            <entry key="org.apache.cxf.ws.out.interceptors"
value-ref="exampleInterceptor"/>

This, of course, is not a big deal, but it was my first intuition to try it
the second way.

My suggested code change is:

public static List<Object> loadProviderClasses(BundleContext
callingContext, Map sd, String propName) {

    Object serviceProviders = sd.get(propName);
        if (serviceProviders != null) {
            if (serviceProviders.getClass().isArray()) {
                if (serviceProviders.getClass().getComponentType() ==
String.class) {
                return loadProviders(callingContext,
(String[])serviceProviders);
                } else {
                    return Arrays.asList((Object[])serviceProviders);
                }
            } else {
                if (serviceProviders.getClass() == String.class) {
                    String[] classNames =
serviceProviders.toString().split(",");
                    return loadProviders(callingContext, classNames);
                } else {
                    return Arrays.asList(serviceProviders);
                }
            }
        } else {
        return Collections.emptyList();
        }
    }

-Jeff


On Tue, Jan 17, 2012 at 10:07 AM, Jeff Melby <jme...@gmail.com> wrote:

> Great--I see on the trunk code you have added the below for in and out
> interceptors, but how about in.fault and out.fault interceptors? I'll be
> trying this out today--thanks again for looking into this issue so quickly.
>
> -Jeff
>
>
> On Tue, Jan 17, 2012 at 7:55 AM, Sergey Beryozkin-5 [via CXF] <
> ml-node+s547215n5151623...@n5.nabble.com> wrote:
>
>> Hi
>> On 17/01/12 13:47, gaygeek wrote:
>> > Sergey-
>> >
>> > Can you explain how this will work for already-instantiated
>> interceptors
>> > from DOSGi? I realized that there are some interceptors where I may
>> want to
>> > inject spring beans, so the annotation approach won't work for those.
>> Will
>> > there be a way to reference a spring-instantiated bean as the
>> interceptor?
>> >
>>
>> for WS, you'd need to to register a List of Interceptor (or Feature)
>> instances as a service property, from the bundle Activator, example,
>>
>> props.put("org.apache.cxf.ws.in.interceptors", listOfInInterceptors);
>> props.put("org.apache.cxf.ws.out.interceptors", listOfInInterceptors);
>> props.put("org.apache.cxf.ws.features", listOfFeatures);
>>
>> and the context properties:
>>
>> props.put("org.apache.cxf.ws.context.properties", mapOfProps);
>>
>> and then pass them during the registration/lookup.
>> Same for RS;
>>
>> For RS, it is also possible to register JAX-RS providers as OSGI
>> services but I thought having the same supported for CXF
>> interceptors/features is a bit early
>>
>> Cheers, Sergey
>>
>> > Thanks,
>> > Jeff
>> >
>> > On Mon, Jan 16, 2012 at 5:22 PM, Sergey Beryozkin-5 [via CXF]<
>> > [hidden email] <http://user/SendEmail.jtp?type=node&node=5151623&i=0>>
>>  wrote:
>> >
>> >> Dan, thanks for the fix/enhancement, I also updated DOSGi
>> >> to check for custom interceptors&  features passed along during the
>> >> registration/lookup, possibly already instantiated, and also from
>> >> Declarative Services...for WS&  RS
>> >>
>> >> Just stopped short of also starting the trackers, may be later :-)
>> >>
>> >> Sergey
>> >> On 16/01/12 16:03, Daniel Kulp wrote:
>> >>
>> >>> On Monday, January 16, 2012 7:33:45 AM gaygeek wrote:
>> >>>> Yes--as you said, the export is there in my custom bundle, but the
>> cxf
>> >>>> bundle has no way to import it to create the interceptor instance.
>> >>>>
>> >>>> Are you saying there is currently a way to do this, or that DOSGi
>> will
>> >> need
>> >>>> to be modified to allow custom interceptors? I think you are saying
>> it
>> >> is
>> >>>> not available currently, but that it would probably need to be a
>> >> property
>> >>>> on the osgi service export configuration.
>> >>>
>> >>> One thing we COULD try doing is updating the Annotations we have to
>> >> actually
>> >>> support using Class objects.  Right now, we have:
>> >>>
>> >>> public @interface InInterceptors {
>> >>>       String[] interceptors();
>> >>> }
>> >>>
>> >>> which means we need to do Class.forName things.   We could expand
>> this
>> >> to:
>> >>>
>> >>> public @interface InInterceptors {
>> >>>       String[] interceptors();
>> >>>       Class<? extends Interceptor>[]  classes();
>> >>> }
>> >>>
>> >>> or similar so that you could annotate with the actual class objects
>> and
>> >> not
>> >>> have to deal with the classloaders in OSGi.
>> >>>
>> >>> Dan
>> >>>
>> >>>
>> >>>
>> >>>>
>> >>>> Thanks,
>> >>>> Jeff
>> >>>>
>> >>>> On Mon, Jan 16, 2012 at 8:37 AM, Sergey Beryozkin-5 [via CXF]<
>> >>>>
>> >>>> [hidden email]<http://user/SendEmail.jtp?type=node&node=5150169&i=0>>
>>
>> >>   wrote:
>> >>>>> Ignore that please, keeping forgetting the cxf bundle does not
>> import
>> >>>>> custom classes/
>> >>>>>
>> >>>>> I think in DOSGi case, a new property would have to be introduced
>> in
>> >>>>> time for custom CXF interceptors be picked up
>> >>>>>
>> >>>>> Cheers, Sergey
>> >>>>>
>> >>>>> On 16/01/12 12:25, Sergey Beryozkin wrote:
>> >>>>>> Does the custom bundle export "com.uhg.upm.webservice.interceptor"
>> ?
>> >>>>>>
>> >>>>>> Sergey
>> >>>>>>
>> >>>>>> On 13/01/12 22:36, gaygeek wrote:
>> >>>>>>> I am trying to configure a custom interceptor for a web service
>> >>>>>>> I'm
>> >>>>>>> exposing
>> >>>>>>> with DOSGi. However, it seems that the interceptor cannot be
>> >>>>>>> initialized via
>> >>>>>>> annotation, as the org.apache.cxf.bundle-minimal does not have
>> >>>>>>> access
>> >>>>>>> to my
>> >>>>>>> custom interceptor class from its bundle classloader. I get the
>> >>>>>
>> >>>>> following
>> >>>>>
>> >>>>>>> error when starting my bundle with the service in it (which DOES
>> >>>>>>> have
>> >>>>>>> access
>> >>>>>>> to the package that my SoapFaultInterceptor is in). It seems like
>> >>>>>>> the
>> >>>>>>> only
>> >>>>>>> way to make it work would be to hack the MANIFEST.MF for the
>> >>>>>>> org.apache.cxf.bundle-minimal to import my bundle with the custom
>> >>>>>>> interceptor.
>> >>>>>>>
>> >>>>>>> Is there a different way to configure custom interceptors with
>> >>>>>>> DOSGi?
>> >>>>>>> Or am
>> >>>>>>> I missing something in order to allow the annotations to work?
>> >>>>>>>
>> >>>>>>> Annotations for the WebService interface:
>> >>>>>>> @WebService(name = "HelloService", targetNamespace =
>> >>>>>>> "http://upm.uhc.com/example/hello";)
>> >>>>>>> @OutFaultInterceptors(interceptors =
>> >>>>>>> {"com.uhg.upm.webservice.interceptor.SoapFaultInterceptor"})
>> >>>>>>> public interface HelloService
>> >>>>>>>
>> >>>>>>> Exception when starting my bundle with the HelloService in it:
>> >>>>>>> Exception in thread "pool-1-thread-4"
>> >>>>>>> org.apache.cxf.interceptor.Fault: Could not create annotation
>> >>>>>>> object:
>> >>>>>>> com.uhg.upm.webservice.interceptor.SoapFaultInterceptor
>> >>>>>>> at
>> >>>>>
>> >>>>>
>> >>
>> org.apache.cxf.interceptor.AnnotationInterceptors.initializeAnnotationOb
>> >>>>> jects(AnnotationInterceptors.java:79)>
>> >>>>>>> at
>> >>>>>
>> >>>>>
>> >>
>> org.apache.cxf.interceptor.AnnotationInterceptors.getAnnotationObject(An
>> >>>>> notationInterceptors.java:48)>
>> >>>>>>> at
>> >>>>>
>> >>>>>
>> >>
>> org.apache.cxf.interceptor.AnnotationInterceptors.getAnnotationIntercept
>> >>>>> orList(AnnotationInterceptors.java:102)>
>> >>>>>>> at
>> >>>>>
>> >>>>>
>> >>
>> org.apache.cxf.interceptor.AnnotationInterceptors.getOutFaultInterceptor
>> >>>>> s(AnnotationInterceptors.java:122)>
>> >>>>>>> ...
>> >>>>>>> Caused by: java.lang.ClassNotFoundException:
>> >>>>>>> com.uhg.upm.webservice.interceptor.SoapFaultInterceptor not found
>> >>>>>>> by
>> >>>>>>> org.apache.cxf.bundle-minimal [57]
>> >>>>>>> at
>> >>>>>
>> >>>>>
>> >>
>> org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(Mo
>> >>>>> duleImpl.java:812)>
>> >>>>>>> at
>> >>>>>>> org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:
>> >>>>>>> 72)
>> >>>>>>>
>> >>>>>>> Thank you for any insight into this issue.
>> >>>>>>>
>> >>>>>>> -Jeff
>> >>>>>>>
>> >>>>>>> --
>> >>>>>
>> >>>>>>> View this message in context:
>> >>>>>
>> >>
>> http://cxf.547215.n5.nabble.com/Custom-interceptors-with-DOSGi-tp5143924
>> >>>>> p5143924.html>
>> >>>>>>> Sent from the cxf-user mailing list archive at Nabble.com.
>> >>>>>
>> >>>>> --
>> >>>>> Sergey Beryozkin
>> >>>>>
>> >>>>> Talend Community Coders
>> >>>>> http://coders.talend.com/
>> >>>>>
>> >>>>> Blog: http://sberyozkin.blogspot.com
>> >>>>>
>> >>>>>
>> >>>>> ------------------------------
>> >>>>>
>> >>>>>    If you reply to this email, your message will be added to the
>> >>>>>    discussion
>> >>>>>
>> >>>>> below:
>> >>>>>
>> >>>>>
>> >>
>> http://cxf.547215.n5.nabble.com/Custom-interceptors-with-DOSGi-tp5143924
>> >>>>> p5148873.html>
>> >>>>>    To unsubscribe from Custom interceptors with DOSGi, click
>> >>>>>    here<
>> >> http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=u
>> >>>>>
>> >> nsubscribe_by_code&node=5143924&code=am1lbGJ5QGdtYWlsLmNvbXw1MTQzOTI0f
>> >>>>>    C02NTQzMjczNTA=>>
>> >>>>> .
>> >>>>> NAML<
>> >> http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=macr
>> >>>>>
>> >>
>> o_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespac
>> >>>>>
>> >>
>> es.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.w
>> >>>>>
>> >>
>> eb.template.InstantMailNamespace&breadcrumbs=instant+emails%21nabble%3Ae
>> >>>>>
>> >>
>> mail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabb
>> >>>>> le%3Aemail.naml>
>> >>>> --
>> >>>> View this message in context:
>> >>>>
>> >>
>> http://cxf.547215.n5.nabble.com/Custom-interceptors-with-DOSGi-tp5143924p51
>> >>>> 49014.html Sent from the cxf-user mailing list archive at
>> Nabble.com.
>> >>
>> >>
>> >> --
>> >> Sergey Beryozkin
>> >>
>> >> Talend Community Coders
>> >> http://coders.talend.com/
>> >>
>> >> Blog: http://sberyozkin.blogspot.com
>> >>
>> >>
>> >> ------------------------------
>> >>   If you reply to this email, your message will be added to the
>> discussion
>> >> below:
>> >>
>> >>
>>
>> >> .
>> >> NAML<
>> http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.InstantMailNamespace&breadcrumbs=instant+emails%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>>
>> >>
>> >
>> >
>> > --
>> > View this message in context:
>> http://cxf.547215.n5.nabble.com/Custom-interceptors-with-DOSGi-tp5143924p5151596.html
>>
>> > Sent from the cxf-user mailing list archive at Nabble.com.
>>
>>
>> --
>> Sergey Beryozkin
>>
>> Talend Community Coders
>> http://coders.talend.com/
>>
>> Blog: http://sberyozkin.blogspot.com
>>
>>
>> ------------------------------
>>  If you reply to this email, your message will be added to the
>> discussion below:
>>
>> http://cxf.547215.n5.nabble.com/Custom-interceptors-with-DOSGi-tp5143924p5151623.html
>>  To unsubscribe from Custom interceptors with DOSGi, click 
>> here<http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=5143924&code=am1lbGJ5QGdtYWlsLmNvbXw1MTQzOTI0fC02NTQzMjczNTA=>
>> .
>> NAML<http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.InstantMailNamespace&breadcrumbs=instant+emails%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>>
>
>


--
View this message in context: 
http://cxf.547215.n5.nabble.com/Custom-interceptors-with-DOSGi-tp5143924p5152563.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to