今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

slim3で謎の404エラーに悩まされた件

たぶん、あんまり需要はないと思うけど書いとく。

slim3でOAuthを使ったサービスを作ろうとしてた。OAuthを使った認証は前にも作ってるので、そこで作ったログイン関連のControllerクラスを新しいプロジェクトの中にコピーした。

コピペで動いて楽勝なんて喜んでたら、OAuth認証後のコールバックで404エラーが出る。コピー元の方で動作確認したら、きちんと動作する。

どこまで動いてるのかを確認するために、適当な場所にログ出力のコードを追加してから動かしてみたけど、ひとつもログが出力されない。なぜかrun()メソッドが呼び出されていないまま404エラー。

どこが悪いのかよく分からんので、run()メソッド内の return 以外をコメントアウトしたらエラーが出なくなった。ログイン処理をコメントアウトしてるので、ログインしてないときの画面に戻るだけになった。ログを追加したら、きちんとそのログも出力されたし。

なんだ動くやん。って思って、コメントアウトしたコードを復活させたら再び404エラーが復活したし。ログも出なくなったし。

???

いろいろ試してたら、ClassNotFoundException ってのが出てくれた。これで一気に解決に向かった。

WEB-INF/lib の中に、必要な jar ファイルが入ってないのが原因だった。jar ファイルがなかったらコンパイルエラーになりそうなんだけど、ビルドパスを確認すると、コピー元プロジェクトの WEB-INF/lib に置いてある jar ファイルが含まれてたので、コンパイルエラーにはならなかったという。

つまり、クラスをコピーしたときに、自動的にコピー元プロジェクトの jar がビルドパスに追加されてたのだった。

必要な jar ファイルを WEB-INF/lib の下にコピーして、ビルドパスを修正して問題なく動作するようになった。