I just added some ways to specify interceptors for your endpoint or proxy:
<jaxws:endpoint id="epWithInterceptors" implementor="org.apache.cxf.jaxws.service.Hello" address="http://localhost:8080/test"> <jaxws:inInterceptors> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/> <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor"/> </jaxws:inInterceptors> <jaxws:outInterceptors> <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/> <bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor"/> </jaxws:outInterceptors> </jaxws:endpoint> Or on the client side (which I don't have fancy spring 2.0 support for yet) <bean id="proxyFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> <property name="address" value="http://endpoint/url"/> <property name="serviceClass" value="myServiceInterface"/> <property name="inInterceptors"> <list> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/> </list> </property> </bean> Also, I recently added an AbstractWSFeature class which I'd like to support the loading of a plugin for a particular scenario. The idea being that you can have a feature class - like a WSSecurityFeature - which configures your endpoint for something - like WS-Security. And it can just become part of the JAX-WS endpoint configuration. I posted some examples of how this might work in the client/EPR thread if you're interested. I'll be answering some of the questions that arose on that shortly... - Dan On 3/21/07, Fred Dushin <[EMAIL PROTECTED]> wrote:
Thank you, Jervis and Andrea. I think probably the last part of Andrea's response comes closest to the sort of thing I need: > You can also have an interceptor installed at bus level which, when > executing, adds further interceptors to the chain, possibly on a > per message basis. This is done for example in > org.apache.cxf.ws.policy.ClientPolicyOutInterceptor. (Jervis, I see what the code you referenced is doing, but does an ordinary developer like myself have a hook into the creation of an Endpoint? The code you reference seems to be a special case of installing a BindingFactory into an Endpoint, which is part of the CXF plumbing. I'm looking for something more in userland, as they say. Unless I'm missing something -- please correct me if I am.) The issue is that I want to programatically install these interceptors from plugin (i.e., spring-loaded) code, but it looks like there's really no way to do that. Andrea's solution (if I understand it -- apologies if I'm being thick) is to install an interceptor during the servicing of a request, which works, though I'd hoped I could avoid that sort of overhead -- it's something I really only need to do once, at the point at which the operative InterceptorProvider is being set-up or established. Also, if interceptors are being added in the course of servicing a request, does one have to take special care of thread-safety issues? I understand the InterceptorProvider returns you a List by reference, not a copy, so you are free to add, delete, traverse elements, etc. But if you're in the context of a request, is there any mechanism to lock access to the interceptor list, so that someone else in your application with the same devious plan won't walk over the same data at the same time? Am I completely missing something about the architecture, here? It seems like modifying an interceptor list in flight has ConcurrentModification exceptions written all over it. Thanks, -Fred
-- Dan Diephouse Envoi Solutions http://envoisolutions.com | http://netzooid.com/blog
