@Reference((service.label=TESTCALL)) Ошибка аннотации Felix SCR

Я пытаюсь реализовать службу OSGI, которая может служить мне в качестве ConfigurationFactory, реализация службы имеет только два свойства, как показано ниже.

@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";

и я получаю данные конфигурации этой службы из сервлета OSGI, где я пытаюсь вызвать эту службу с помощью приведенного ниже кода, который отлично компилируется и извлекает данные случайным образом из конфигурации нескольких служб.

@Reference
MyService myservice;

Но когда я хотел получить все данные конфигурации с помощью service.label и вызываю службу, используя приведенный ниже фрагмент кода в моем сервлете OSGI, при компиляции я столкнулся с приведенной ниже ошибкой.

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

не удается найти символ [ОШИБКА] символ: значение метода () [ОШИБКА] местоположение: @interface org.apache.felix.scr.annotations.Reference.


person krish    schedule 09.03.2017    source источник


Ответы (2)


используйте @Reference(target = "(service.label=TESTCALL)") для версий AEM 6.x, он должен скомпилироваться. Я загрузил образец POC, который я использовал ранее, на моем gourivar github и тот же пример POC, который вы можете найти на моем aemvardhan. wordpress.com

person VAr    schedule 09.03.2017

Скорее всего, в вашем сервисе отсутствует Service Factory. Что-то типа:

    @Service
    @Component(
        metatype=true,label="my service", 
        description="sample my service implementation",
        configurationFactory=true)
        public class MyServiceImpl implements MyService { 

    } 

Обратите внимание на атрибут configurationFactory=true. Это позволяет службе иметь несколько конфигураций.

person Imran Saeed    schedule 09.03.2017
comment
в мой сервис уже включена аннотация, и он работает, когда я использую его как @Reference MyService myservice;, он не компилируется, когда я использую как @Reference((service.label=TESTCALL)) MyService myservice; потому что я хочу получить отдельные данные конфигурации (т. е. все данные конфигурации, относящиеся к нескольким службам) - person krish; 09.03.2017
comment
Позвольте мне задать тот же вопрос по-другому: как получить данные о нескольких конфигурациях заводского сервиса.? Любой фрагмент кода помогает. - person krish; 09.03.2017
comment
Ваш подход в порядке, и, не глядя на фрагмент кода (может быть, если вы его понимаете?), Я не вижу причин для ошибки компиляции. Вы можете попробовать сниппер кода из cqdump.wordpress.com/2014/08/05/ и посмотрите, работает ли он, поскольку я только что попробовал его локально, и он компилируется нормально (не проверял привязку, но я думаю, что это не проблема). - person Imran Saeed; 09.03.2017
comment
Да, я сослался на ту же статью и попытался получить @Reference(“(mailservice.label=INTERNET)”) MailService mailService; для моей службы, но без каких-либо параметров для аннотации @Reference он компилируется и работает нормально, если я добавлю к нему параметр, как показано выше, произойдет сбой. Можно ли будет поделиться вашим локальным кодом в виде пакета? Так что я могу сравнить и может быть это может помочь в отладке - person krish; 09.03.2017
comment
Есть ли шанс, что вы используете 6.x, поскольку только что попробовали его на 6.x, и он не работает? Я собрал образец на 5.6 (скопировал с сайта выше) и он работает. 6.x с новым OSGi имеет другой способ сделать это. - person Imran Saeed; 09.03.2017
comment
я использую версию AEM6.2. - person krish; 10.03.2017