service ------- Key: FELIX-2563 URL: https://issues.apache.org/jira/browse/FELIX-2563 Project: Felix Issue Type: Bug Components: Declarative Services (SCR) Affects Versions: scr-1.6.0 Reporter: Christopher Brind Priority: Minor
Given this component XML: <?xml version="1.0" encoding="UTF-8"?> <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="dsbug.LongFactory"> <implementation class="dsbug.LongFactory"/> <service servicefactory="true"> <provide interface="java.lang.Long" /> </service> </scr:component> And given this component class: package dsbug; import org.osgi.framework.Bundle; import org.osgi.framework.ServiceFactory; import org.osgi.framework.ServiceRegistration; public class LongFactory implements ServiceFactory { public Object getService(Bundle bundle, ServiceRegistration registration) { return new Long(bundle.getBundleId()); } public void ungetService(Bundle bundle, ServiceRegistration registration, Object service) { } } Causes this error when referencing the service factory (resulting in unsatisfied dependencies): org.apache.felix.log.LogException: org.osgi.framework.ServiceException: Service cannot be cast: java.lang.Long However, when using this Activator *instead* of DS, all is well: package dsbug; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; public class Activator implements BundleActivator { public void start(BundleContext context) throws Exception { context.registerService(Long.class.getName(), new LongFactory(), null); } public void stop(BundleContext context) throws Exception { } } Workaround (with DS) is to create a simple component with an activate(BundleContext ctx) method and manually register the service. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.