12

これは例による一般的な質問です。私は xstream と woodstox を使用しています。woodstox には、com.ctc.wstx.stax.WstxOutputFactory を登録する woodstox jar に javax.xml.stream.XMLOutputFactory のサービス プロバイダーが付属しています。独自の javax.xml.stream.XMLOutputFactory を提供したいのですが、まだクラスパスに woodstox jar があります。システム プロパティ javax.xml.stream.XMLOutputFactory を使用して独自のものを提供できることはわかっていますが、開発運用チームから面倒を取り除き、jar または戦争の META にあるサービス ファイルを使用してそれを実行しようとしています。 -INF/services フォルダー。javax.xml.stream.FactoryFinder のコードを調べて、自分の META-INF/services/javax.xml.stream.XMLOutputFactory ファイルが FactoryFinder で使用されるファイルであることを確認するにはどうすればよいですか?

camel で xstream を使用していますが、ファクトリを XStreamDataFormat に注入する方法が見つかりませんでした。

4

5 に答える 5

7

使用する XMLOutputFactory 実装を指定するには、次のようにします。

System.setProperty("javax.xml.stream.XMLOutputFactory", ... full classname You want to use ...);

ソース: http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP4.html

JAXP から派生した XMLInputFactory.newInstance() メソッドは、次の検索手順を使用して、ロードする特定の XMLInputFactory 実装クラスを決定します。

  1. javax.xml.stream.XMLInputFactory システム プロパティを使用します。
  2. JRE ディレクトリにある lib/xml.stream.properties ファイルを使用します。
  3. JRE で使用可能な jar 内の META-INF/services/javax.xml.stream.XMLInputFactory ファイルを調べて、可能であればサービス API を使用してクラス名を決定します。
  4. プラットフォームのデフォルトの XMLInputFactory インスタンスを使用します。
于 2014-02-28T09:19:26.237 に答える
5

サービス ファイルを WEB-INF/classes/services/javax.xml.stream.XMLOutputFactory に配置すると、クラスパスの最初になり、WEB-INF/lib の jar の前になることがわかりました。それが私の解決策です。

于 2013-07-23T11:34:56.763 に答える
4

ローカルでは解析が実行されるが、サーバーでは失敗するという同様の問題がありました。デバッグ後、サーバーがリーダーを使用していることが判明しましたcom.ctc.wstx.evt.WstxEventReader

一方、ローカルリーダーはcom.sun.xml.internal.stream.XMLEventReaderImpl

それを解決するために、次のプロパティを設定します。

System.setProperty("javax.xml.stream.XMLInputFactory", "com.sun.xml.internal.stream.XMLInputFactoryImpl");
于 2017-05-10T14:59:57.450 に答える