Thanks, Sergey,

I have decided to go with an Interceptor that checks for the presence of a
different Annotation, so I need this to work for both REST and SOAP.

This method works most of the time, but sometimes the method called is
null.  Any idea why?  Haven't been able to fully test it yet, but it seems
to happen when it's a REST PUT?

    private Method getTargetMethod(Message m) {
        BindingOperationInfo bop =
m.getExchange().get(BindingOperationInfo.class);
        if (bop != null) {
            MethodDispatcher md = (MethodDispatcher)

m.getExchange().get(Service.class).get(MethodDispatcher.class.getName());
            return md.getMethod(bop);
        }

        return (Method)m.get("org.apache.cxf.resource.method");
    }

The last part works most of the time for REST calls, but doesn't seem to
work always?

cheers

David



On Thu, Mar 27, 2014 at 5:49 PM, Sergey Beryozkin <[email protected]>wrote:

> The following code in the interceptor will do:
>
> BindingOperationInfo bop = m.getExchange().get(
> BindingOperationInfo.class);
>
>        if (bop != null) {
>
>            MethodDispatcher md = (MethodDispatcher)
>
>
> m.getExchange().get(Service.class).get(MethodDispatcher.class.getName());
>
>            return md.getMethod(bop);
>
>        }
>
> Cheers, Sergey
>
> On 27/03/14 17:53, David Hay wrote:
>
>> Ok, thanks.
>>
>> Is there a SOAP equivalent?
>>
>>
>> On Thu, Mar 27, 2014 at 9:59 AM, Sergey Beryozkin <[email protected]
>> >wrote:
>>
>>  right I see,
>>> I think you have to inject
>>>
>>> @Context ResourceInfo info;
>>>
>>> into the filter, this will give you the access to the matched Method from
>>> where you can get the actual method-level annotations...
>>>
>>> Cheers, Sergey
>>>
>>>
>>> On 27/03/14 13:51, David Hay wrote:
>>>
>>>  Actually, I'd like to pass a parameter in the annotation...which I could
>>>> retrieve in the filter and use for that particular method.
>>>>
>>>> Something like:
>>>>
>>>> @Target({ ElementType.TYPE, ElementType.METHOD })
>>>> @Retention(value = RetentionPolicy.RUNTIME)
>>>> @NameBinding
>>>> public @interface Authorize {
>>>>       String somethingToCheck();
>>>> }
>>>>
>>>> cheers
>>>>
>>>> David
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Thu, Mar 27, 2014 at 9:20 AM, Sergey Beryozkin <[email protected]
>>>>
>>>>> wrote:
>>>>>
>>>>
>>>>   Hi
>>>>
>>>>>
>>>>> On 27/03/14 13:10, David Hay wrote:
>>>>>
>>>>>   Hi Sergey,
>>>>>
>>>>>>
>>>>>> Ah, I saw it in the spec, but didn't realize it's not implemented.  I
>>>>>> just
>>>>>> saw a thread from Aug 2013 where you had an implementation on a
>>>>>> branch?
>>>>>>    It
>>>>>> would be very useful...we have hundreds of methods...
>>>>>>
>>>>>>    I don't recall I was doing something around the method specific
>>>>>> static
>>>>>>
>>>>>>  binding of CXF interceptors, but I agree it can make sense to do some
>>>>> related enhancements, the only question is when, may be for 3.1 or
>>>>> later...
>>>>>
>>>>>    Also, do you know if there is any way to pass a parameter in the
>>>>> filter
>>>>>
>>>>>  name binding?
>>>>>>
>>>>>>    You mean from ContainerRequestFilter to the application code ?
>>>>>>
>>>>>>  One way is to set a property on ContainerRequestContext and extract
>>>>> it
>>>>> from the code using HttpServletRequest.getAttribute(), not cool,
>>>>> there's
>>>>> an enhancement request to make it simpler.
>>>>> Another option is may be to add a custom header to
>>>>> ContainerRequestContext
>>>>> and extract it as a header from the code, etc...
>>>>>
>>>>> Cheers. Sergey
>>>>>
>>>>>
>>>>>    thanks!
>>>>>
>>>>>
>>>>>>
>>>>>> On Thu, Mar 27, 2014 at 6:55 AM, Sergey Beryozkin <
>>>>>> [email protected]
>>>>>>
>>>>>>  wrote:
>>>>>>>
>>>>>>>
>>>>>>    Hi David,
>>>>>>
>>>>>>
>>>>>>> CXF does not have the support right now for statically binding CXF
>>>>>>> interceptors to methods. I guess we can explore it going forward, as
>>>>>>> part
>>>>>>> of the future CXF work.
>>>>>>> For example, CXF has an @InInterceptors annotation - may we can
>>>>>>> support
>>>>>>> binding it to individual methods, etc. May be we can have a CDI or
>>>>>>> CDI-like
>>>>>>> mechanism (as in JAX-RS 2.0) supported too.
>>>>>>> At the moment the workaround is to have an interceptor checking for
>>>>>>> the
>>>>>>> Method, for example, check SimpleAuthorizingInterceptor in the core
>>>>>>> package...
>>>>>>>
>>>>>>> HTH, Sergey
>>>>>>>
>>>>>>>
>>>>>>> On 26/03/14 00:42, David Hay wrote:
>>>>>>>
>>>>>>>    Well, I didn't know that Interceptors can be applied using Name
>>>>>>> Binding,
>>>>>>>
>>>>>>>  so
>>>>>>>> I think I can just use that?
>>>>>>>>
>>>>>>>> However, I would really like to pass some data for each particular
>>>>>>>> method
>>>>>>>> that it's bound too (a list of things to check in each situation) ie
>>>>>>>> there
>>>>>>>> would be a generic method that would take the things passed to it
>>>>>>>> for
>>>>>>>> that
>>>>>>>> method, and use them to check the call should be allowed.
>>>>>>>>
>>>>>>>> Any ideas on how I would accomplish that?
>>>>>>>>
>>>>>>>> thanks!
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Mar 25, 2014 at 2:54 PM, David Hay <
>>>>>>>> [email protected]>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>     Hi,
>>>>>>>>
>>>>>>>>
>>>>>>>>  I have set up some filters that extend ContainerRequestFilter and
>>>>>>>>> are
>>>>>>>>> name-bound to certain methods.
>>>>>>>>>
>>>>>>>>> I have a need to name-bind the same filter code across both SOAP
>>>>>>>>> and
>>>>>>>>> REST
>>>>>>>>> methods...
>>>>>>>>>
>>>>>>>>> Is this possible?
>>>>>>>>>
>>>>>>>>> thanks!
>>>>>>>>>
>>>>>>>>> David
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>> --
>>> Sergey Beryozkin
>>>
>>> Talend Community Coders
>>> http://coders.talend.com/
>>>
>>> Blog: http://sberyozkin.blogspot.com
>>>
>>>
>>
>
> --
> Sergey Beryozkin
>
> Talend Community Coders
> http://coders.talend.com/
>
> Blog: http://sberyozkin.blogspot.com
>

Reply via email to