- PR -

XSLTプロセッサ

1
投稿者投稿内容
ボブ
常連さん
会議室デビュー日: 2007/10/03
投稿数: 44
投稿日時: 2007-11-05 13:36
以下の文でXSLT変換をさせた場合、どのプロセッサが使われるのでしょうか?
また、使用しているプロセッサを表示させる方法はありませんでしょうか?
javax.xml.transform.TransformerFactory Factory = TransformerFactory.newInstance();
javax.xml.transform.Transformer transformer = Factory.newTransformer(new StreamSource(stylesheet));
transformer.transform(new StreamSource(sourceId), new StreamResult(strWrite));

Javaはsun jre1.4.2_08
xercessImpl.jarとxmlParserAPIs.jarを追加しています。
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2007-11-05 14:53
transformerがどのjarファイルからロードされるか?
ということでしょうか。

それなら
http://blogs.wankuma.com/kacchan6/archive/2007/04/20/72159.aspx
にJDK1.5ですがサンプルがあります。

勘違いなら、ごめんなさい。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-11-05 15:50
本人降臨ですw。

TransformerFactory.newInstance();のJavadocを読むと、ルールが明記されています。

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/javax/xml/transform/TransformerFactory.html#newInstance()

手元のJDK6のコードを読むと、
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
のインスタンスを生成していますが、
SunのJDK1.4はCrimson/Xalan、JDK5以降はXerces/Xalanと記憶しています。
なので、Xalanが使われていると思います。

どのみち、JDK次第で変わるので、読み込まれるjarを確認するのが早いでしょう。
jarが特定できればManifestを参照すればバージョン等が分かるかと思います。
ボブ
常連さん
会議室デビュー日: 2007/10/03
投稿数: 44
投稿日時: 2007-11-05 20:03
ありがとうございます。
現在 同じロジックを使って、違う環境のもとで
動作させています。
片方はメモリリークしてしまうので、XSLTプロセッサの違いではないかと睨んでいたところです。

皆様にご教示頂いたとおり やってみたところ
Aの環境では、j2sdk1.4.2_02/jre/lib/rt.jar!/javax/xml/transform/TransformerFactor
y.class

Bの環境では
xmlParserAPIs.jar!/javax/xml/transform/TransforerFactory.class

というようになりました。
しかし、どのプロセッサが使われているか分かりません。
xmlParserAPIs.jarはXSLTプロセッサを持っていないと認識しています。

またXSLTプロセッサしてはsaxonとxalanが入っていると思われます。
これらを抜かして行けばいいのですが、事情により出来ないので、それぞれの環境でプロセッサとして何が使われているか特定したいと思っています。

何か勘違いしてる点、またプロセッサを知る良い方法がありましたらご教示願います。


[ メッセージ編集済み 編集者: ボブ 編集日時 2007-11-05 20:11 ]
ボブ
常連さん
会議室デビュー日: 2007/10/03
投稿数: 44
投稿日時: 2007-11-05 21:43
JDK1.4.2のソースを読むと
org.apache.xalan.processor.TransformerFactoryImplのインスタンスを作成しているようなので、xmlParserAPIs.jarのソースファイルを取得しようと思ったのですが、
xercesのプロジェクトを見てもxmlParserAPIs.jarのソースが手に入りませんでした。
どこにあるかご存知ありませんでしょうか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-11-05 23:06
ファクトリではなく、ファクトリによって生成されたインスタンスの方を見てみましょう。
ボブ
常連さん
会議室デビュー日: 2007/10/03
投稿数: 44
投稿日時: 2007-11-06 09:32
ご教示の通りインスタンスを見たところ、
環境Aでは com.icl.saxon.TransformerFactoryImpl
環境Bでは org.apache.xalan.processor.TransformerFactoryImpl
となっていました。
saxonとxalanですね。
xalanを使うとリークしてしまうのでしょうか。。
もう少し調査を進めてみます。

ありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)