Very helpful, thanks! I didn't realize that DOSGi intercepts service calls from the local osgi container, but I suppose it must in order to provide QoS concepts.
Thanks, Josh On Thu, Jun 18, 2009 at 3:04 PM, Eoghan Glynn <[email protected]> wrote: > Hi Josh, > > Sounds like you need a custom intent. > > An intent is simply a string that identifies some QoS that should be > enabled > on the local proxy or is required by the remote service. The desired > intents > are specified via a space-separated list provided as a property on the > service lookup (check with DavidB for the latest property name, these have > been changing recently due to some churn in the specification process). > > Now dOSGi uses a master intent map, that's retrieved from > /OSGI-INF/cxf/intents/intent-map.xml in the DSW bundle. > > But you can provide your own application-specific intents in the calling > bundle (same path as above) which would then be merged with the master map. > > As you can see from [1], the intent map is simply a string-to-bean map > where > the key is a string intent name and the value is a CXF Feature, list of > WS-Policy assertions or a BindingConfiguration. > > So your custom map could look something like this: > > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:auth="http://holtzman.org/auth" > xsi:schemaLocation=" > http://www.springframework.org/schema/beans > http://www.springframework.org/schema/beans/spring-beans.xsd"> > > <bean id="intentMap" class="org.apache.cxf.dosgi.dsw.qos.IntentMap"> > <property name="intents"> > <map> > <entry key="authorization" value-ref="joshAuth"/> > </map> > </property> > </bean> > > <auth:authorization id="joshAuth"/> > </beans> > > Then your authorization feature would simply install the required > interceptors, on the individual proxy created for the remote service. > > You can model your feature implementation on the WSAdedressingFeature[2], > which is one of the simplest in CXF. > > You'll also need need a META-INF/spring.handlers file mapping your > namespace > to a handler class, e.g.: > > http\://holtzman.org/auth=org.holtzman.auth.spring.NamespaceHandler > > Then just base the namespace handler and bean definition parser on the WS-A > analogues ([3], [4]). > > Hope this helps! > > Cheers, > Eoghan > > [1] > > http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/resources/OSGI-INF/cxf/intents/intent-map.xml?view=co > [2] > > http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java?view=co > [3] > > http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/spring/NamespaceHandler.java?view=co > [4] > > http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/spring/AddressingBeanDefinitionParser.java?view=co > > 2009/6/18 Josh Holtzman <[email protected]> > > > I'm trying to figure out how best to apply aspects like authentication > and > > authorization to my distributed OSGi services using CXF. Since I won't > > know > > which services are deployed locally or remotely until the osgi container > is > > running, I don't think servlet filters are the right approach (the filter > > would be bypassed for local service invocations). > > > > I'm pretty sure that each service that is exposed as a remote endpoint > via > > DOSGI has its own CXF Bus. So I should be able to add interceptors to > the > > buses generated by the CXFNonSpringServlets. But I think these buses are > > bypassed when the service is locally invoked, so the CXF interceptor > > approach doesn't work either. > > > > Does anyone have suggestions for applying aspects to (D)OSGI services? > I'm > > about to read up on the new Find hooks available in the osgi 4.2 spec, > > since > > I might be able to sneak a proxy into service location, but I don't want > to > > give up on a CXF based solution if there is one. > > > > Thanks, > > Josh > > >
