Používá se tam logika z java.beans.* - konkrétně:

BeanInfo info = Introspector.getBeanInfo(clazz);
PropertyDescriptor[] descriptors = info.getPropertyDescriptors();

pak se podle name najde jeden konkrétní PropertyDescriptor a pak už:

Method m = pd.getReadMethod();
if (m != null) {
   return m.invoke(bean);
}

Tzn. logika získávání objektů Method je skrytá uvnitř Javy.
Nicméně problém bude asi v tom, že class name je: class
com.fg.xxx.model.QueryStatus$1, což se vztahuje již k té podřízené
třídě.

Problém bude tedy se získáváním toho className. A ten se získává na
základě itemu z dané kolekce, kde kolekci získám jednoduše:

Arrays.asList(QueryStatus.values());

Stripsy začnou iterovat po itemech z této kolekce a nad každým si zavolají:

Type type = this.bean.getClass();

Pak získají nacachované PropertyDescriptory - viz. začátek emailu a ty
už vrací "virtuální" classy pro jednotlivé enum QueryStatus classy.

Takže problém je již osvětlený, ale stejně mi nějak nedochází jak z
toho ven. Je mi jasné, že se potřebuju dostat k tomu, aby className =
"class com.fg.xxx.model.QueryStatus", ale netuším jak to zařídit.

Honza N.

2007/11/26, Jiri Mares <[EMAIL PROTECTED]>:
>
> A co se podivat do zdrojaku jak je to udelany ...
>
> Podlesak Kamil napsal(a):
> > Zajímavé, abstraktní metody musí fungovat... jak tu instanci Method 
> > získáváte?
> > getMethod() nebo getDeclaredMethod()? Důležité je, že se musí jednat o 
> > metodu z předka, nikoliv z potomka (interní třídy).
> >
> > Kamil Podlešák
> >
> >> -----Original Message-----
> >> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> >> Behalf Of Ing. Jan Novotný
> >> Sent: Monday, November 26, 2007 2:53 PM
> >> To: Java
> >> Subject: Re: IllegalAccessException pri pokusu prístupu na
> >> getter Enumu
> >> reflexí
> >>
> >>
> >> Díky za nakopnutí, tohle se trefilo do černého - alespoň co se týká
> >> zdůvodnění. Když jsem v debug režimu manuálně nastavil metodě
> >> setAccessible(true), už invoke() prošlo bez chyby a vrátilo to, co
> >> mělo. Bohužel doplnění abstraktní metody do QueryStatus nepomohlo a
> >> bez setAccessible(true) se k danému getteru nedostanu - pro úplnost
> >> uvádím aktualizovanou třídu:
> >>
> >> public enum QueryStatus implements HasValue {
> >>      INSERTED {
> >>              public Integer getValue() { return 0; }
> >>              public String getLabel() { return "vloženo"; }
> >>      },
> >>      ALLOWED {
> >>              public Integer getValue() { return 1; }
> >>              public String getLabel() { return "schváleno"; }
> >>      },
> >>      FORBIDDEN {
> >>              public Integer getValue() { return 2; }
> >>              public String getLabel() { return "zamítnuto"; }
> >>      };
> >>
> >>      public abstract String getLabel();
> >>
> >> }
> >>
> >> Navíc jsem objevil, že Stripes mají tag <stripes:options-enumeration/>
> >> u kterého jsem si myslel, že bude natvrdo nastavováno setAccessible,
> >> ale není tomu tak - padá to na IllegalAccess také.
> >>
> >> Zkusím ještě popátrat na gůglu.
> >>
> >> Honza N.
> >>
> >> 2007/11/26, Podlesak Kamil <[EMAIL PROTECTED]>:
> >>> Myslim ze bude stacit doplnit deklaraci tech metod v
> >> samotne tride QueryStatus (jako abstraktni metody).
> >>>> public enum QueryStatus implements HasValue {
> >>>>       INSERTED {
> >>>>               public Integer getValue() { return 0; }
> >>>>               public String getLabel() { return "vloženo"; }
> >>>>       },
> >>>>       ALLOWED {
> >>>>               public Integer getValue() { return 1; }
> >>>>               public String getLabel() { return "schváleno"; }
> >>>>       },
> >>>>       FORBIDDEN {
> >>>>               public Integer getValue() { return 2; }
> >>>>               public String getLabel() { return "zamítnuto"; }
> >>>>       }
> >>>                 public abstract Integer getValue();
> >>>                 public abstract String getLabel();
> >>>> }
> >>> Jednotlive instance jsou neverejne tridy, tedy je normalne
> >> nelze pouzivat a nelze ani volat metody v nich deklarovane.
> >> Tato omezeni se za normalnich okolnosti kontroluji i pri
> >> pouzivani reflection, ale kontrolu lze vypnout zavolanim
> >> method.setAccessible(true). Nektere knihovny pouzivajicich
> >> reflection toto delaji, coz vysvetluje proc se v nich tento
> >> problem neobjevi (zatimco v jinych ano).
> >>> Kamil Podlesak
> >>> --
> >>> [EMAIL PROTECTED]
> >>>
> >>>
> >>>> -----Original Message-----
> >>>> From: [EMAIL PROTECTED]
> > [mailto:[EMAIL PROTECTED]
> >>> Behalf Of Ing. Jan Novotný
> >>> Sent: Monday, November 26, 2007 1:58 PM
> >>> To: Java
> >>> Subject: IllegalAccessException pri pokusu prístupu na getter Enumu
> >>> reflexí
> >>>
> >>>
> >>> Zdravím konferenci,
> >>>
> >>>    dokážete někdo vysvětlit proč při přístupu k metodám Java enum
> >>> typu, který mám definován takto:
> >>>
> >>> public enum QueryStatus implements HasValue {
> >>>       INSERTED {
> >>>               public Integer getValue() { return 0; }
> >>>               public String getLabel() { return "vloženo"; }
> >>>       },
> >>>       ALLOWED {
> >>>               public Integer getValue() { return 1; }
> >>>               public String getLabel() { return "schváleno"; }
> >>>       },
> >>>       FORBIDDEN {
> >>>               public Integer getValue() { return 2; }
> >>>               public String getLabel() { return "zamítnuto"; }
> >>>       }
> >>> }
> >>>
> >>>    vyhazuje java IllegalAccessException? Podaří se mi získat i object
> >>> Method pro danou getter metodu, ale když se zavolá metoda invoke,
> >>> vyletí vyjímka IllegalAccessException. Nějak se mi nepodařilo nic
> >>> vygůglit, tak si nedokážu vysvětlit, kde je problém.
> >>>
> >>> Honza N.
> >>>
> >>> --
> >>> --------------------------------------------------------------
> >>> Ing. Jan Novotný
> >>> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> >>> http://blog.novoj.net
> >>> Myšlenky dne otce Fura
> >>> --------------------------------------------------------------
> >>>
> >
> >
>
> --
> Jiří Mareš (mailto:[EMAIL PROTECTED])
> ČSAD SVT Praha, s.r.o. (http://www.svt.cz)
> Czech Republic
>


-- 
--------------------------------------------------------------
Ing. Jan Novotný
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
http://blog.novoj.net
Myšlenky dne otce Fura
--------------------------------------------------------------

Odpovedet emailem