strutsを追え
先日からいくつかにモジュール分割したstruts-config.xmlからvalidation.xmlを参照させると何故かバリデーションしてくれないという問題に悩まされていた。ブレークポイントを置いてトレースをするが、Strutsの内部まで行ってしまうのでソースコードがないとどうしようもない。
が、jakartaからダウンロードしてきたソースを添付しても、どうやらバージョンが違うのか指し示す行数が全然違う。
それならば、いっそのことソースからStrutsをビルドしてしまおう。
……と、考えたのが甘かった。
strutsはantでビルドできるようにbuild.xmlが添付されているため、antを使ってbuildを試みる。antはEclipse上の物を利用。
ビルドしてみると、contrib/elが無いよ。というエラーが出る。
見てみるとcontrib/struts-elとなっている。リネームして一応通るようになったが、次のエラー。
lib/common-beanutils.jarがコピーできないよ。
が、該当のフォルダはちゃんと存在する。ロングファイル名が悪いのかと思い、場所を変えても駄目、何をやっても駄目。
……諦めました。orz
しかし、その後正攻法でデバッグをするも、やはり不便。再度チャレンジしてみることにしました。
エラーが出るのは以下の箇所。build.xmlの359行目。
tofile="${build.home}/library/commons-beanutils.jar"/>
tofile="${build.home}/library/commons-digester.jar"/>
tofile="${build.home}/library/commons-fileupload.jar"/>
tofile="${build.home}/library/commons-logging.jar"/>
tofile="${build.home}/library/commons-validator.jar"/>
tofile="${build.home}/library/jakarta-oro.jar"/>
tofile="${build.home}/library/antlr.jar"/>
意味は、fileの内容をtofileにコピーする、という意味なのでしょうが、antlr.jarだけfailonerror="false"となっています。どうやら失敗してもエラーを出さないようにするオプションみたいです。
tofile="${build.home}/library/commons-beanutils.jar"/>
tofile="${build.home}/library/commons-digester.jar"/>
tofile="${build.home}/library/commons-fileupload.jar"/>
tofile="${build.home}/library/commons-logging.jar"/>
tofile="${build.home}/library/commons-validator.jar"/>
tofile="${build.home}/library/jakarta-oro.jar"/>
tofile="${build.home}/library/antlr.jar"/>
……
通った。(ぉ
ちょっと不安はありますが、struts.jarが出来ています。
早速組み込んで実行。
……。
おお。ちゃんと正しい行を示しています。
が、喜びもつかの間。バリデーションに関するエラーはcommons-validatorでやっているようで、こちらのライブラリもコンパイルしないと駄目なようです。orz
そんな時間あるかー、ってことで結局諦めました。
しかし、validatorがcommons-validatorの中でやっているということが分かったので、こちらのほうの資料を集めれば何とかなりそうな気がします。