Аннотация не найдена для объекта с сохранением во время выполнения - PullRequest
6 голосов
/ 19 января 2012

Хорошо, я немного запутался здесь.Я пытаюсь выбрать класс "DAO", используя аннотацию к модели:

@Entity
@Table(name="dispatcher")
// use the Kamailio Base DAO for code that supports this annotation
@DAOSelector(dao = DAOBaseKamailio.class) 
public class DispatcherSet extends Model {
    [...]
}

Вот определение аннотации:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DAOSelector {
       Class<?> dao();
}

Я использую следующий код для возвратаправильный класс "DAO":

public static DAOInterface getCorrectDAO(final Object object) throws Exception {
  final DAOSelector annotation = 
    object.getClass().getAnnotation(DAOSelector.class);

  if(annotation != null) {
    System.out.println("Annotation present: " + 
      annotation.dao().getName() + " for class " + object.getClass().getName());

    final Object dao = annotation.dao().newInstance();
    if(!(dao instanceof DAOInterface)) {
      throw new Exception("Invalid Base DAO in annotation for entity " + 
        object.getClass().getName());
    }
    return (DAOInterface) dao;
  }
  else {
    System.out.println("Annotation not present for class " + 
      object.getClass().getName());
    return new DAOBase();
  }
}

Однако, когда я передаю, аннотация объекта DispatcherSet всегда равна нулю:

10: 33: 38,498 [INFO] [STDOUT] Аннотация отсутствует для модели класса. DispatcherSet

Я что-то здесь упускаю?

edit:

ОК, нашел что-то интересное, я запускаю этот кодвнутри контейнера JBoss, и когда я распечатываю все аннотации:

{{{
$Proxy76
$Proxy708
$Proxy77
}}}

Один из них должен быть прокси-экземпляром аннотации DAOSelector, я думаю, поэтому, вероятно, именно поэтому getAnnotation(DAOSelector.class) выиграл 'не работает, проверяет.

edit2:

Нет, они не являются экземпляром DAOSelector

1 Ответ

3 голосов
/ 19 января 2012

Я исправил проблему.это была проблема с classpath.У меня есть ухо с банкой и войной.Модель была в банке, а аннотация присутствовала в обоих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...