Liste von Infos von einer eigenen Annotation in Liste speichern

internet

Top Contributor
Hallo,

ich möchte gerne von meinem Java - Projekt alle Klassen auslesen, die eine eigene (entsprechende) Annotation haben.
In meinem Fall ist es diese Annotation: EntityClassInfo

Hier erstelle ich meine eigene Annotation
Java:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface EntityClassInfo {

    // Klassenname (bspw: Customer)
    String className();
  
    // Bspw. "CUSTOMER"
    String uniqueName();
  
    // Bpsw. "Kunde"
    String languageName();
  
}

Hier annotiere ich dann eine Klasse bpsw.:
Java:
@EntityClassInfo(className = "Customer", uniqueName = "CUSTOMER", languageName = "Kunde")
public class Customer {

Anschließend möchte ich gerne eine Liste haben von "EntityClassInfo", mit alle Klassen, die diese Annototation haben, sodass ich eine Luste von Entity habe mit entsprechenden Infos:

Also sowas wie diese Infos innerhalb einem EntityClassInfo:
classNameuniqueNamelanguageName
CustomerCUSTOMERKunde
OrderORDERBestellung

Ich erstelle mir eine Liste, aber leider kann ich so nicht auf das Objekt richtig zugreifen, damit ich die Felder className, uniqueName bekomme:

Java:
private List<EntityClassInfo> findAllEntityClassInfoByReflection()
            throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException,
            InvocationTargetException, NoSuchMethodException, SecurityException {

        List<EntityClassInfo> entityClassInfoList = new ArrayList<>();

        Reflections ref = new Reflections(Constants.PACKAGE_NAME);
        for (Class<?> cl : ref.getTypesAnnotatedWith(EntityClassInfo.class)) {

            try {

                Annotation[] annotations = cl.getDeclaredAnnotations();
              
                if (annotations != null && annotations.length != 0) {

                    for (Annotation annotation : annotations) {

                        // Nur speichern, wenn von EntityPropertyInfo
                        if (annotation instanceof EntityClassInfo) {
                            EntityClassInfo entityPropertyInfo = (EntityClassInfo) annotation;
                            entityClassInfoList.add(entityPropertyInfo);
                        }
                    }
                }

            } catch (ClassCastException e) {

            }
        }

        return entityClassInfoList;
    }

Ich möchte das gerne in meiner Web GUI ausgeben, bekomme aber diese Meldung:
Java:
            <p:selectOneMenu
                                value="#{myBean.entity}"
                                converter="omnifaces.SelectItemsConverter" autoWidth="false">
                                <f:selectItem itemLabel="Bitte wählen" itemValue="" />
                                <f:selectItems
                                    value="#{myBean.myEntityClassInfoList()}"
                                    var="entityClassInfo"
                                    itemLabel="#{entityClassInfo.className}"
                                    itemValue="#{entityClassInfo}" />
                            </p:selectOneMenu>

The class 'com.sun.proxy.$Proxy212' does not have the property 'className'



Was mache ich falsch? Oder muss ich eine neue Klasse erstellen, welches genau diese 3 Properties hat und diese dann ausgeben?
 
Zuletzt bearbeitet:

Zurück
Oben