cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alessio Soldano <asold...@redhat.com>
Subject Re: Custom HandlerChainInvoker
Date Tue, 01 Oct 2013 17:53:54 GMT
Hi Dan,

On 30/09/13 19:27, Daniel Kulp wrote:
> On Sep 26, 2013, at 11:43 AM, Alessio Soldano <asoldano@redhat.com> wrote:
>
>> Hi,
>> I currently have an integration requirement which basically imply having to perform
some additional authorization checks just before invoking any JAXWS handler handleMessage
method.
>>
>> For achieving that, I've thought about using a custom HandlerChainInvoker overriding
'invokeLogicalHandlers' and 'invokeProtocolHandlers' methods.
>> For installing such a custom invoker, I thought about adding a custom AbstractPhaseInterceptor
running just before the SOAPHandlerInterceptor in the PRE_PROTOCOL_FRONTEND phase; the new
handler would install my invoker in the Exchange, similarly to what is done in AbstractJAXWSHandlerInterceptor#getInvoker.
>> The problem I have, however, is that ofcourse I need a handle to the handler chain
(List<Handler>) to build the invoker: the handler chain is available from the Endpoint
stored in the current exchange, if the endpoint is an instance of JaxWsEndpointImpl. Any idea
/ hint on how to get that there easily for other Endpoint types?
> Would there ever be these things for anything other than a JaxWsEndpointImpl?    Within
the CXF codebase, the only calls to the constructors of any of the subclasses of AbstractJAXWSHandlerInterceptor
are from JaxWsEndpointImpl.   Does the JBoss integration use something other than JaxWsEndpointImpl?
    The other subclasses of Endpoint are non JAX-WS (simple frontend or  jaxrs) and thus wouldn't
have handler chains anyway.
>
> Mostly curious on that.
Well, I was actually mainly wondering if I could be missing something 
here, as I initially simply casted the endpoint to JaxWsEndpointImpl and 
noticed some failures.
Now I checked and basically I happen to get a WrappedEndpoint instance 
(when running some WS-RM tests) and a EndpointImpl instance (in a 
WS-SecureConversation test). Both are actually internal things the user 
can't add jaxws handlers to.
To answer your questions, the JBossWS integration does not directly 
creates these endpoints at all. Instead, it uses the 
org.apache.cxf.jaxws.EndpointImpl#publish() to deploy endpoints (we have 
a custom class extending the org.apache.cxf.jaxws22.EndpointImpl version).
Any other server side integration customization is performed at the bus 
level, by installing additional interceptors and a custom configurer 
(org.apache.cxf.configuration.Configurer) in the Bus created using a 
specific Bus factory. So in this case I'm installing above mentioned 
custom AbstractPhaseInterceptor in the bus that's created for each ws 
endpoint deployment on JBoss AS.

>> Does the whole flow here make sense?
>> Would it make sense to allow a more direct customization of the handler chain invoker?
> I guess I'd want to know a little more about how the JBoss integration is dealing with
the JaxWsEndpointImpl.    I'm certainly very open to making the handler chain invocation more
customizable, but it's more a matter of "how".

My doubts above are basically solved (I can simply check if the endpoint 
I get is JaxWsEndpointImpl, otherwise do nothing), thanks.
Speaking of more direct customization of the handler chain invoker, I'll 
try to think about a proposal tomorrow and perhaps ping you on IRC or 
reply here.
Thanks
Alessio

-- 
Alessio Soldano
Web Service Lead, JBoss


Mime
View raw message