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
Hier annotiere ich dann eine Klasse bpsw.:
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:
Ich erstelle mir eine Liste, aber leider kann ich so nicht auf das Objekt richtig zugreifen, damit ich die Felder className, uniqueName bekomme:
Ich möchte das gerne in meiner Web GUI ausgeben, bekomme aber diese Meldung:
Was mache ich falsch? Oder muss ich eine neue Klasse erstellen, welches genau diese 3 Properties hat und diese dann ausgeben?
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:
className | uniqueName | languageName |
---|---|---|
Customer | CUSTOMER | Kunde |
Order | ORDER | Bestellung |
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: