OracleでXMLを活用する
XSQLプログラミング入門
最終回 アクションハンドラーを作成する
(2/2ページ)
アクションハンドラーからの出力を得る方法 |
出力にはおもに3つの方法があります。
- タグを直にDocument rootに貼り付ける
- DOMツリーをdocument rootに貼り付ける
- HttpResponceを通じて出力する
このほかにもサーブレットエンジンのログに書き出すなどが考えられます。
■タグを直にDocument rootに貼り付ける
この方法はすでにこの記事に何度か出てきましたので、もうご存知かもしれません。
public void handleAction(Node rootNode) { |
このアクションハンドラーを“page”をドキュメントエレメントとして呼び出した場合、次のような出力が得られます。
<?xml version="1.0" encoding="Shift_JIS"?> |
■DOMツリーをdocument rootに貼り付ける
さて、出力にもう少し構造を持たせたい場合には、DOMを使う方法があります。 例えば、
<?xml version="1.0" encoding="Shift_JIS"?> |
のように出力したいとします。 HandleActionメソッドでは次のように書きます。
public void handleAction(Node rootNode) { |
上記の中で、DOMのAPIが出てきましたので、実際にそこでどのような操作をしているのか、説明しておきましょう。
最初に、エレメント“site”を作り、そして“知恵の輪”テキストノードを作り、それを“site”の子ノードとしています。
次に“URL”エレメントとテキストノード “http://www.chienowa.com”、“description”エレメント、そして“知恵のマーケットプレース” テキストノードを順に作成します。続いて、 “description”エレメントに“知恵のマーケットプレース”ノード、“URL”エレメントにhttp://www.chienwoa.comノードを貼り付けていきます。
それらの“URL”ノード、“description”ノードの順に“site”エレメントに張り付けます。 このとき、“URL”エレメントが“description”の兄エレメントになることが決定します。最後に“site”エレメントをドキュメントエレメントに貼り付けます。
■HttpResponceを通じて出力する
特殊なケースに限ってこの方法でクライアントに出力します。特に普通にアクションを書く場合には必要ありませんが、テクニックとして知っておいても損はないでしょう。
Public void handleAction(Node rootNode) { |
アクションハンドラー内でのデータベースとの接続 |
この章では簡単にアクションハンドラー内でデータベースと接続する方法を述べます。XSQLサーブレットではコネクションプールを確保していますから、アクションハンドラー内ではこのコネクションプールからJDBCのコネクションをもらってくることをおすすめします。
次のように、XSQLPageRequestクラスのgetJDBCConnection()メソッドを呼ぶことでConnectionオブジェクトが所得できます。
JDBCのコネクションを確立するXSQLPageRequest xsqlpagerequest = getPageRequest(); |
なお、SQLJをアクションハンドラー内で使いたい場合は、コネクションプールのコネクションを使いまわすよりも、独自のコネクションを開設することをおすすめします。
エラーリポート(例外処理) |
エラーメッセージをクライアントに出力するのにXSQLサーブレットでは3つのAPIが用意されています。
- reportError(rootNode, "メッセージ");
- reportErrorIncludingStatement(rootNode, "メッセージ1", "メッセージ2");
- reportFatalError("メッセージ");
■reportErrorを利用する
これは非常に単純な方法です。例えば、以下のアクションハンドラー
public void handleAction(Node rootNode) { |
を呼び出すと
<?xml version="1.0" encoding="Shift_JIS"
?> |
というエラー出力がなされます。あとはXSLTで処理できます。
■reportErrorIncludingStatementを利用する
もう少し詳細なエラーメッセージを出力したい場合は、次の方法があります。
public void handleAction(Node rootNode) { |
このように記述すると、
<?xml version="1.0" encoding="Shift_JIS"
?> |
上記のように、statementタグとmessageタグとに別れて出力されます。
■reportFatalErrorを利用する
先ほどの2つのエラー出力の場合は、XSLTで処理することを前提にしていました。しかし、その場でどうしても処理を強制終了させたい場合もあるでしょう。その場合はこのメソッドを呼び出してください。 このメソッドではoracle.xml.xsql.XSQLErrorWriterクラスのprintメソッドが呼ばれます。
最後に、一般に共通していえることですがアクションハンドラーから外部ライブラリを使う場合はライブラリ側だけで処理せずthrowしてhandleActionメソッド側でも処理することをお勧めいたします。
以上でXSQLの連載は終了です。ここで紹介しきれなかったAPIも多数存在していますので、さらに腕を磨きたいかたはXSQLサーブレットパッケージに添付されている「JAVADOC」をぜひご参照ください。
最後に、おつきあいいただきました読者の皆様に感謝します。
目次 |
1ページ XSQLアクションハンドラー作成の基本 アクションハンドラーを呼び出すには? アクションハンドラーに値を渡す方法 action elementのattributeを読み込む action elementの内容を読み込む action elementの子エレメントの内容を読み込む HTTPで渡された引数を受け取る HTTPで渡された引数をHttpRequestを通じて受け取る 外部XMLファイルから読み取る 2ページ アクションハンドラからの出力を得る方法 アクションハンドラー内でのデータベースとの接続 エラーリポート(例外処理) HreportErrorを利用する reportErrorIncludingStatementを利用する reportFatalErrorを利用する |
「連載 XSQLプログラミング入門」 |
- QAフレームワーク:仕様ガイドラインが勧告に昇格 (2005/10/21)
データベースの急速なXML対応に後押しされてか、9月に入って「XQuery」や「XPath」に関係したドラフトが一気に11本も更新された - XML勧告を記述するXMLspecとは何か (2005/10/12)
「XML 1.0勧告」はXMLspec DTDで記述され、XSLTによって生成されている。これはXMLが本当に役立っている具体的な証である - 文字符号化方式にまつわるジレンマ (2005/9/13)
文字符号化方式(UTF-8、シフトJISなど)を自動検出するには、ニワトリと卵の関係にあるジレンマを解消する仕組みが必要となる - XMLキー管理仕様(XKMS 2.0)が勧告に昇格 (2005/8/16)
セキュリティ関連のXML仕様に進展あり。また、日本発の新しいXMLソフトウェアアーキテクチャ「xfy technology」の詳細も紹介する
|
|