2

のプロジェクト内のデフォルトの実装を変更する必要がありますorg.w3c.dom.Document

このリンクをたどって 、次のデフォルトの実装を変更しました。

javax.xml.parsers.DocumentBuilderFactory
javax.xml.parsers.SAXParserFactory
javax.xml.transform.TransformerFactory

上記の名前の 3 つのファイルを in で作成しMETA-INF/services、それぞれに次の行を挿入しました。

ファイル内:javax.xml.parsers.DocumentBuilderFactory私は入れました:com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

ファイル内:javax.xml.parsers.SAXParserFactory私は入れました:com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl

ファイル内:javax.xml.transform.TransformerFactory私は入れました:org.apache.xalan.processor.TransformerFactoryImpl

しかし、Oracle Application Server にデプロイすると、Jetty での開発時に表示されるのではなく、の実装クラスorg.w3c.dom.Documentが :であることがわかりました。oracle.xml.parser.v2.XMLDocumentcom.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl

Jetty で開発し、Oracle アプリケーション サーバーにデプロイしています。

4

3 に答える 3

1

oracle.xml.parser.v2.XMLDocument実装がクラスローダによってorg.w3c.dom.Document以前に検出されている可能性があります。com.sun.org.apache.xerces.internal.dom.DeferredDocumentImplOracle 実装を除外できるかどうかを確認し、クラスを含むファイルを探します。これは「コンテナ全体」のフォルダにあり、実装は「アプリケーション全体」のフォルダにあります。

まったく同じ問題はありませんでしたが、クラスローダーによってロードされた jar の順序が重要であるという同様の問題がありました。これが少なくとも正しい方向へのプッシュを与えることができることを願っています

于 2010-11-10T10:12:16.973 に答える
1

あなたは正しいことをしているように聞こえます。しかし、システムプロパティメソッドを使用する方が簡単かもしれません...少なくとも「サービス」メソッドで何が問題なのかを理解できるまでは。

于 2010-11-10T09:50:16.377 に答える
0

注意すべき 2 つの点:
1. com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImplヒントがあります。これは内部実装です (パブリック API とは対照的です)。これは変更される傾向があり、製品開発の最優先の選択肢ではありません。
2. これcom.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImplが私のニーズをすべて満たす最適な実装であり、私が知る限り、仕様と一致していることがわかりました。

競合を簡単に確認できます。いつの日か、Document 実装とそのすべてのファクトリなどのためのプラットフォーム標準のパブリック API が存在することを願っています。

これが私の経験です。

クラスパスで META-INF/services と JAR の順序付けをいじることは、ハックのように感じられ、さらにうまく機能せず、最終的にはそのアプローチから離れました。私にとってうまくいかなかった理由は次のとおりです。クラスパスに2つ以上のサードパーティの実装があったため.xerces.internal.、デフォルトで取得する希望はありませんでした. ただし、システム プロパティと同じくらい高く指定すると、すべてがオーバーライドされ、サード パーティ製品ではうまくいきませんでした。

• • • 最終的に、META-INF/services およびシステム プロパティによる検索メカニズムに依存せずに、プロパティを作成し、必要な正確なファクトリを明示的にロードすることになりました。

ちなみに、さまざまな工場がさまざまな検索手順を使用していますが、これには一貫性がありません。オラクルがこのプロセスを標準化し、より柔軟で制御しやすい方法を見つけてくれることを願っています

于 2015-02-12T01:02:57.597 に答える