0

同じ Java プロジェクトで、SUN Jersey クライアントを使用していくつかの REST サービスを使用し、Apache CXF を使用していくつかの REST サービスを提供します。私たちが消費するサービスの中には、「Expires」ディレクティブが設定された Cookie を返すものがあります。例えばSet-Cookie: name=value; Expires=Wed, 09 Jun 2021 10:18:14 GMT

wr が Jersey WebResource であると仮定して、以下のコードを検討してください。ClientResponse も Jersey クラスです。

ClientResponse resp = wr.get(ClientResponse.class);
System.out.println(resp.getCookies())

現在、expires ディレクティブを含む Cookie の場合、実際の Cookie は返されません。代わりに、expires ディレクティブ自体が Cookie として返されます (Cookie の名前は Expires、値は日付です)。

掘り下げた結果、これは Set-Cookie HTTP ヘッダーが CXF によって解析される方法によるものであることがわかりました。fromString メソッドはこちらを参照してください。基本的に、コード<name>=<value>は、Set-Cookie ヘッダーで見つかった最後のペアを Cookie と見なします。この場合、expires=<date>後で発生しますname=value(後者は実際に必要な Cookie です)。

OTOH、Jersey のヘッダー解析コードはこちら(実際の impl クラスはhereで、前者を呼び出します) は、expires ディレクティブを無視して、実際の Cookie を返します。この振る舞いは私たちにとって十分です。そこで、Jersey のバージョンを選択したいと思います。どうやってこれを行うのですか?プロジェクトで CXF も (サービスを提供するために) 引き続き使用する必要があるため、依存関係を削除できないことに注意してください。

問題のプロジェクトは Maven プロジェクトです。

4

0 に答える 0