jettyでテスト用簡易サーバ
微妙にはまったのでメモ
すげー頭の悪いはまり方だったから、自戒の意味もこめて・・・orz
まずは結論を簡単に
・jettyの8はservlet3、7は2.5だ。バージョンの違いに注意。
・7.3.1⇒7.6.1のどこかで、HttpConnectionが
AsyncHttpConnectionとBlockingHttpConnectionに分かれた。
そりゃ、HttpConnectionが解決できません、って怒られるわ・・・。
以下経緯。
JUnitでWebサービスのモックを作る
これを参考にして、簡易サーバを立てようとしたわけだ
なるほど、最新版は8.1.1か・・・とりあえずこれでいいか、とダウンロードして
ビルドパスに追加。
で、↑のソースをほぼコピペして、とりあえず動かしてみて
一週間くらいまえにHttpClient4でmixiにつないでみたで触ったHttpClientで
つないでみた・・・が、AsyncContextがみつからねぇぞ、と怒られてしまう。
ここみると、Servletのバージョンのせいらしい。なるほど確かに、jettyのDLページを見ると、8ってServlet3じゃないですか
今作ってるもので使ってるのって、2.5じゃないですか。8じゃだめじゃないですか。
ってことで、7の最新、7.6.1をDLして、ビルドパス修正、再実行。
おぉ、繋がった。が、Responseに設定した値が取れない。
↓のようにコメントアウトしてる部分か・・・。
private static class RequestHandlerImpl extends AbstractHandler { @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setCharacterEncoding("UTF-8"); response.setContentType("application/json"); response.setStatus(HttpServletResponse.SC_OK); Writer writer = response.getWriter(); writer.write(TEST_RESULT); // HttpConnectionが解決できないのでとりあえずコメントアウト //HttpConnection connection = // HttpConnection.getCurrentConnection(); //Request req = connection.getRequest(); //req.setHandled(true); } }
参考にしたブログは7.3.1、使おうとしてるのは7.6.1
いくらバージョンが違うとはいえ7.X.Xなのに・・・と思って、7.6.1のjavadoc見てたら
あったよ、↓の三つが・・・!
AbstructHttpConnection
AsyncHttpConnection
BlockingHttpConnection
なるほど、HttpConnectionが非同期通信のために二つに分かれたのか・・・。
というわけで、早速修正。
private static class RequestHandlerImpl extends AbstractHandler { @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setCharacterEncoding("UTF-8"); response.setContentType("application/json"); response.setStatus(HttpServletResponse.SC_OK); Writer writer = response.getWriter(); writer.write(TEST_RESULT); AbstructHttpConnection connection = BlockingHttpConnection.getCurrentConnection(); Request req = connection.getRequest(); req.setHandled(true); } }
めでたく、レスポンスに設定した値も取れるようになりましたとさ。
参考にしたブログの記事は1年も立ってないのに、変わってしまうもんだねぇ・・・。