- PR -

Tomcat4.1上でXSLTを使った処理で

1
投稿者投稿内容
りっちゃん
会議室デビュー日: 2002/05/24
投稿数: 3
投稿日時: 2002-11-30 14:12
はじめまして。
Tomcat4.1上でXML/XSLTを使うservletを作っているのですが、1つ困っていることがあります。解決方法がおわかりの方がいたらご教授願います。

<やりたいこと> XML に XSLT を当ててTEXT変換する
<方法> XSLTの<xsl:output>で method="text" を指定

[XML]
<root><key>10</key></root>

[XSLT]
<xsl:output method="text"/>
<xsl:templates match="/root">
select * from table_a where key = <xsl:value-of select="key"/>
</xsl:templates>

[予想結果]
select * from table_a where key = 10

[実際の結果]
10

単にTransformerクラスを使ってやればいいだけのはずで、スタンドアロンで
サンプルを作って動かしたときは予想結果どおりうまく行くんですが、
Tomcat4.1上で同じ事をやると違う結果(実際の結果)になってしまっています。

実行時に参照されるライブラリが異なっているのかと思ったのですが、どちらも
apache xalan が使用されているようです。こまかいバージョンまでは確認とれません
でしたが・・・

そこで、解決方法は以下の2つのいずれかだと思うのですが・・・
1) Tomcat4.1 でデフォルト参照しているXLSTプロセッサを変更する
--> classpathの設定? libフォルダにjarを配置?
2) 実行時にXSLTプロセッサのプロパティなどを設定して予想結果が得られる
ようにする
--> xalanの動作プロパティのどの辺をいじればよい?

環境: JDK 1.4, Tomcat4.1
クラスパス: JDK/jre/lib/rt.jar <-- この中にxalanが含まれている?

どなたか、お分かりになるようでしたら処置方法を教えてください。
よろしくお願いします。
Paul
ベテラン
会議室デビュー日: 2002/04/30
投稿数: 75
お住まい・勤務地: 東京
投稿日時: 2002-12-06 15:23
中込です。

> 1) Tomcat4.1 でデフォルト参照しているXLSTプロセッサを変更する
Tomcat3.3ではxalan.jarを参照していましたが、4.1には存在しないはずです。

> 環境: JDK 1.4, Tomcat4.1
> クラスパス: JDK/jre/lib/rt.jar <-- この中にxalanが含まれている?
そうです。JDK1.4では、ブートストラップクラスにxalanが含まれます。
ですから、アプリケーションで要求するxalanのバージョンと食い違って、
問題が起きる場合があるのです。
JDK1.4に搭載されているxalanバージョンの確認は以下のコマンドでできます。
java org.apache.xalan.processor.XSLProcessorVersion
ちなみに、J2REの1.4.1_01では、Xalan Java 2.2.D11です。

そこで、ブートストラップに登録されているクラスより先に、アプリケーションで
要求するライブラリを読ませる必要が出てきます。
これに対応するのが、JDK1.4の Endorsed Standards Override Mechanismです。
JREのlib/endorsedディレクトリか、-Djava.endorsed.dirs= で指定した
ディレクトリに置かれたライブラリが、ブーとストラップより優先されます。

どうもTomcat4.1には、この機能に対応するしくみが導入されているようです。
CATALINA_HOMEのcommon/endorsedディレクトリ配下に、アプリケーションが要求する
xalan.jarを置いてください。
1

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