Thanks, JB

But it doesn’t seem to work for Karaf 4.2.8.
I am not  familiar with the internals of Karaf code, but I spotted the 
following in org.apache.karaf.shell.impl.action.command.ManagerImpl.instantiate 
of  org.apache.karaf.shell.core-4.2.8.jar:

                Reference ref = field.getAnnotation(Reference.class);
                if (ref != null) {
                    GenericType type = new GenericType(field.getGenericType());
                    Object value;
                    if (type.getRawClass() == List.class) {
                        Set<Object> set = new HashSet<>();
                        
set.addAll(registry.getServices(type.getActualTypeArgument(0).getRawClass()));
                        if (registry != this.dependencies) {
                            
set.addAll(this.dependencies.getServices(type.getActualTypeArgument(0).getRawClass()));
                        }
                        value = new ArrayList<>(set);
                    } else {
                        value = registry.getService(type.getRawClass());
                        if (value == null && registry != this.dependencies) {
                            value = 
this.dependencies.getService(type.getRawClass());
                        }
                    }
                    if (!allowCustomServices && value == null && 
!ref.optional()) {
                        throw new IllegalStateException("No service matching " 
+ field.getType().getName());
                    }
                    field.setAccessible(true);
                    field.set(instance, value);
                }

Maybe this is not the relevant piece of code, but I do not see that the filter 
attribute is being used to look up the service.


Best regards,
Alex soto




> On Mar 12, 2020, at 12:50 AM, Jean-Baptiste Onofre <[email protected]> wrote:
> 
> Hi,
> 
> Yes, it’s to "select" the service you want to use.
> 
> I did the change because previously it wasn’t possible to select, meaning 
> that if you had several services (with the same interface) available, it took 
> the first one.
> 
> Now, you can specify the LDIF filter to select the exact service you want to 
> inject.
> 
> Regards
> JB
> 
>> Le 11 mars 2020 à 20:03, Alex Soto <[email protected] 
>> <mailto:[email protected]>> a écrit :
>> 
>> Is the filter attribute in annotation 
>> org.apache.karaf.shell.api.action.lifecycle.Reference used to filter the 
>> injected service on Service attributes?
>> 
>> Best regards,
>> Alex soto
>> 
>> 
>> 
>> 
> 

Reply via email to