ナビゲーションをスキップ

WebLogic XML プログラマーズ ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

XML プログラミング手法

以下の節では、XML データを処理する J2EE アプリケーションを開発するための特定の XML プログラミング手法について説明します。

 


Java クライアントと WebLogic Server との間での XML データの転送

一般的な J2EE アプリケーションでは、クライアント アプリケーションは、XML データを処理するサーブレットまたは JSP に XML データを送信します。次に、サーブレットまたは JSP は、そのデータを JMS 送り先や EJB などの別の J2EE コンポーネントに送信するか、または処理した XML データを別の XML ドキュメントの形でクライアントに返します。

Java クライアントから WebLogic Server にホストされたサーブレットまたは JSP に XML データを送信し、クライアントにデータが返されるようにするには、java.net.URLConnection クラスを使用します。このクラスは、アプリケーションと URL (この場合は、サーブレットまたは JSP を呼び出す URL) の間の通信リンクを表します。URLConnection クラスのインスタンスは、HTTP POST メソッドを使用して XML ドキュメントを送信します。

WebLogic XML サンプルから抜粋した次の Java クライアント プログラムは、プログラムと JSP の間で XML データを転送する方法を示しています。

import java.net.*;
import java.io.*;
import java.util.*;
public class Client {
  public static void main(String[] args) throws Exception {
if (args.length < 2) {
System.out.println("Usage: java examples.xml.Client URL Filename");
}
else {
try {
URL url = new URL(args[0]);
String document = args[1];
FileReader fr = new FileReader(document);
char[] buffer = new char[1024*10];
int bytes_read = 0;
if ((bytes_read = fr.read(buffer)) != -1)
{
URLConnection urlc = url.openConnection();
urlc.setRequestProperty("Content-Type","text/xml");
urlc.setDoOutput(true);
urlc.setDoInput(true);
PrintWriter pw = new PrintWriter(urlc.getOutputStream());
            // xml を jsp に送信
pw.write(buffer, 0, bytes_read);
pw.close();
            BufferedReader in = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
            in.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}

この例では、引数リストからの URL を使用して JSP への URL 接続をオープンし、その接続から出力ストリームを取得し、引数リストに指定された XML ドキュメントを出力ストリームに出力して、XML データを JSP に送信する方法を示しています。次に、URLConnection クラスの getInputStream() メソッドで、JSP がクライアント アプリケーションに返す XML データを読み取る方法を示します。

サンプル JSP から抜粋した次のコード セグメントでは、JSP がクライアント アプリケーションから XML データを受信し、XML ドキュメントを解析して、XML データを返す方法を示しています。

BufferedReader br = new BufferedReader(request.getReader());
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
DocumentBuilder db = fact.newDocumentBuilder();
Document doc = db.parse(new InputSource(br));
...
PrintWriter responseWriter = response.getWriter();
responseWriter.println("<?xml version='1.0'?>");

...
WebLogic サーブレットと JSP のプログラミングの詳細については、『WebLogic HTTP サーブレット プログラマーズ ガイド』および『WebLogic JSP プログラマーズ ガイド』を参照してください。

 


JMS アプリケーションでの XML ドキュメントの処理

WebLogic Server は、JMS アプリケーションで XML ドキュメントを処理するために一部の Java Message Service (JMS) クラスに対して次の拡張を提供しています。

より一般的な TextMessage クラスではなく、XMLMessage クラスを使用して、JMS アプリケーションで XML ドキュメントを送受信する場合、XML 固有のメッセージ セレクタを使用して不要なメッセージをフィルタ処理できます。具体的には、JMS_BEA_SELECT メソッドを使用します。このメソッドでは XML ドキュメントの XML フラグメントを検索するための XPath クエリを指定できます。クエリの結果に基づいて、メッセージ コンシューマがメッセージを受信しないよう決定することもあります。これにより、ネットワーク トラフィックを軽減し、JMS アプリケーションのパフォーマンスを向上させることができます。

XMLMessage クラスを使用して JMS アプリケーションに XML メッセージを含めるには、WLQueueSession オブジェクトまたは WLTopicSession オブジェクトのいずれかを作成する必要があります。どちらのオブジェクトを作成するかは、JMS Connection を作成した後に、汎用オブジェクト QueueSession または TopicSession ではなく、JMS キューまたはトピックを使用するかどうかによります。次に、WLSession インタフェースの createXMLMessage() メソッドを使用して XMLMessage オブジェクトを作成します。

JMS アプリケーションでの XMLMessage オブジェクトの使用方法については、『WebLogic JMS プログラマーズ ガイド』を参照してください。

 


HTTP インタフェースを持たない外部エンティティへのアクセス

WebLogic Server は、外部レポジトリにある外部エンティティに、エンティティを返す URL などの HTTP インタフェースがある限り、その外部エンティティを自動的に取得およびキャッシュできます。XML レジストリで外部エンティティをコンフィグレーションする際の詳細については、「外部エンティティのコンフィグレーション タスク」を参照してください。

HTTP インタフェースを持たないレポジトリに格納されている外部エンティティにアクセスする場合は、インタフェースを作成する必要があります。たとえば、システム ID、パブリック ID、DTD のテキストの列を持つデータベース テーブルに XML ドキュメント用の DTD を格納しているとします。WebLogic XML アプリケーションから外部エンティティとして DTD にアクセスする場合、JDBC を使用してデータベースの DTD にアクセスするサーブレットを作成できます。

URL でサーブレットを呼び出すので、ここで外部エンティティに対する HTTP インタフェースを持っていることになります。XML レジストリでエンティティ レジストリ エントリを作成する場合、外部エンティティの場所としてサーブレットを呼び出す URL を指定します。WebLogic Server は、この外部エンティティへの参照を含む XML ドキュメントを解析しているときにサーブレットを呼び出し、サーブレットがデータベースのクエリに内部で使用するパブリック ID およびシステム ID をサーブレットに渡します。

 


XML ドキュメント ヘッダ情報の取得

ドキュメント内の実際のデータをすべて取得するのではなく、ルート要素、システム ID、パブリック ID などの XML ドキュメントに関するヘッダ情報のみ必要な場合を考えてみましょう。ドキュメントの詳細な解析は不要で、XML ドキュメントのサイズが非常に大きい場合は、アプリケーションのパフォーマンスが低下する可能性があります。

XML ドキュメントを解析する代わりに、org.xml.sax.InputSource クラスに対する WebLogic Server 拡張である weblogic.xml.sax.XMLInputSource クラスを使用して、ヘッダ情報を取得できます。

警告 :weblogic.xml.sax.XMLInputSource は、WebLogic Server のバージョン 8.1 から非推奨になりました。XML ドキュメントのルート要素、パブリック ID、システム ID、およびネームスペース URI を取得するには、WebLogic XML Streaming API を使用してください。詳細については、「WebLogic XML Streaming API の使い方」を参照してください。

次のサンプル コード セグメントに、XMLInputSource クラスの使い方を示します。

import weblogic.xml.sax.XMLInputSource;
...
    String inputXML = "file://xml_docs/myXMLdoc.xml";
XMLInputSource xis = new XMLInputSource(inputXML);
String docType = xis.getRootTag();
String publicID = xis.getPublicId();
String systemID = xis.getSystemId();
String namespaceURI = xis.getNamespaceURI();

weblogic.xml.sax.XMLInputSource の詳細については、「WebLogic Server 8.1 API Reference」を参照してください。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次