2

Adobe CQ5 インストールで servlet-api バージョン 3 を使用しようとしていますが、あまり成功していません。

javax.servlet パッケージ (バージョン 2.5) をエクスポートするバンドルが既にあるので、バージョン 3.1.0 でバンドルをデプロイしました。このバンドルは問題なく起動します。

問題は、API v3 を使用するバンドルを開始することです。完全には理解できない OSGi 例外が発生しています。

POST /system/console/bundles/250 HTTP/1.1] cqse-httpservice %bundles.pluginTitle: 開始できません (org.osgi.framework.BundleException:

モジュール 250.9 を既存のインポート 266.0.javax.servlet 間で解決するときのパッケージ 'javax.servlet' の制約違反

[[250.9] パッケージのせい。(&(package=javax.servlet)(バージョン>=3.0.0)(!(バージョン>=4.0.0)))]

制約 22.1.javax.servlet を使用します

[[250.9] パッケージのせい。(package=com.day.cq.wcm.foundation.forms), [210.0] パッケージ; (&(package=org.apache.sling.api.resource)(version>=2.0.0)), [93.0] パッケージ; (&(package=javax.servlet)(バージョン>=2.4.0))])

  • bundle 266 exports javax.servlet v=3.10 (これをインストールしました)
  • bundle 22 exports javax.servlet v=2.5 (CQ5 提供)
  • bundle 250 (mine) は、266 から javax.servlet,version=[3.0,4) をインポートします。210 と 93 からパッケージもインポートします。
  • bundle 210 imports javax.servelt v=2.5 from 22 (ただし、マニフェストのインポートにはバージョンがありません。これが問題なのでしょうか?)
  • バンドル 93 には javax.servlet があります。Import-package の version="2.4"。しかし、何とか (22) から javax.servlet,version=2.5.0 に解決しました。

問題はバンドル 250 の依存関係にあるようですが、何が問題なのかわかりません。知る限り、パッケージの 2 つのバージョンは OSGi コンテナーに共存できます。バンドル 210 と 93 は問題なく実行されています。

4

2 に答える 2

0

コメントに残された記事を読んだ後 、バンドルの依存関係がサーブレット API 2.5 のクラスを公開していることに気付きました。これにより制約が発生し、バンドルが妨げられます。私が正しく理解している場合、バンドル 210 からのクラスパスは私のバンドルまで展開されます。

したがって、唯一のオプションは、私のバンドルと他のバンドルとの依存関係を削除することです。V3 APIなしで対処する必要があります

于 2013-07-05T09:11:38.110 に答える
0

これは、使用されている http サービスがサーブレット 2.5 のみをサポートしているためである可能性が高く、これがプリインストールされたサーブレット バージョンである理由です。サーブレット 3.0 API をインストールしたため、バンドルは解決されますが、http サービスによって取得されるサービスをエクスポートしようとすると、この問題が発生します。根本的な原因は、使用されている http サービスの実装です。これが機能するかどうかはわかりませんが、代わりに Pax-Web 2 または 3 を使用して http サービス バージョンを置き換えてみてください。Pax-Web はバージョン 2 以降、サーブレット API をサポートしています。

于 2013-07-04T15:06:21.587 に答える