26

JSF 2.0、NetBeans 6.9.1、GlassFish Server 3.1、mojarra 2.0.3、および JasperReports 3.7.6 を使用して Web アプリケーションを開発しています。私のプロジェクト ライブラリには、jar ファイル "xerces-2.8.0.jar" が含まれています。このファイルは、JasperReports jar ファイル ライブラリの一部としてインポートされました。NetBeans を使用してプロジェクトを配備、実行、またはデバッグしようとすると、次のエラーが表示されます。

java.lang.Exception: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! DTD factory class org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl does not extend from DTDDVFactory.

プロジェクトに何らかの変更を加えた後、ビルドが失敗し、デプロイ、実行、またはデバッグしようとすると上記のエラーが表示されます。サーバーを再起動して、もう一度実行/デバッグする必要があります。インターネットを検索しましたが、この問題の解決策が見つかりません。問題の jar ファイルを確認しましたが、DTDDVFactoryImpl は実際に DTDDVFactory から拡張されています。なぜこのエラーが発生するのかわかりません。最終的にはプロジェクトを実行できるようになりますが、このエラーが発生していなければ、はるかに良いでしょう。

どうすればこれを修正できるか教えてください。プロジェクト ライブラリからこのファイルを削除する必要がありますか? このファイルを新しいバージョン/古いバージョンに更新する必要がありますか?

4

2 に答える 2

22

独自の xerces.jar を提供する場合は、Endorsed Standards Override Mechanism ( java -Djava.endorsed.dirs=/path/to/xerces.jar) を介してそれを行う必要があります。それをクラスパスに追加することは許可されていません (そうすると、遅かれ早かれ問題が発生します)。説明させてください。

JAXP はXML 処理用の Java API です。JAXP オブジェクト (パーサー、XSLT トランスフォーマー、DOM ドキュメントなど) の作成はfactory/factory-method パターンを介して行われるため、新しい JAXP 実装をプラグインできます (JRE で提供されているものよりも新しい必要があります)。Xerces は JAXP 実装 (の一部) を提供し、承認された標準を含みます (承認された標準は、Java コミュニティ プロセス以外の標準プロセスを通じて定義された Java API です。承認された標準オーバーライド メカニズムを参照してください)。ESOM を使用しないと、さまざまな問題が発生します。

于 2011-07-22T12:40:32.077 に答える
0

Glassfish で Selenium を使用すると、このエラーが発生しました。XML jar ( xerces-*, xalan-*, xml-apis*, serialize*)selenium/libs/$AS_HOME/lib/endorsed(Glassfish 2 の場合) または ( $AS_HOME/glassfish/lib/endorsedGlassfish 4 の場合) にコピーすることで回避しました。

于 2014-02-19T03:31:43.743 に答える