Christian, Well, that is definitely not it. There is only a single version of that interface is both the source and the runtime. Do you have a suggestion on what would be a good a place in the DOSGi/CXF code to start debugging this?
Thanks, Erwin > On Feb 23, 2017, at 8:41 AM, Erwin Hogeweg <[email protected]> wrote: > > Hi Christian, > > Thanks for the quick reply. > >> this points to a class incompatiblity. The servicereference works with the >> name of the interface "com.seecago.interfaces.MyService" but for getService >> to work >> both the client and the service bundle must be bound to the same package >> com.seecago.interfaces. I suspect that they see different versions of this >> package. > > >> Do you maybe have the interface embedded in one or both of these bundles? > That was my suspicion as well. I am not aware of any embedded interfaces, but > I will double check. > >> You can check this with "package:imports" and "headers" on the bundle ids. > Will do, thanks again. > > Erwin > >> >> Christian >> >> On 23.02.2017 14:01, Erwin Hogeweg wrote: >>> Hi, >>> >>> I am upgrading a system from CXF-2.7.2 and DOSGi-1.4 to 3.1.1/1.7.0 but I >>> have run into a wall. >>> >>> Before I start digging in the CXF code, would anyone have an idea why >>> bundleContext.getService() would return a null object for a registered >>> DOSGi service? >>> >>> This is the remote service description: >>> >>> <endpoint-description> >>> <property name="objectClass"> >>> <array> >>> <value>com.seecago.service.interfaces.MyService</value> >>> </array> >>> </property> >>> <property >>> name="endpoint.id">http://my_service_host:12345/MyService/</property> >>> <http://my_service_host:12345/MyService/%3C/property%3E> >>> <property name="service.imported.configs">org.apache.cxf.ws</property> >>> </endpoint-description> >>> >>> >>> The service is registered: >>> >>> osgi> services (objectClass=*MyService) >>> {com.seecago.interfaces.MyService}={endpoint.id=http://my_service_host:12345/MyService/ >>> <http://my_service_host:12345/MyService/>, service.imported=true, >>> service.imported.configs=org.apache.cxf.ws, service.id=163, >>> service.bundleid=30, service.scope=bundle} >>> "Registered by bundle:" cxf-dosgi-ri-dsw-cxf_1.7.0 [30] >>> "No bundles using service." >>> >>> >>> This is a modified activator to prove that the service is null. >>> >>> @Activate >>> public void activate(ComponentContext context){ >>> BundleContext bc = context.getBundleContext(); >>> >>> // Added to see what is going on. setMyService() is not called >>> if (bc != null){ >>> ServiceReference<MyService> sr = >>> bc.getServiceReference(MyService.class); >>> if (sr != null){ >>> // verified that sr has correct props here >>> MyService ms = bc.getService(sr); >>> if (ms == null){ >>> // Always get here. >>> LOG.error("Ouch!"); >>> } >>> } >>> } >>> LOG.info <http://log.info/>("Activated."); >>> } >>> >>> This is the error msgs Equinox spits out: >>> >>> !MESSAGE [SCR] Could not get the service object relevant to the reference. >>> One possible reason is a circularity problem. Another possible reason is >>> that BundleContext.getService() returns null. <—— WHICH APPEARS TO BE TRUE >>> Details: >>> Problematic reference = Reference[name = myService, interface = >>> com.seecago.service.interfaces.MyService, policy = static, cardinality = >>> 1..1, target = null, bind = setMyService, unbind = unsetMyService] >>> of service component = com.seecago.client.ui.configuration >>> ... >>> >>> DOSGi- 1.7.0 >>> CXF - 3.1.1 >>> Equinox- 3.12 >>> J8 >>> >>> >>> Your suggestions are greatly appreciated. >>> >>> >>> Regards, >>> >>> Erwin >> >> >> -- >> Christian Schneider >> http://www.liquid-reality.de <http://www.liquid-reality.de/> >> >> Open Source Architect >> http://www.talend.com <http://www.talend.com/> >
