Hi

Could it be that you announce the component to be „ManagedService“ but the 
class does not implement it and thus the component cannot be instantiated at 
all ?

Regards
Felix

> Am 19.11.2014 um 12:32 schrieb Hasanein Khafaji <[email protected]>:
> 
> Let's assume that Bundle A defines a service interface and export the
> package that contains it to OSGi:
> 
> Public interface ServiceInterface
> {
>      .....
> }
> 
> Bundle B, provides an OSGi component/service that implement the
> service interface
> 
> @Component(immediate = true, metatype = true)
> @Service(value = {ServiceInterface.class, ManagedService.class})
> @org.apache.felix.scr.annotations.Properties({
>        @Property(name = Constants.SERVICE_PID, value =
> "com.example.MyService"),
>        @Property(name = Constants.SERVICE_VENDOR, value = "Contoso"),
>        @Property(name = Constants.SERVICE_DESCRIPTION, value = "My Service"),
> })
> public class MyService implements ServiceInterface
> {
>     ...
> }
> 
> Bundle C, contains Sling model classes that needs to use the above
> service, we inject it using @Inject or @Inject @Source("osgi-service")
> as per Sling Model documentation
> 
> @Model(adaptables = {Resource.class})
> public class MyModel
> {
>    @Inject
>    private ServiceInterface serviceInterface;
>    ...
> }
> 
> The problem is that the service never get injected into the model as
> it should be, the Exception we get is thrown by the
> ModelAdapterFactory saying that it's unable to inject MyService into
> ServiceInterface as if they were an incompatible types but they are
> not.
> 
> On Wed, Nov 19, 2014 at 9:24 AM, Sarwar Bhuiyan
> <[email protected]> wrote:
>> Could you paste that bit of code please?
>> 
>> On Wednesday, November 19, 2014, Hass Joseph Khafaji <[email protected]>
>> wrote:
>> 
>>> The model is simply a sling model class, not an osgi service at all.
>>> 
>>> The model is being looked up via slightly, thus it has to be fully
>>> populated when that happen which require that the model invoke a service to
>>> obtain data from.
>>> 
>>> Sling model documentation says that you can inject osgi services into
>>> sling models but that is not seem to be working.
>>> 
>>> Sent from my iPhone
>>> 
>>>> On 19 Nov 2014, at 09:09, Sarwar Bhuiyan <[email protected]
>>> <javascript:;>> wrote:
>>>> 
>>>> The model is not an OSGi service/component right?
>>>> 
>>>> I'm not sure of why you need a reference to an osgi service in the model
>>>> but you can probably use a setter by yourself but I still think you can
>>>> just have another service which does the action on the model instead of
>>> the
>>>> model calling the service.
>>>> 
>>>> On Wednesday, November 19, 2014, Hass Joseph Khafaji <
>>> [email protected] <javascript:;>>
>>>> wrote:
>>>> 
>>>>> Hello,
>>>>> 
>>>>> I am trying to inject OSGI service defined using scr annotation into a
>>>>> sling model class using the @inject annotation.
>>>>> 
>>>>> What we seem to be getting is that the ModelAdapterFactory is unable to
>>>>> inject the service into the corresponding field as if it was an
>>>>> incompatible type. We not doing anything fancy here, it's just a simple
>>>>> service injection.
>>>>> 
>>>>> Did anyone faced a similar issue in the past? Do we have to use custom
>>>>> injectors for this?
>>>>> 
>>>>> Note: tried to use the @inject @source with an osgi-service but getting
>>>>> the same result.
>>>>> 
>>>>> Cheers.
>>> 

Reply via email to