[
https://issues.apache.org/jira/browse/FELIX-5337?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15660449#comment-15660449
]
Pierre De Rop commented on FELIX-5337:
--------------------------------------
Ok; so the contract of the @ServiceDependency is the same as the
"ServiceDependency.setService(Class serviceType, String filter)" method in the
DM API. So, the serviceType is inferred from the bind method or from the class
field.
Now, to allow to inject all services to a "bind(Object service)" callback,
since we need to internally use the "ServiceDependency.setService(String
filter)" method from the DM API, I introduced a new "Any" marker interface in
the ServiceDependency annotation, and you can now set the "service" attribute
to it. This will make sure that the service type won't be inferred from the
bind method parameters or from the field type:
{code}
@ServiceDenpendency(service=Any.class)
void bindServices(Object allServices) {
}
{code}
Of course, you can specify a filter. In the following, all services having the
foo=bar property will be injected:
{code}
@ServiceDenpendency(service=Any.class, filter="(foo=bar)")
void bindServices(Object allServices) {
}
{code}
(committed patch in revision 1769436).
> Filter-based dependencies working differently for annotations
> -------------------------------------------------------------
>
> Key: FELIX-5337
> URL: https://issues.apache.org/jira/browse/FELIX-5337
> Project: Felix
> Issue Type: Bug
> Affects Versions: dependencymanager-4.3.0
> Reporter: J.W. Janssen
> Assignee: Pierre De Rop
>
> I've got a "catch all" service dependency that simply wants to see *all*
> services being registered. In the activator based implementation I simply
> express my dependency as
> {{createServiceDependency().setService("(objectClass=*)").setRequired(false).setCallbacks("addService",
> "removeService")}} and I get all services I'm interested in (I mean: each
> and every registered service).
> However, if I rewrite my code to use annotations using
> {{@ServiceDependency(filter="(objectClass=*)", required = false, removed =
> ...)}}, I suddenly do not see all services I expect: only services that seem
> to be compatible with the class-space of the bundle my code lives in.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)