アノテーション
JSFがうまくいかないのでちょっとアノテーションで遊ぶことに。
アノテーション+javassist+javaagentでちょっとクラスのアクセス制限みたいなことを試してみる。
関係ないけど、java + assist かと思ったら違うんだな。aは1つでjavassist(ジャバシスト?)。
で、お約束通りまたはまっててさっき解決した教訓。
@interfaceはObjectのサブクラスじゃないからtoString()がない!?
javassistでAnnotationインスタンスを取得してtoString()をすると、RuntimeExceptionが発生する
java.lang.RuntimeException: no default value: delf.annotation.access.AccessDeny.toString() at javassist.bytecode.annotation.AnnotationImpl.getDefault(AnnotationImpl.java:88) at javassist.bytecode.annotation.AnnotationImpl.invoke(AnnotationImpl.java:59) at $Proxy1.toString(Unknown Source) ...
つまり、デバッグ目的で安易に
Annotation annotation = ....;
System.out.println(annotation);
とかやっちゃうと、RuntimeExceptionが発生するというわけ。
javaagent経由でやってるとなぜか例外が握りつぶされてしまうので、何が起きてるかわからない、ひどい状態になる。気をつけよう。