Hi Erwin,

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?

You can check this with "package:imports" and "headers" on the bundle ids.

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/, 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

Open Source Architect
http://www.talend.com

Reply via email to