・   「Java/XML入門」実習 第4回

JAXP 1.2の実装クラス

今回は JAXP 1.2に実装されたパッケージを利用してみましょう。


・ 準備1(学内向け):
マシンを立ち上げ、UNIX(Linux)かWindowsのいずれかの環境でログインしなさい。
端末エミュレータのウィンドウ(kterm もしくは Cygwin)を開き、 そこで以下の作業をしてください。

・ 準備2(学内向け):
自分が Java XML Pack をインストールした場所を確認してください。
前回、前々回の課題で ParseTest, DOMTestのクラスが、 実装クラス名を表示するようになっていない場合は、 コメントを外して再コンパイルしておいてください。


・ 基本課題1:「クラスパスの指定」

  1. 前々回の課題 ParseTest を Java XML Packに提供されている JAXP 1.2の実装パッケージを利用して実行してみます。 まず、実行時のオプション -classpath で優先的に捜しに行くクラスパスを 指定する方法で行ってみます。
    (UNIXの場合とWinodws(Cygwin)の場合でパスの記述が異なるので注意)
  2. 表示される実装クラスの名前が以前に試した場合と異なるはずです。 クラスパスを指定しない場合の出力結果と比較し、 そのことを確認してください。

(UNIXの場合)
java  -classpath  ~/jax/jaxp-1.2/xercesImpl.jar:~/jax/jaxp-1.2/sax.jar:.  ParseTest  sample3.xml

(WindowsのCygwinの場合)
java  -classpath  "z:\jax\jaxp-1.2\xercesImpl.jar;z:\jax\jaxp-1.2\sax.jar;."  ParseTest  sample3.xml

・ 基本課題2:「クラスパスの指定(2)」

  1. 前回の課題 DOMTest を Java XML Packに提供されている JAXP 1.2の実装パッケージを利用して実行してみます。 まず、実行時のオプション -classpath で優先的に捜しに行くクラスパスを 指定する方法で行ってみます。 (今度は sax.jar ではなく dom.jarをクラスパスに指定する点に注意。)
  2. 表示される実装クラスの名前が以前に試した場合と異なるはずです。 クラスパスを指定しない場合の出力結果と比較し、 そのことを確認してください。

(UNIXの場合)
java  -classpath  ~/jax/jaxp-1.2/xercesImpl.jar:~/jax/jaxp-1.2/dom.jar:.  DOMTest  sample3.xml

(WindowsのCygwinの場合)
java  -classpath  "z:\jax\jaxp-1.2\xercesImpl.jar;z:\jax\jaxp-1.2\dom.jar;."  DOMTest  sample3.xml

・ 基本課題3:「新しいプロパティによるライブラリの指定」
SDK1.4 では、別のライブラリの追加や利用が便利なように、 "endorsed"の指定ができます。

  1. 上の課題1,2 の実行をクラスパスのオプションではなく、 プロパティ java.endorsed.dirs の値として Jarファイルの格納先の ディレクトリを指定してみなさい。
  2. クラスパスを指定した場合に比べて、 簡単に同じ結果が得られることを確認しなさい。

(UNIXの場合)
java  -Djava.endorsed.dirs=/home/net/../jax/jaxp-1.2/  ParseTest  sample3.xml
java  -Djava.endorsed.dirs=/home/net/../jax/jaxp-1.2/  DOMTest  sample3.xml

(WindowsのCygwinの場合)
java  -Djava.endorsed.dirs="z:\jax\jaxp-1.2\\"  ParseTest  sample3.xml
java  -Djava.endorsed.dirs="z:\jax\jaxp-1.2\\"  DOMTest  sample3.xml

・ 基本課題4:「システムへのインストール」
同様に、元の J2SE SDK 1.4の内容を直接変更せずに、新しいパッケージを 追加インストールすることも可能です。 (以下の作業は root もしくは administratorの権限が必要です。)

  1. J2SE SDK 1.4がインストールされている場所に移動します。
  2. さらにその下の jre/lib/ (Winodows は jre\lib\ )に移動します。
  3. その下に endorsed という名前のディレクトリを作成します。 (既に存在する場合、この作業は不要)
  4. endorsed の下に、jaxp-1.2以下にある5個のJarファイル、 dom.jar, sax.jar, xalan.jar, xercesImpl.jar, xsltc.jarをコピーします。 (jaxp-api.jarはコピーしない。)
  5. 後は一般ユーザに戻って次の課題をやってみなさい。

・ 基本課題5:「新しいデフォルトの実装」

  1. 課題4の作業後、今度はオプション指定を特にせずに ParseTest, DOMTestを実行してみなさい。
  2. デフォルトの実装が JAXP 1.2 に変更されたことを確認しなさい。

・ レポート課題:
ここまでの課題が終わった人は、下記の項目を tatsuo宛のメール で報告しなさい。 Subject(件名):は java4 としてください。

  1. 課題5:で表示された SAXParserFactoryの実装クラス名
  2. 課題5:で表示された SAXParserの実装クラス名
  3. 課題5:で表示された XMLReaderの実装クラス名
  4. 課題5:で表示された DocumentBuilderFactoryの実装クラス名
  5. 課題5:で表示された DocumentBuilderの実装クラス名

・ 応用課題1:「実装クラスはどのようにして読み込まれるのか?」

  1. 課題5の実行でも、 javax.xml.parsers.SAXParserFactory と javax.xml.parsers.FactoryFinder のクラスは、 J2SE SDK 1.4の実装です。 これらが、どうやって xercesの実装クラスをロードできるのか、 そのメカニズムをソースファイルから確認してください。
  2. ヒント:次のようにして、xercesImpl.jarの内部をチェックしてみてください。

jar  tvf  xercesImpl.jar META-INF/services