Вставить строку с квалификатором в CDI

Я пытаюсь сделать простую вещь. Введите квалифицированный String (или File) в CDI.

Итак, у меня есть квалификатор:

@Retention(RetentionPolicy.RUNTIME)
@Target({FIELD,METHOD,PARAMETER,TYPE})
@Qualifier
public @interface FilesRepositoryPath {}

У меня есть продюсер:

public class FilesRepositoryPathProducer {

  @Produces
  @FilesRepositoryPath
  public String getRepositoryDirectory() {
    return "path.taken.from.configuration";
  }
}

И я пытаюсь его использовать:

@ApplicationScoped
public class FilesRepository {

  @Inject
  public FilesRepository(@FilesRepositoryPath String filesDirectory) {
    //Do some stuff
  }
}

Однако WELD не может создать экземпляр этого компонента. Я получаю исключение:

org.jboss.arquillian.impl.event.FiredEventException: org.jboss.weld.exceptions.UnproxyableResolutionException: WELD-001410 The injection point [field] @Inject private za.co.fnb.commercial.dms.file.FilesRepositoryBeanTest.repo has non-proxyable dependencies

Я знаю, что String нельзя проксировать, но почему WELD хочет создать прокси? Он имеет область действия @Dependent, поэтому, насколько мне известно, он все равно не должен создавать прокси. Как я могу заставить его работать?


person amorfis    schedule 20.04.2011    source источник
comment
Можете ли вы опубликовать FilesRepositoryBeanTest, пожалуйста?   -  person jan groth    schedule 21.04.2011
comment
зарегистрировать проблему в Weld. Код выглядит нормально в соответствии со спецификацией.   -  person Bozho    schedule 24.04.2011
comment
Посмотрите здесь: stackoverflow.com/questions /7583871/, похоже, похожая проблема   -  person Kris    schedule 01.12.2011


Ответы (1)


вам нужен конструктор по умолчанию

@ApplicationScoped
public class FilesRepository {

  public FilesRepository() {
  }

  @Inject
  public FilesRepository(@FilesRepositoryPath String filesDirectory) {
    //Do some stuff
  }
}
person Kurohige    schedule 29.04.2013