Jersey + CDIで@Contextが動かない
Jersey + CDIの構成で、ContainerRequestFilterの中でUriInfoを使おうとしてハマった。
構成は JAX-RS(Jersey) + JPA (on CDI) / on Tomcat - edgegram がベースでDeltaspikeを少々追加。
public class FormTypeFilter implements ContainerRequestFilter { @Context private UriInfo uriInfo; public void filter(ContainerRequestContext requestContext) throws IOException { System.out.println(uriInfo); } }
UriInfoがnullにしかならない。ResourceInfoも試したが同様。
調べてもそんな事例なさそうだし(そもそもJersey + CDI自体情報少ないし)。
他のライブラリが影響しているのかと、色々抜き差しした結果、
という所まで何とかこぎつける。
ただ、jersey-cdi1xがダメとなるとCDIが使えなくなる。
何か無いのか? とmarvenリポジトリを検索してみると、jersey-cdi1x-servletというのを発見。
jersey-cdi1xの代わりにjersey-cdi1x-servletを入れて試すと
・・・
UriInfo入った。ちゃんとInjectされている。
他の自前クラスも@Injectできているし、CDIコンテナも問題なく動いている様子。
正解かどうか分からないが、とりあえず動くのでいいことにする。
ハマり時間:8時間