Hatena::Groupprogram

ひとり開発日記。 このページをアンテナに追加 RSSフィード

2017/06/24 (Sat)

jax-rs-pac4j 2.0.1

|  jax-rs-pac4j 2.0.1 - ひとり開発日記。 を含むブックマーク はてなブックマーク -  jax-rs-pac4j 2.0.1 - ひとり開発日記。

Pac4Jと言う、Javaベースのウェブアプリの認証をサポートしてくれる、ライブラリ群があります。*1 jax-rs-pac4jは、JAX-RSに特化したライブラリで、今回、私が報告したバグ修正2件の入った、2.0.1がリリースされました。

  1. Grizzly+Jersey+jax-rs-pac4jでNullPointerException
    • 自分で、今、The Twelve-Factor App*2ベースのウェブアプリを作ろうと思っていて、フレームワークは、Jersey MVC*3で、認証はtwitter*4、認証機構には何がいいかな、とググっていたらJAX-RSに特化した、jax-rs-pac4jがあることを知りました。
    • で、早速、推奨構成の Grizzly + Jersey MVC + pac4j-oath + jax-rs-pac4j で、プロジェクトを作成し、認証までは軽く通ったんですが、なぜかコールバックで NullPointerException(NPE) 発生…。 よく分からないので、スタックから追っていくと、pac4jのコールバック処理で、セッションの要素を消すのに、nullを書き込んでいて、Grizzlyの中のインメモリ・セッションキャッシュは ConcurrentHashMap を使っているので、null値をputすると、当然、NPEが出てしまうのです。
    • ユーザーフォーラムで報告したら、GitHubにイシュー立てろ、って言われて、立てたら、"Good find.(よう見つけたな)"ってレスされて、ちょっとイラってしましたけどね…。 まぁ、速攻で直して貰ったのでありがたいですわ。
  2. issueに書いてある回避策を試したらNullPointerException
    • issueに書いてある回避策を参考に、GrizzlySessionStore をラップしたサブクラスを作って、configに追加したら、あれ、認証前に例外発生。 しょうがないんで、またスタックから追っていくと、SessionStoreの有無判定で、三項演算子でnullチェックしてるのに、nullを再代入してる…。 これはNPE不可避ですなぁ。
    • あんまりにも致命的なバグなので、イシューもプルリクも無しで、コミットして、緊急リリースしてくれましたね。

ライブラリ群の中でも再後発、先月リリースの大きく書き直した2.0.0、しかもバグ回避ルートと言う事情なので、仕方ないかもですが、無償でデバッグしてるようで、モニョモニョと…。

とは言え、OSSとはそんなもんで、市井のプログラマーが、協力しあって育てていくものなのかもしれませんね。

*1http://takezoe.hatenablog.com/entry/2017/01/28/021818 pac4jでGitHubのOAuth認証を使ってみる - たけぞう瀕死ブログ

*2https://12factor.net/ja/

*3https://jersey.github.io/documentation/latest/mvc.html

*4:ありがち…

トラックバック - http://program.g.hatena.ne.jp/halflite/20170624