HttpURLConnectionのjavadoc
http://download.oracle.com/javase/6/docs/api/java/net/HttpURLConnection.html
例えば、クラス作成時にはPATCHリクエストがHTTPの仕様になかったため、PATCHリクエストを発行できません。そのため、HttpURLClientConnectionクラスを使ってWebDAVクライアントを作成したくても無理だったのです。
ええ、今までは。;)
Jerseyのユーザーである Markus Karg が回避策を見つけました。
HttpURLConnectionクラスの一つのフィールドにinjectionを使ってメソッド名を”注入”できるので、そのメソッド名を使ってリクエストを生成する、というものです。この機能はデフォルトでは有効になっていないので、利用したい場合には以下のプロパティをtrueに設定する必要があります。
URLConnectionClientHandler.PROPERTY_HTTP_URL_CONNECTION_SET_METHOD_WORKAROUND
次のようなコード
DefaultClientConfig config = new DefaultClientConfig(); config.getProperties().put(URLConnectionClientHandler.PROPERTY_HTTP_URL_CONNECTION_SET_METHOD_WORKAROUND, true); Client c = Client.create(config); WebResource r = c.resource(getUri().path("test/entity").build()); ClientResponse cr = r.method("GOTOSLEEP", ClientResponse.class);
から、以下の結果を得ることができます。
Feb 4, 2011 11:25:44 AM com.sun.jersey.api.client.filter.LoggingFilter log INFO: 1 * Client out-bound request 1 > GOTOSLEEP http://localhost:9997/test/test
この結果から、"GOTOSLEEP" というメソッドが使われていて、HttpURLConnectionクラスは何も例外を発生していないことがわかります。ただ、この回避策にも次の制限があります。
- エンティティをリクエストに配置することはできない
- "おそらく"いくつかのJava EEコンテナやJDKの将来のバージョンでは動作しない(Java EEコンテナはHttpURLConnectionを独自実装をしていることがあるため)
http://blogs.sun.com/PavelBucek/entry/jersey_client_making_requests_with
0 件のコメント:
コメントを投稿