@Reference(“(service.label=TESTCALL)”) Felix SCR annotation error | Community
Skip to main content
New Participant
March 9, 2017
Solved

@Reference(“(service.label=TESTCALL)”) Felix SCR annotation error

  • March 9, 2017
  • 16 replies
  • 7632 views

am trying to implement an OSGI service which can serve me as ConfigurationFactory the service implementation has just two properties as shown below.

@Property(value="this is service variable property value") static final String MY_SERVICE_VARIABLE = "service.variable"; @Property(description="Label for this MyService") private static final String MY_SERVICE_LABEL = "service.label";

and am retrieving this service configuration data from an OSGI servlet where i am trying to call this service by below code which compiles fine and retrieves data randomly from the multiple service configuration.

@Reference MyService myservice;


But when i wanted to get each configuration data by using the service.label and am calling the service by using below code snippet in my OSGI servlet, while compiling am facing the below Error.

@Reference("(service.label=TESTCALL)") MyService myservice;


cannot find symbol [ERROR] symbol: method value() [ERROR] location: @interface org.apache.felix.scr.annotations.Reference.

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by smacdonald2008

Daniel is correct - i went through this and this works: 

public class SimpleServlet extends org.apache.sling.api.servlets.SlingAllMethodsServlet {
     private static final long serialVersionUID = 2598426539166789515L;
        
     @Reference(target = "(mailservice.label=InternetA)")
     MailService mailService;    

We are turning this all into a HELPX Article so all the steps are included. 

16 replies

smacdonald2008
smacdonald2008Accepted solution
New Participant
March 9, 2017

Daniel is correct - i went through this and this works: 

public class SimpleServlet extends org.apache.sling.api.servlets.SlingAllMethodsServlet {
     private static final long serialVersionUID = 2598426539166789515L;
        
     @Reference(target = "(mailservice.label=InternetA)")
     MailService mailService;    

We are turning this all into a HELPX Article so all the steps are included. 

Daniel_H__A__Li
New Participant
March 9, 2017
        Hi, Kk. As I've said before, you are missing the attribute called "target" in the annotation. @Reference doesn't accept an attribute called "value" (the default one). You must use target = "your LDAP filter to selected a specific service component". It's very straigthforward... Regards, Daniel.
smacdonald2008
New Participant
March 9, 2017

In your use case - are you setting up multiple service configurations - as opposed to 1 service with 1 configuration. This is an interesting use case. We do not have any examples on this. 

I will go through this too and see if I get the same results. Maybe something needs to be updated. I will post back. 

KkkrishAuthor
New Participant
March 9, 2017

Feike Visser wrote...

Why are you not setting these properties on the @Component annotation?

 

Hi Feike Visser,

  1. @Reference("(service.label=TESTCALL)")
  2. MyService myservice;

This above code snippet i am using in a servlet where i need to create a service reference that is being used to call for retrieving configuration data from OSGI FELIX Factory console, am referring https://cqdump.wordpress.com/2014/08/05/managing-multiple-instances-of-services-osgi-service-factories/ this article to create multiple instances of services via OSGI Service Factory. where as with above code its giving compilation error. and without any parameter to @Reference annotation it is compiled.

Is there any way that can help me in achieving  " how to retrieve OSGI multi services data from Service factory " ?

 

Kk

Feike_Visser1
Employee
March 9, 2017

Why are you not setting these properties on the @Component annotation?

Daniel_H__A__Li
New Participant
March 9, 2017

Hi.

Have you tried

@Reference(target = "(service.label=TESTCALL)")

instead?

@Reference annotation

Regards,

Daniel.