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 の下にコピーして、ビルドパスを修正して問題なく動作するようになった。