Saxon6.5とSaxon9.3の共存

二月の終わりから三月はほぼJavaのSwingのコーディングに没頭していました.お客さんのシステムが基本的にWEBベース(Linux)なんですが、クライアントでも同じに動かせるようにと、サーバーと同じスタイルシートを使って最終的に同じPDFなどを出すWindowsで動くスタンドアロンGUIがあります.サーバーで動かしているXSLTプロセッサが当初はXalanだったのですが、いろいろあってSaxon6.5に変わり以降ずっとSaxonで動いています.
 
で、XSLTプロセッサがJavaベースなのでスタンドアロンWindows GUIJavaが相性が良いだろうということで、当初からJavaのSwingで作りました.IDEは最初はJBuilder6今はJBuilder 2008 R2です.
このスタンドアロンGUIは、もう稼動して数年になりますが、改造につぐ改造でGUIの画面に対応するパラメータクラスはお化けのように大きくなってしまいました.今回、再び大規模な改造です.お客さんの要求もどんどん高度化してきて、さすがにXSLT1.0のSaxon6.5ではもはや力不足.ということで、XSLT2.0プロセッサのSaxon PE 9.3を買ってもらうことにしました.(スタイルシートから拡張でJavaの静的メソッドを呼び出しているのでオープンソースのSaxon HEでは不可)
 
ところでWEBベースのシステムは、本体がJavaなんですがSaxonをコマンドラインで呼んでいます.
 
 java com.icl.saxon.StyleSheet -o [outfile] [src file] [xsl file]
 
スタンドアロンGUIはさすがにコマンドラインで呼ぶことはせずJAXP経由でSaxonを呼んでいます.で、気がついたのはSaxon6.5とSaxon9.3の混在です.WEBベースのシステムはコマンドラインで呼んでいるのでなんの影響もありませんが、JAXP経由で二つを混在させて呼び出して果たして大丈夫か?という疑念がありました.そんなのSaxon6.5と9.3で呼び出すクラスが違うから問題ないといえばそれまででしょうが、いざやってみるまではやはり心配なものです.(ダメだったらSaxon6.5を使い続けるかSaxon9.3にスイッチしなければなりません.)
 
肝心のコーディングはSaxonのサンプルに入っているように以下のようなものですが、[SaxonのTransformerファクトリークラス名]を"com.icl.saxon.TransformerFactoryImpl"か"net.sf.saxon.TransformerFactoryImpl"かに変更してXSLTプロセッサをスイッチングします.
 
  System.setProperty("javax.xml.transform.TransformerFactory",[SaxonのTransformerファクトリークラス名]);
  TransformerFactory tfactory = TransformerFactory.newInstance();
  StreamSource xslSrc = new StreamSource([スタイルシートファイル]);
  Transformer transformer = tfactory.newTransformer(xslSrc);
  ...
  transformer.transform([入力XML], [出力XML]);
 
結果ですが現在のところなんの問題もなく動いてくれています.JAXPではTransformerFactory.newInstance()を実行するとき、その都度システムプロパティを見てくれているのですね.考えれば当たり前ですがやれやれです.