• 検索結果がありません。

The Simple API for XML

ドキュメント内 xml.book (ページ 30-59)

WebLogic XML Streaming API

SAX 2.0: The Simple API for XML

Document Object Model (DOM)

プ リ ケーシ ョ ンの開発

以降の節では、 Java プ ロ グ ラ ミ ング言語 と WebLogic Server を使用し て XML ア プ リ ケーシ ョ ン を開発する方法について説明し ます。 こ こ では、 Java サーブ レ ッ ト と JavaServer Pages (JSP) を使用し て Java アプ リ ケーシ ョ ン を記述する方 法について理解し てい る こ と を前提に し ています。 サーブレ ッ ト と JSP アプ リ ケーシ ョ ンの記述方法については、 『

WebLogic HTTP

サーブレ ッ ト プロ グ ラ マーズ ガ イ ド』 と 『

WebLogic JSP

プ ロ グ ラ マーズ ガ イ ド』 を参照し て く だ さ い。

2-1

ページの 「XML アプ リ ケーシ ョ ンの開発 : 主な手順」

2-2

ページの 「XML ド キ ュ メ ン ト の解析」

2-10

ページの 「新し い XML ド キ ュ メ ン ト の生成」

2-13

ページの 「XML ド キ ュ メ ン ト の変換」

XML アプ リ ケーシ ョ ンの開発 : 主な手順

WebLogic Server XML サブシ ステ ム を使用し て XML アプ リ ケーシ ョ ンを開発す

る場合、 通常は以下のプロ グ ラ ミ ング タ ス ク の一部ま たは全部を実行し ます。

1. XML

ド キ ュ メ ン ト を解析し ます。

XML

ド キ ュ メ ン ト は、 い く つかの ソ ースか ら構成さ れています。 た と えば、

ク ラ イ アン ト か ら XML ド キ ュ メ ン ト を受信する サーブレ ッ ト を開発し、

サーブレ ッ ト ま たはその他の EJB な どか ら XML ド キ ュ メ ン ト を受信する

EJB

を記述で き ます。 各イ ン ス タ ン スで、 データ を操作で き る よ う に XML

ド キ ュ メ ン ト を解析し てお く こ と も で き ます。

こ の タ ス ク の詳細については、

2-2 ページの 「XML ド キ ュ メ ン ト の解析」

を 参照し て く だ さ い。

2.

新し い XML ド キ ュ メ ン ト を生成し ます。

サーブレ ッ ト ま たは EJB が XML ド キ ュ メ ン ト を受信および解析し、 何 ら か の形でデータ を操作し た ら、 サーブレ ッ ト ま たは EJB は、 新し い XML ド キ ュ メ ン ト を生成し て ク ラ イ アン ト に返すか、 他の EJB に渡 さ なければな ら ない こ と があ り ます。

こ の タ ス ク の詳細については、

2-10 ページの 「新し い XML ド キ ュ メ ン ト の

生成」 を参照し て く だ さ い。

3. XML

データ を他の形式に変換し ます。

XML

ド キ ュ メ ン ト を解析するか、 新し い XML ド キ ュ メ ン ト を生成し た ら、

サーブレ ッ ト ま たは EJB は、 その XML を HTML、 WML、 ま たはプレーン テキ ス ト などの形式に変換し なければな ら ない こ と があ り ます。

こ の タ ス ク の詳細については、

2-13

ページの 「JAXP に よ る XML データの 変換」 を参照し て く だ さ い。

XML ド キ ュ メ ン ト の解析

こ の節では、JAXP に よ り DOM モー ド と SAX モー ド で XML ド キ ュ メ ン ト を解 析する方法、 およびサーブレ ッ ト か ら XML ド キ ュ メ ン ト を解析する方法につい て説明し ます。

注意:

WebLogic XML

ス ト リ ー ミ ング API に よ り XML ド キ ュ メ ン ト を解析す る方法の詳細については、第 4 章 「WebLogic XML Streaming API の使い 方」 を参照し て く だ さ い。

前述の よ う に、 Administration Console の XML レ ジ ス ト リ を使用し て以下の項目 を コ ン フ ィ グ レーシ ョ ン し ます。

doctype

ご と のパーサ。 指定し た doctype の組み込みパーサの代わ り に使 用 さ れます。

外部エンテ ィ テ ィ の解決。 XML ド キ ュ メ ン ト の解析中に外部フ ァ イ ルを 見つけ る よ う に要求さ れた場合に XML パーサが実行する処理です。

Administration Console

で こ れ ら の タ ス ク を実行する方法については、第 7 章

「WebLogic Server XML の管理」 を参照し て く だ さ い。

SAX

モー ド に よ る XML ド キ ュ メ ン ト 解析の詳細なサンプルについては、

WL_HOME\samples\server\src\examples\xml\saxデ ィ レ ク ト リ を参照し て く だ さ い。WL_HOMEは、 最上位 WebLogic Platform デ ィ レ ク ト リ です。

SAX モー ド で JAXP を使用し た XML ド キュ メ ン ト の解析

