How do you include the org.osgi.service.cm package? This is trivial in bnd but I recall it was tricky in PDE?
Did you verify that the package is inside the bundle? Kind regards, Peter Kriens > On 26 Apr 2017, at 10:02, Fauth Dirk (AA-AS/EIS2-EU) > <dirk.fa...@de.bosch.com> wrote: > > Interestingly this works fine when running from Bndtools with Felix. > > If I try the same with Equinox for projects created with PDE I get a > NullPointerException. IIRC Private-Package is something special to Bnd. Is > that correct? I wonder if that exception is caused by some PDE flaws or if it > is an issue in Equinox Oxygen. In both cases Apache Felix SCR 2.0 is used. > (in Oxygen 2.0.8 and in Bndtools 2.0.2) > > org.osgi.framework.ServiceException: Exception in > org.apache.felix.scr.impl.manager.SingleComponentManager.getService() > at > org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:222) > at > org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:111) > at > org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:45) > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:508) > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:461) > at > org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:624) > at > org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:72) > at > org.apache.felix.scr.impl.inject.FieldHandler$ReferenceMethodImpl.getServiceObject(FieldHandler.java:985) > at > org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2201) > at > org.apache.felix.scr.impl.manager.DependencyManager$MultipleStaticReluctantCustomizer.prebind(DependencyManager.java:699) > at > org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1520) > at > org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1006) > at > org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:859) > at > org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:823) > at > org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:212) > at java.security.AccessController.doPrivileged(Native Method) > at > org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:210) > at > org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:111) > at > org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:45) > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:508) > at > org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:461) > at > org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:624) > at > org.apache.felix.gogo.runtime.CommandProxy.getTarget(CommandProxy.java:50) > at > org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:72) > at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:477) > at > org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:403) > at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108) > at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183) > at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120) > at > org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:89) > at org.apache.felix.gogo.shell.Console.run(Console.java:62) > at org.apache.felix.gogo.shell.Shell.console(Shell.java:203) > at org.apache.felix.gogo.shell.Shell.gosh(Shell.java:128) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) > at org.apache.felix.gogo.runtime.Reflective.invoke(Reflective.java:137) > at > org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:82) > at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:477) > at > org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:403) > at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108) > at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183) > at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120) > at > org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:89) > at org.apache.felix.gogo.shell.Activator.run(Activator.java:75) > at java.lang.Thread.run(Thread.java:745) > Caused by: java.lang.NullPointerException > at > org.apache.felix.scr.impl.inject.FieldHandler.validateField(FieldHandler.java:279) > at > org.apache.felix.scr.impl.inject.FieldHandler.access$500(FieldHandler.java:51) > at > org.apache.felix.scr.impl.inject.FieldHandler$NotResolved.resolve(FieldHandler.java:839) > at > org.apache.felix.scr.impl.inject.FieldHandler$NotResolved.fieldExists(FieldHandler.java:864) > at > org.apache.felix.scr.impl.inject.FieldHandler.fieldExists(FieldHandler.java:918) > at > org.apache.felix.scr.impl.inject.FieldHandler$3.init(FieldHandler.java:1018) > at > org.apache.felix.scr.impl.manager.DependencyManager.invokeInitMethod(DependencyManager.java:1657) > at > org.apache.felix.scr.impl.manager.DependencyManager.open(DependencyManager.java:1533) > at > org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:261) > at > org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:109) > at > org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:906) > at > org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:879) > at > org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:823) > at > org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:212) > at java.security.AccessController.doPrivileged(Native Method) > at > org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:210) > ... 46 more > > Mit freundlichen Grüßen / Best regards > > Dirk Fauth > > Automotive Service Solutions, ESI application (AA-AS/EIS2-EU) > Robert Bosch GmbH | Postfach 11 29 | 73201 Plochingen | GERMANY | > www.bosch.com <http://www.bosch.com/> > Tel. +49(7153)666-1155 | dirk.fa...@de.bosch.com > <mailto:dirk.fa...@de.bosch.com> > > Sitz: Stuttgart, Registergericht: Amtsgericht Stuttgart, HRB 14000; > Aufsichtsratsvorsitzender: Franz Fehrenbach; Geschäftsführung: Dr. Volkmar > Denner, > Prof. Dr. Stefan Asenkerschbaumer, Dr. Rolf Bulander, Dr. Stefan Hartung, Dr. > Markus Heyn, Dr. Dirk Hoheisel, > Christoph Kübel, Uwe Raschke, Peter Tyroller > > > Von: osgi-dev-boun...@mail.osgi.org [mailto:osgi-dev-boun...@mail.osgi.org] > Im Auftrag von Peter Kriens > Gesendet: Mittwoch, 26. April 2017 09:14 > An: OSGi Developer Mail List <osgi-dev@mail.osgi.org> > Betreff: Re: [osgi-dev] handling optional/dynamic imports in DS > > I used to import the package optional and then provide it as an internal > Private-Package. The import has priority but the internal package is used > when the import fails to resolve. Since you’re then always wired to a package > you can handle dependencies on the place they should be handled: services. > > This keeps everybody happy internally for very little cost. I’ve included a > bndtools/enRoute example. > > Kind regards, > > Peter Kriens > > > ————————————————— bnd.bnd > Private-Package: \ > org.osgi.service.cm,\ > com.foo.provider > > Import-Package: \ > org.osgi.service.cm;resolution:=optional,\ > * > > -buildpath: \ > osgi.enroute.base.api > -runrequires: \ > osgi.identity;filter:='(osgi.identity=com.foo.provider)',\ > > osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.runtime)',\ > > osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.shell)',\ > > osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)' > -runbundles: \ > com.foo.provider;version=snapshot,\ > org.apache.felix.log;version='[1.0.1,1.0.2)',\ > org.apache.felix.scr;version='[2.0.2,2.0.3)',\ > org.apache.felix.gogo.runtime,\ > org.apache.felix.gogo.shell;version=0.16 > > ————————————————— com.foo.provider.Optional > @Component > public class Optional > { > @Reference(cardinality=ReferenceCardinality.OPTIONAL) > ConfigurationAdmin admin; > > @Activate > void activate() { > System.out.println("activate " + admin); > } > } > > On 25 Apr 2017, at 23:10, Raymond Auge <raymond.a...@liferay.com > <mailto:raymond.a...@liferay.com>> wrote: > > I'm wondering if there is a reasonable model for handling optional or dynamic > package imports in DS. > > While optionality at the package level is not an ideal model, sometimes it > can't be avoided. > > I'd like to know if others have come across a "reasonable" way to model this > in DS. > > Sincerely, > -- > Raymond Augé <http://www.liferay.com/web/raymond.auge/profile> (@rotty3000) > Senior Software Architect Liferay, Inc. <http://www.liferay.com/> (@Liferay) > Board Member & EEG Co-Chair, OSGi Alliance <http://osgi.org/> (@OSGiAlliance) > _______________________________________________ > OSGi Developer Mail List > osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org> > https://mail.osgi.org/mailman/listinfo/osgi-dev > <https://mail.osgi.org/mailman/listinfo/osgi-dev> > > _______________________________________________ > OSGi Developer Mail List > osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org> > https://mail.osgi.org/mailman/listinfo/osgi-dev > <https://mail.osgi.org/mailman/listinfo/osgi-dev>
_______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev