NoSuchPropertyException

開発環境でテストしたアプリをテスト環境へデプロイしたら、開発環境では発生しないNoSuchPropertyExceptionが発生。原因を探し続けること8時間。やっと原因が判明。環境の違いはJDKのバージョン。開発環境が1.4.2_05、テスト環境が1.4.2_06。最新から順に試そうと思って開発環境に1.4.2_08をインストールしてみたら再現した。

で、根本原因は

  public String getXxxxx() {
    return ・・・・;
  }

  public String getXxxxx(int x) {
    return ・・・・;
  }

という二つのメソッドがあって、TapestryのページからxxxxxプロパティをOGNL経由で参照すると、NoSuchPropertyExceptionが発生するっていう具合でした。引数ありのメソッドをprivateにすると、ちゃんとプロパティとして引数なしの方から値が取得できるっていう具合でした。

リファクタするのに、引数なしの方を一旦コピーして引数ありを作って、privateであるべきところなのに、そうするのを忘れてた。んで、適切なメソッド名を考えるのを怠っていたっていうのが原因。あああ、やっぱりしょぼいミスだった。

きっと1.4.2_05から1.4.2_06でリフレクションの実装が変わってたのね。ふわー疲れた。