次の コー ド例は、 SAX パーサ フ ァ ク ト リ を コ ン フ ィ グ レーシ ョ ン し て検証パー サを作成する方法を示し た ものです。 ま た、MyHandler ク ラ ス をパーサに登録 する方法も示し てい ます。MyHandler

ク ラ スは、 SAX 解析イベン ト ま たはエ

ラーのカ ス タ ム動作を提供する ために DefaultHandlerク ラ スのあ ら ゆ る メ ソ ッ ド をオーバ ラ イ ド でき ます。

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

...

MyHandler handler = new MyHandler();

// MyHandler org.xml.sax.helpers.DefaultHandler を拡張 //SAXParserFactory のインスタンスを取得

SAXParserFactory spf = SAXParserFactory.newInstance();

//検証パーサを指定

spf.setValidating(true); // DTD をロードする必要がある //ファクトリから SAX パーサのインスタンスを取得

SAXParser sp = spf.newSAXParser();

//ドキュメントを解析

sp.parse("http://server/file.xml", handler);

...

注意: 組み込みパーサ以外のパーサを使用する場合は、 WebLogic Server

Administration Console

を使用し て XML レ ジ ス ト リ でパーサを指定し ま す。 指定し なかった場合、SaxParserFactory.newInstance メ ソ ッ ド は 組み込みパーサを返し ます。 組み込みパーサ以外のパーサを使用する

WebLogic Server

の コ ン フ ィ グ レーシ ョ ン手順については、

7-5

ページの

「組み込み以外のパーサま たは ト ラ ン ス フ ォーマの コ ン フ ィ グ レーシ ョ ン」 を参照し て く だ さ い。

SAX

モー ド に よ る XML ド キ ュ メ ン ト 解析の詳細なサンプルについては、

WL_HOME\samples\server\src\examples\xml\saxデ ィ レ ク ト リ を参照し て く だ さ い。WL_HOMEは、 最上位 WebLogic Platform デ ィ レ ク ト リ です。

DOM モー ド で JAXP を使用し た XML ド キュ メ ン ト の解析

次の コー ド例では、 XML ド キ ュ メ ン ト を解析し、DocumentBuilderオブジ ェ ク ト か ら org.w3c.dom.Documentツ リ ーを作成する方法を示し ます。

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

...

//DocumentBuilderFactory のインスタンスを取得 DocumentBuilderFactory dbf =

DocumentBuilderFactory.newInstance();

//検証パーサを指定

dbf.setValidating(true); // DTD をロードする必要がある //ファクトリから DocumentBuilder のインスタンスを取得 DocumentBuilder db = dbf.newDocumentBuilder();

//ドキュメントを解析

Document doc = db.parse(inputFile);

...

注意: 組み込みパーサ以外のパーサを使用する場合は、 WebLogic Server

Administration Console

でパーサを指定し ます。 指定し なかった場合、

DocumentBuilderFactory.newInstance メ ソ ッ ド は組み込みパーサを 返し ます。 組み込みパーサ以外のパーサを使用する WebLogic Server の コ ン フ ィ グ レーシ ョ ン手順については、

7-5 ページの 「組み込み以外の

パーサ または ト ラ ン ス フ ォーマの コ ン フ ィ グ レーシ ョ ン」 を参照し て く だ さ い。

DOM

モー ド に よ る XML ド キ ュ メ ン ト 解析の詳細なサンプルについては、

WL_HOME\samples\server\src\examples\xml\domデ ィ レ ク ト リ を参照し て く だ さ い。WL_HOMEは、 最上位 WebLogic Platform デ ィ レ ク ト リ です。

サーブレ ッ ト での XML ド キュ メ ン ト の解析

Java サーブレ ッ ト 仕様バージ ョ ン 2.2 で、

setAttribute メ ソ ッ ド と

getAttribute メ ソ ッ ド に対する サポー ト が追加 さ れま し た。 属性は、 リ ク エス ト に関連付け られたオブジ ェ ク ト です。 リ ク エス ト オブジ ェ ク ト は、 ク ラ イ ア ン ト リ ク エス ト か ら の全情報を カプセル化し ます。 HTTP プ ロ ト コルでは、 こ の情報は、 リ ク エス ト の HTTP ヘ ッ ダ と メ ッ セージ本文を基に ク ラ イ アン ト か

ら サーバに転送 さ れます。

WebLogic Server

では、setAttribute メ ソ ッ ド と getAttribute メ ソ ッ ド を使 用し て XML ド キ ュ メ ン ト を解析でき ます。SAX モー ド 解析には setAttribute

メ ソ ッ ド を使用し、 DOM モー ド 解析には getAttribute メ ソ ッ ド を使用し ま す。

org.xml.sax.DefaultHandler 属性を使用し た ド キュ メ ン ト の 解析

次のサンプル コー ドでは、setAttribute メ ソ ッ ドの使い方を示し ます。

import weblogic.servlet.XMLProcessingException;

import org.xml.sax.helpers.DefaultHandler;

