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
> > --------------------------------------------------------------
> >
>
--
--------------------------------------------------------------
Ing. Jan Novotný
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
http://blog.novoj.net
Myšlenky dne otce Fura
--------------------------------------------------------------