1

CXF OSGi バンドルを karaf コンテナーにデプロイし、それぞれ独自のバンドルに複数のエンドポイントを配置しました。エンドポイントは、JAX-RS と JAX-WS のフレーバーが混在しています。JOSSO を使用してエンドポイントのセキュリティを有効にしたいので、サーブレット フィルターを登録する必要があります。明らかに、フィルターを宣言するための web.xml がないため、OSGi サービス レジストリに登録する必要があります。

pax-web http ホワイトボードを使用してフィルターを登録しようとしましたが、doFilter メソッドが呼び出されません。分散 OSGI cxf 実装には、フィルターで org.apache.cxf.httpservice.filter プロパティを true に設定し、pax-web ホワイトボードを混乱させないように servletNames にダミー文字列を指定するための規定があることに気付きました。サーブレット フィルターを登録するために、標準の CXF (非配布) OSGi バンドルに似たようなことはありますか?

4

2 に答える 2

0

いろいろ調べた結果、Felix + PAX Web を使用して CXF サーブレットにフィルターを設定することができました。秘訣は、CXF バンドル内からフィルターを登録することです (バンドルごとに別個の http コンテキストがあります)。

私のコードでは、getBundles() と呼ばれるバンドル コンテキストをフェッチし、cxf バンドルを見つけて、CXF バンドルのバンドル コンテキストを取得しました。次に、CXF バンドルのコンテキストにフィルターを登録しました。私は今とても汚いと感じていますが、うまくいきます。

PAX の Jetty サーバーの構成用にフラグメント バンドルを作成するという推奨事項を見たことを思い出します。これはおそらくフィルターの登録にも機能しますが、現時点ではプロジェクトに別のアーティファクトを作成したくありませんでした。

于 2012-01-16T16:07:22.243 に答える