...

public void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

try {

request.setAttribute("org.xml.sax.helpers.DefaultHandler", new DefaultHandler());

} catch(XMLProcessingException xpe) {

System.out.println("Error in processing XML");

xpe.printStackTrace();

return;

} ...

ま た、 現在は非推奨 と なっ てい る も のの、org.xml.sax.HandlerBase

属性を使

用し て XML ド キ ュ メ ン ト を解析する こ と も でき ます。

request.setAttribute("org.xml.sax.HandlerBase", new HandlerBase());

注意: こ のサンプル コー ドは、 SAX と setAttribute メ ソ ッ ド で ド キ ュ メ ン ト を解析する単純な方法を示し た も のです。 ドキ ュ メ ン ト を解析する こ の メ ソ ッ ドは、 他のサーブレ ッ ト ベンダではサポー ト さ れていない

WebLogic Server の便利な機能です。 し たがって、 アプ リ ケーシ ョ ン を他

のサーブレ ッ ト プ ラ ッ ト フ ォームで実行する場合は、 こ の機能を使用し ないで く だ さ い。

org.w3c.dom.Document 属性を使用し た ド キュ メ ン ト の解析

次のサンプル コー ドでは、getAttribute メ ソ ッ ドの使い方を示し ます。

import org.w3c.dom.Document;

import weblogic.servlet.XMLProcessingException;

...

public void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

try {

Document doc = request.getAttribute("org.w3c.dom.Document");

} catch(XMLProcessingException xpe) {

System.out.println("Error in processing XML");

xpe.printStackTrace();

return;

} ...

注意: こ のサンプル コー ドは、 DOM と getAttribute メ ソ ッ ド で ド キ ュ メ ン ト を解析する単純な方法を示し た も のです。 ドキ ュ メ ン ト を解析する こ の メ ソ ッ ドは、 他のサーブレ ッ ト ベンダではサポー ト さ れていない

WebLogic Server

の便利な機能です。 し たがって、 アプ リ ケーシ ョ ン を他 のサーブレ ッ ト プ ラ ッ ト フ ォームで実行する場合は、 こ の機能を使用し ないで く だ さ い。

非検証パーサの検証

前述の と お り 、 整形式 ドキ ュ メ ン ト は、 W3C の XML 1.0 勧告のルールに従っ て い る、 構文的に正し い ド キ ュ メ ン ト の こ と です。 有効な ド キ ュ メ ン ト は、 DTD ま たはス キーマで指定し た制約に従っている ドキ ュ メ ン ト です。

非検証パーサは、 ドキ ュ メ ン ト が整形式かど う かを検証し ますが、 有効かど う か は検証し ません。

2-10 ページの 「WebLogic FastParser の使用」

で説明し てい る

WebLogic FastParser

は、 非検証パーサです。

(

検証パーサの使用を前提に ) ド キ ュ メ ン ト 解析時の検証を有効にするには、 以 下を実行する必要があ り ます。

以下の例で示すよ う に、SAXParserFactory.setValidating() メ ソ ッ ド を

true

に設定し ます。

SAXParserFactory factory = SAXParserFactory.newInstance();

factory.setValidating(true);

解析する XML ド キ ュ メ ン ト で、 ( イ ン ラ イ ン ま たは参照で ) DTD ま たはス キーマが定義さ れてい る よ う に し ます。

XML ド キュ メ ン ト 解析時のエンテ ィ テ ィ 解決の処 理

こ の節では、 XML パーサに よ る外部エンテ ィ テ ィ の識別および解決方法、 およ び XML アプ リ ケーシ ョ ンに よ る外部エンテ ィ テ ィ 解決のパフ ォーマン ス を向上

させる WebLogic Server の機能など、 外部エンテ ィ テ ィ に関する一般的な情報に ついて説明し ます。

XML

ド キ ュ メ ン ト を解析し なが ら外部エンテ ィ テ ィ を解決する場合の詳細なサ ンプルについては、

WL_HOME\samples\server\src\examples\xml\entityresolutionデ ィ レ ク ト リ を参照し て く だ さ い。WL_HOMEは、 最上位 WebLogic Platform デ ィ レ ク ト リ で す。

外部エンテ ィ テ ィ に関する一般的な情報

外部エンテ ィ テ ィ は、 XML ドキ ュ メ ン ト 内に記述さ れていない も のの、 XML ド キ ュ メ ン ト 内で参照 さ れる さ ま ざ ま なテキ ス ト です。 実際のテキ ス ト は、 同じ コ ン ピ ュータの他のフ ァ イル、 Web 上な ど、 ど こ にあ っ て も かまいません。

パーサは、 ドキ ュ メ ン ト の解析時に外部エンテ ィ テ ィ 参照に出会 う と 、 参照 さ れ たテキ ス ト を フ ェ ッ チし、 テキ ス ト を XML ド キ ュ メ ン ト 内に配置し てか ら、 解

ドキュメント内 xml.book (ページ 30-59)

関連したドキュメント